SlideShare una empresa de Scribd logo
1 de 150
Descargar para leer sin conexión
Silex
  desarrollo web ágil y
  profesional con PHP

BILBOSTACK          JAVIER EGUILUZ
26 ENERO 2013
Gracias a la organización.



Asier   Fran     Ibon    Vicenç
Agenda
 1. Introducción
 2. Programando aplicaciones
 3. DEMO
 4. Buenas prácticas
 5. Puntos débiles
Introducción
¿Por qué?
En el mundo de los negocios...
1. Rápido
2. Barato
3. Bueno
En el mundo de los negocios...
1. Rápido              ELIGE DOS

2. Barato
3. Bueno
En el mundo de la programación...
1. Bien hecho
2. Terminado a tiempo
3. Barato
En el mundo de la programación...
1. Bien hecho     ELIGE UNA

2. Terminado a tiempo
3. Barato
En el mundo de la programación...
✔ Bien
1.     hecho
✔ Terminado a tiempo
2.
✔ Barato
3.
   Con Silex puedes
   tenerlo todo
¡no tengo
¡quiero hacerlo bien!    tiempo!
¿Qué es
 Silex?
Foto: Wikipedia
Curiosity (2012)




                  Sojourner (2007)
Foto: Wikipedia
Sojourner   Curiosity
                (2007)      (2012)

Masa            11 kg      900 kg
Coste ($)      150 M      1.800 M
Memoria RAM     64 KB      256 MB
CPU             2 MHz     200 MHz
Es importante tener en cuenta que...
• El grande jamás podrá ser tan ágil
  como el pequeño.
• El pequeño jamás podrá competir
  en potencia y funcionalidad con el
  grande.
Silex
The PHP micro-framework
based on the Symfony2
Components

                           el logo
                          de Silex
los dos son frameworks y usan los mismos componentes, pero...
...Symfony es un framework muy grande y Silex es un framework muy pequeño
Silex   Symfony2
Peso               5 MB      8 MB
Archivos           3.366    6.578
Nivel dificultad

Flexibilidad
Los creadores de Silex




Igor Wiedler     Fabien Potencier
@igorw           @fabpot
+ fácil     + calidad
- calidad   - facil
+ fácil     + calidad
- calidad   - facil
Programando
 aplicaciones
Funciones anónimas
         y closures
Función normal
function suma($a, $b) {
  return $a + $b;
}
Función anónima
function ($a, $b) {
  return $a + $b;
}
Usando una función anónima
$app->get('...', function ($a, $b) {
   return $a + $b;
});
Closure
$a = 3;
function ($b) {
  return $a + $b;
}
Closure
$a = 3;             NO FUNCIONA
function ($b) {
  return $a + $b;
}
Closure
$a = 3;
function ($b) use ($a) {
  return $a + $b;
}
El código más común de Silex
$app->get('...', function ($var) use ($app) {
   // ...
});
El primer
 ejemplo
Hola
mundo.
http://bilbostack.com/hola
Hola Mundo en Silex
require_once __DIR__.'/../vendor/autoload.php';

$app = new SilexApplication();

$app->get('/hola', function() {
   return 'Hola mundo';
});

$app->run();
Cargar clases automáticamente
require_once __DIR__.'/../vendor/autoload.php';

$app = new SilexApplication();

$app->get('/hola', function() {
   return 'Hola mundo';
});

$app->run();
Crear la aplicación Silex
require_once __DIR__.'/../vendor/autoload.php';

$app = new SilexApplication();

$app->get('/hola', function() {
   return 'Hola mundo';
});

$app->run();
Ejecutar código para una URL
require_once __DIR__.'/../vendor/autoload.php';

$app = new SilexApplication();

$app->get('/hola', function() {
   return 'Hola mundo';
});

$app->run();
Arrancar la aplicación
require_once __DIR__.'/../vendor/autoload.php';

$app = new SilexApplication();

$app->get('/hola', function() {
   return 'Hola mundo';
});

$app->run();
Hola Mundo en Silex
require_once __DIR__.'/../vendor/autoload.php';

$app = new SilexApplication();

$app->get('/hola', function() {
   return 'Hola mundo';
});

$app->run();
Sinatra / Ruby

require 'sinatra'

get '/hola' do
 "Hola mundo."
end
node.js / JavaScript

var http = require('http');

http.createServer(function (request, response) {
   response.writeHead(
      200, { 'Content-Type': 'text/plain' }
   );
   response.end('Hola mundon');
}).listen(80);
Un ejemplo
       real
Fo
                     rk
                          m
                           eo
                              n
github.com/                       Gi
                                    tH
                                      ub

javiereguiluz/bilbostack
Enrutamiento
Ruta de la portada
$app->get('/', function () use ($app) {
   // ...
});
Ruta básica
$app->get('/agenda', function () use ($app) {
   // ...
});
Ruta con partes variables
$app->get('/speakers/{slug}', function ()
                              use ($app) {
   // ...
});
Ruta con partes variables
$app->get('/speakers/{slug}', function ()
                              use ($app) {
   // ...
});
Ruta con partes variables
$app->get('/speakers/{slug}', function ()
                              use ($app) {
   // ...
});

/speakers/pablo-garaizar
/speakers/carlos-sanchez
/speakers/esto-esta-mal
Otros métodos HTTP
$app->post('/registro', function () use ($app) {
   // ...
});
Otros métodos HTTP
$app->post('/registro', function () use ($app) {
   // ...
});

$app->put( );
$app->delete( );
Ruta para todos los métodos HTTP
$app->match('/registro', function () use ($app) {
   // ...
});
Ruta para algunos métodos HTTP
$app->match('/registro', function () use ($app) {
   // ...
})
->method('GET|POST');
Rutas con variables
$app->get('/speakers/{slug}', function ($slug) {
   // ...
});
Rutas con variables
$app->get('/speakers/{track}/{slug}',
         function ($track, $slug) use ($app) {
   // ...
});
Variables especiales
use SymfonyComponentHttpFoundationRequest;

$app->get('/speakers/{slug}',
         function (Request $request, $slug) {
   // ...
});
Variables especiales
use SymfonyComponentHttpFoundationRequest;

$app->get('/speakers/{slug}',
         function (Request $request, $slug) {
   // ...
});
Variables especiales
use SymfonyComponentHttpFoundationRequest;

$app->get('/speakers/{slug}',
         function (Request $request, $slug) {
   // ...
});

$request->server->get('HTTP_USER_AGENT')
$request->get('slug')
Modificando las variables de la ruta
$app->get('/schedule/{slug}',
         function ($slug) use ($app) {
   // ...
})->convert('slug', function ($slug) {
   return strtolower($slug);
});
Modificando las variables de la ruta
$app->get('/schedule/{slug}',
         function ($slug) use ($app) {
   // ...
})->convert('slug', function ($slug) {
   return str_replace('-', '_', $slug);
});
Restringiendo las variables de la ruta
$app->get('/schedule/{track}', function ($track)
{
  // ...
})->assert('track', 'd+');
Restringiendo las variables de la ruta
$app->get('/schedule/{track}', function ($track)
{
  // ...
})->assert('track', 'trackd+');
Restringiendo las variables de la ruta
$app->get('/schedule/{track}', function ($track)
{
  // ...
})->assert('track', '1|2');
Valores por defecto
$app->get('/schedule/{track}', function ($track)
{
  // ...
})->value('track', '1');
Valores por defecto
$app->get('/schedule/{track}', function ($track)
{
  // ...
})->value('track', '1');

/schedule
/schedule/1
Rutas con nombre
$app->get('/', function () use ($app) {
  // ...
})->bind('portada');
Controladores
Controlador básico
$app->get('/donde-comer', function ()
                             use ($app) {
   return $app['twig']->render('comer.twig');
})
->bind('comer');
Controlador típico
$app->get('/', function () use ($app) {
  $ponentes = $app['ponentes'];

  return $app['twig']->render('portada.twig',
         array('ponentes' => $ponentes)
  );
})->bind('portada');
Controlador típico
$app->get('/', function () use ($app) {
  $ponentes = $app['ponentes'];

  return $app['twig']->render('portada.twig',
         array('ponentes' => $ponentes)
  );
})->bind('portada');
Gestión de errores
$app->get('/speakers/{slug}',
      function ($slug) use ($app) {
  if (...) {
      $app->abort(404, "No existe el ponente.");
  }

  // ...

  return $app['twig']->render('ponente.twig',...);
})->bind('ponente');
Gestión de errores
$app->get('/speakers/{slug}',
      function ($slug) use ($app) {
  if (...) {
      $app->abort(404, "No existe el ponente.");
  }

  // ...

  return $app['twig']->render('ponente.twig',...);
})->bind('ponente');
Controlador especial para errores
$app->error(function (Exception $e, $code)
            use ($app) {

  // ...

});
Controlador especial para errores
$app->error(function (Exception $e, $code)
            use ($app) {

  // ...

});
Esqueleto de una aplicación Silex
$app->get('/', ...)->bind('portada');

$app->get('/agenda', ...)->bind('agenda');

$app->get('/speakers/{slug}', ...)
->bind('ponente');

$app->get('/schedule/{slug}', ...)
->bind('ponencia');
1 aplicación = 1 archivo
$app->get('/', ...)->bind('portada');

$app->get('/agenda', ...)-
>bind('agenda');

$app->get('/speakers/{slug}', ...)
->bind('ponente');

$app->get('/schedule/{slug}', ...)
->bind('ponencia');




                 controllers.php
1 aplicación = 1 archivo

                                        EL ORDEN
$app->get('/', ...)->bind('portada');

$app->get('/agenda', ...)-
>bind('agenda');                         IMPORTA
$app->get('/speakers/{slug}', ...)
->bind('ponente');

$app->get('/schedule/{slug}', ...)
->bind('ponencia');




                 controllers.php
Middlewares
     (filtros)
Petición HTTP           Objeto Request



                    Silex



                            Tu aplicación




Página HTML         Silex
                            Objeto Response
Petición HTTP           Objeto Request

                                     !
                    Silex



                            Tu aplicación

         !                            !

Página HTML         Silex
                            Objeto Response
Filtro before
$app->before(function (Request $request) {
   // ...
});
Secuencia de ejecución
• Buscar la ruta que pide el usuario.
• Comprobar la seguridad.
• Ejecutar filtro before()
• Ejecutar controlador de la ruta
Ejemplo de filtro before
$app->before(function (Request $request) {
   if (...) {
       return new RedirectResponse('/login');
   }
});
Filtro after
$app->after(function (Request $request,
                      Response $response) {
   // ...
});
Secuencia de ejecución
• Buscar la ruta que pide el usuario.
• Comprobar la seguridad.
• Ejecutar filtro before( )
• Ejecutar controlador de la ruta.
• Ejecutar filtro after( )
• Enviar respuesta al usuario.
Ejemplo de filtro after
$app->after(function (Request $request) {
   log('...');
});
Ejemplo de filtro after
$app->after(function (Request $request) {
   log('...');
});

                 ¿Dónde está mi
                   respuesta?
Filtro finish
$app->finish(function (Request $request,
                       Response $response) {
   // ...
});
Cada ruta con su filtro
$app->get('/', ...)->bind('portada')->before(...);

$app->get('/agenda', ...)->bind('agenda')
->before(...)->after(...);

$app->get('/speakers/{slug}', ...)
->bind('ponente')->before(...);

$app->get('/schedule/{slug}', ...)
->bind('ponencia')->before(...);
Proveedores de
      servicios
Bases de datos


           Formularios

Núcleo     Plantillas

de Silex   Caché HTTP


           Envío de emails

             proveedores
Bases de datos


                        Formularios

Núcleo     Plantillas

de Silex                Caché HTTP


                        Envío de emails

                          proveedores
Bases de datos


           Formularios

Núcleo                   Plantillas

de Silex                 Caché HTTP


                      Envío de emails

                            proveedores
Bases de datos


           Formularios

Núcleo     Plantillas

de Silex   Caché HTTP


           Envío de emails
Bases de datos   Serializador   Seguridad


Formularios      Logger         Sesiones


Validación       Emails         Plantillas


Caché HTTP       URL
Usar formularios de Symfony2
use SilexProviderFormServiceProvider;

// ...

$app->register(new FormServiceProvider());
Acceder a BBDD con Doctrine2
use SilexProviderDoctrineServiceProvider;

// ...

$app->register(new DoctrineServiceProvider());
Utilizar las plantillas de Twig
use SilexProviderTwigServiceProvider;

// ...

$app->register(new TwigServiceProvider(), array(
  'twig.path' => array(__DIR__.'/../templates'),
  'twig.options' => array('...'),
));
DEMO
github.com/javiereguiluz/bilbostack




                                                ub
                                          G itH
                                   e on
                                k m
                            F or
Instalación
Descargar archivo comprimido

   silex.sensiolabs.org
Descargar archivo comprimido
Descargar archivo comprimido
Descargar archivo comprimido
Instalación via composer.json
{
  "require": {
     "silex/silex": "1.0.*"
  },
  "minimum-stability": "dev"
}
Instalación via composer.json
{
  "require": {
     "fabpot/silex-skeleton": "*"
  },
  "minimum-stability": "dev"
}
Instalación recomendada
$ composer
  create-project
  fabpot/silex-skeleton
  --stability=dev
web/        src/      src/
index.php   app.php   controllers.php
web/        src/      src/
index.php   app.php   controllers.php




No tocar
web/        src/        src/
index.php   app.php     controllers.php




No tocar     Activas
            servicios
web/        src/        src/
index.php   app.php     controllers.php




No tocar     Activas       $app
            servicios   ->get('/', ...});
Buenas
prácticas
Organizando
los controladores
$app->get('/', ...);

                         // ...


                                  controllers.php

$app->get('/', ...);     $app->get('/', ...);



              blog.php              backend.php
Importando controladores
$app->mount('/blog', include 'blog.php');
$app->mount('/admin', include 'backend.php');
Importando controladores
$app->mount('/blog', include 'blog.php');
$app->mount('/admin', include 'backend.php');
Importando controladores
$app->mount('/blog', include 'blog.php');
$app->mount('/admin', include 'backend.php');


PORTADA: /
PORTADA DE BLOG: /blog/
PORTADA DE BACKEND: /admin/
1 aplicación = 1 archivo
$app->get('/', ...)->bind('portada');

$app->get('/agenda', ...)-
>bind('agenda');

$app->get('/speakers/{slug}', ...)
->bind('ponente');

$app->get('/schedule/{slug}', ...)
->bind('ponencia');




                 controllers.php
1 aplicación pequeña = 1 archivo
$app->get('/', ...)->bind('portada');

$app->get('/agenda', ...)-
>bind('agenda');

$app->get('/speakers/{slug}', ...)
->bind('ponente');

$app->get('/schedule/{slug}', ...)
->bind('ponencia');




                 controllers.php
1 aplicación mediana = N archivos
$app->get('/', ...)->bind('portada');   $app->get('/', ...);

$app->get('/agenda', ...)-              $app->get('/ver', ...);
>bind('agenda');
                                        $app->get('/listar', ...);
$app->get('/speakers/{slug}', ...)
->bind('ponente');
                                                                     blog.php
$app->get('/schedule/{slug}', ...)
->bind('ponencia');



                                        $app->get('/', ...);




                 controllers.php                               backend.php
Escalando una
aplicación Silex
Controladores como clases
namespace IgorwShopController;

use SilexApplication;
use SymfonyComponentHttpFoundationRequest;

class ShopController
{
   public function indexAction(Request $request, Application $app)
   {
     ...
   }
}
Controladores como clases
$app->get('/', controller('shop/index'));
$app->match('/login', controller('shop/login'));
$app->get('/product', controller('shop/
product'));
http://igor.io/2012/11/09/scaling-silex.html
Puntos
débiles
i18n   Depuración

ORM    Documentación

ESI
i18n (internacionalización)
• Fácil traducir contenidos
  {{ "Hola Mundo"|trans }}
• No es cómodo traducir rutas y
  contenidos de la base de datos.
ORM
• No hay soporte oficial del ORM
 completo (Doctrine2).
• No hay ORM alternativos ligeros.
• Si tu aplicación necesita un ORM,
 puede ser demasiado grande para
 Silex.
Depuración
// activar el modo debug
$app['debug'] = true;

// activar el log
use SilexProviderMonologServiceProvider;

$app->register(new MonologServiceProvider(),
array(
    'monolog.logfile' => __DIR__.'/../logs/dev.log',
));
Mensajes de error
ESI
• Silex incluye soporte de ESI.
• Su uso es bastante incómodo
  (comparado con Symfony2).
Documentación
• Todas las características de Silex
  están documentadas.
• No es tan abundante como la de
  Symfony2.
Documentación
• Oficial
  silex.sensiolabs.org/documentation
• Traducción
  librosweb.es/silex
Conclusiones
Conclusiones
• Silex es un microframework, pero no es
  un juguete.
Conclusiones
• Silex es un microframework, pero no es
  un juguete.
• Silex sirve para cualquier aplicación
  web que no sea enorme.
Conclusiones
• Silex es un microframework, pero no es
  un juguete.
• Silex sirve para cualquier aplicación
  web que no sea enorme.
• Silex reduce a “horas” el tiempo de
  desarrollo de aplicaciones enteras.
Conclusiones
• Silex es un microframework, pero no es
  un juguete.
• Silex sirve para cualquier aplicación
  web que no sea enorme.
• Silex reduce a “horas” el tiempo de
  desarrollo de aplicaciones enteras.
• Silex combina la agilidad de PHP con la
  profesionalidad de Symfony.
GRACIAS.
Contacto
         • javier.eguiluz@gmail.com
         • twitter.com/javiereguiluz
         • github.com/javiereguiluz
         • linkedin.com/in/javiereguiluz



domingo, 27 de enero de 13

Más contenido relacionado

La actualidad más candente

Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...betabeers
 
WordCamp Cantabria - Código mantenible con WordPress
WordCamp Cantabria  - Código mantenible con WordPressWordCamp Cantabria  - Código mantenible con WordPress
WordCamp Cantabria - Código mantenible con WordPressAsier Marqués
 
Slides components en
Slides components enSlides components en
Slides components enJavier López
 
Wp config.php
Wp config.phpWp config.php
Wp config.phpgregozz
 
Curso Drupal. Creacion de modulos en Drupal
Curso Drupal. Creacion de modulos en DrupalCurso Drupal. Creacion de modulos en Drupal
Curso Drupal. Creacion de modulos en DrupalMediaglobe Innova
 
PHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básicoPHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básicoSpacetoshare
 
Api De Google Calendar
Api De Google CalendarApi De Google Calendar
Api De Google Calendarjvelizster
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Raul Fraile
 
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Ignacio Martín
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysqlI LG
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2Raul Fraile
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularFreelancer
 
Php excel
Php excelPhp excel
Php excelpcuseth
 
Programa que almacena en una base de datos las características de un carro co...
Programa que almacena en una base de datos las características de un carro co...Programa que almacena en una base de datos las características de un carro co...
Programa que almacena en una base de datos las características de un carro co...jbersosa
 

La actualidad más candente (20)

Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
 
WordCamp Cantabria - Código mantenible con WordPress
WordCamp Cantabria  - Código mantenible con WordPressWordCamp Cantabria  - Código mantenible con WordPress
WordCamp Cantabria - Código mantenible con WordPress
 
RabbitMQ y Symfony
RabbitMQ y SymfonyRabbitMQ y Symfony
RabbitMQ y Symfony
 
Slides components en
Slides components enSlides components en
Slides components en
 
Doctrine2 sf2Vigo
Doctrine2 sf2VigoDoctrine2 sf2Vigo
Doctrine2 sf2Vigo
 
Wp config.php
Wp config.phpWp config.php
Wp config.php
 
Curso Drupal. Creacion de modulos en Drupal
Curso Drupal. Creacion de modulos en DrupalCurso Drupal. Creacion de modulos en Drupal
Curso Drupal. Creacion de modulos en Drupal
 
PHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básicoPHP Tema 2 - Lenguaje PHP básico
PHP Tema 2 - Lenguaje PHP básico
 
Api De Google Calendar
Api De Google CalendarApi De Google Calendar
Api De Google Calendar
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain
 
Introducción a Flask
Introducción a FlaskIntroducción a Flask
Introducción a Flask
 
Introducción a DJango
Introducción a DJangoIntroducción a DJango
Introducción a DJango
 
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
 
Php
PhpPhp
Php
 
Introducción a los hooks
Introducción a los hooksIntroducción a los hooks
Introducción a los hooks
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
 
Php excel
Php excelPhp excel
Php excel
 
Programa que almacena en una base de datos las características de un carro co...
Programa que almacena en una base de datos las características de un carro co...Programa que almacena en una base de datos las características de un carro co...
Programa que almacena en una base de datos las características de un carro co...
 

Destacado

Silex para aplicaciones web MVC
Silex para aplicaciones web MVCSilex para aplicaciones web MVC
Silex para aplicaciones web MVCAsier Marqués
 
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHPIntroducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHPDaniel Primo
 
Create - Decoupled CMS interface
Create - Decoupled CMS interfaceCreate - Decoupled CMS interface
Create - Decoupled CMS interfaceHenri Bergius
 
Parque De Agua Web - Propuesta
Parque De Agua Web - PropuestaParque De Agua Web - Propuesta
Parque De Agua Web - Propuestaelrofes
 
Propuesta diseño web
Propuesta diseño webPropuesta diseño web
Propuesta diseño webdarwpinorozco
 
Presentación Framework CodeIgniter
Presentación Framework CodeIgniter Presentación Framework CodeIgniter
Presentación Framework CodeIgniter ADWE Team
 
DESARROLLO RAPIDO DE APLICACIONES WEB
DESARROLLO RAPIDO DE APLICACIONES WEBDESARROLLO RAPIDO DE APLICACIONES WEB
DESARROLLO RAPIDO DE APLICACIONES WEBJavier Condori Flores
 
Iniciación PHP 5. Programación Web
Iniciación PHP 5. Programación WebIniciación PHP 5. Programación Web
Iniciación PHP 5. Programación WebRightster
 
Iniciación PHP 5. Introducción
Iniciación PHP 5. IntroducciónIniciación PHP 5. Introducción
Iniciación PHP 5. IntroducciónRightster
 
Iniciación PHP 5. Programación Orientada a Objetos
Iniciación PHP 5. Programación Orientada a ObjetosIniciación PHP 5. Programación Orientada a Objetos
Iniciación PHP 5. Programación Orientada a ObjetosRightster
 
Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Javier Eguiluz
 
Iniciación PHP 5. Ejercicios
Iniciación PHP 5. EjerciciosIniciación PHP 5. Ejercicios
Iniciación PHP 5. EjerciciosRightster
 

Destacado (20)

Silex para aplicaciones web MVC
Silex para aplicaciones web MVCSilex para aplicaciones web MVC
Silex para aplicaciones web MVC
 
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHPIntroducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
 
Introducción a Silex
Introducción a SilexIntroducción a Silex
Introducción a Silex
 
Create - Decoupled CMS interface
Create - Decoupled CMS interfaceCreate - Decoupled CMS interface
Create - Decoupled CMS interface
 
Parque De Agua Web - Propuesta
Parque De Agua Web - PropuestaParque De Agua Web - Propuesta
Parque De Agua Web - Propuesta
 
Propuesta diseño web
Propuesta diseño webPropuesta diseño web
Propuesta diseño web
 
Propuesta web
Propuesta webPropuesta web
Propuesta web
 
Propuesta web 2.0 greatest (f)
Propuesta web 2.0 greatest (f)Propuesta web 2.0 greatest (f)
Propuesta web 2.0 greatest (f)
 
MVC
MVCMVC
MVC
 
Febrero 2009 - Presentación PFC AGritos!
Febrero 2009 - Presentación PFC AGritos!Febrero 2009 - Presentación PFC AGritos!
Febrero 2009 - Presentación PFC AGritos!
 
Presentación Framework CodeIgniter
Presentación Framework CodeIgniter Presentación Framework CodeIgniter
Presentación Framework CodeIgniter
 
DESARROLLO RAPIDO DE APLICACIONES WEB
DESARROLLO RAPIDO DE APLICACIONES WEBDESARROLLO RAPIDO DE APLICACIONES WEB
DESARROLLO RAPIDO DE APLICACIONES WEB
 
Iniciación PHP 5. Programación Web
Iniciación PHP 5. Programación WebIniciación PHP 5. Programación Web
Iniciación PHP 5. Programación Web
 
MODELO VISTA CONTROLADOR EN PHP
MODELO VISTA CONTROLADOR EN PHPMODELO VISTA CONTROLADOR EN PHP
MODELO VISTA CONTROLADOR EN PHP
 
Curso php y_my_sql
Curso php y_my_sqlCurso php y_my_sql
Curso php y_my_sql
 
Iniciación PHP 5. Introducción
Iniciación PHP 5. IntroducciónIniciación PHP 5. Introducción
Iniciación PHP 5. Introducción
 
Iniciación PHP 5. Programación Orientada a Objetos
Iniciación PHP 5. Programación Orientada a ObjetosIniciación PHP 5. Programación Orientada a Objetos
Iniciación PHP 5. Programación Orientada a Objetos
 
Propuesta Portal Web
Propuesta Portal WebPropuesta Portal Web
Propuesta Portal Web
 
Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)
 
Iniciación PHP 5. Ejercicios
Iniciación PHP 5. EjerciciosIniciación PHP 5. Ejercicios
Iniciación PHP 5. Ejercicios
 

Similar a Silex, desarrollo web ágil y profesional con PHP

Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryJavier P.
 
Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaAgencia INNN
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryJavier P.
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryJavier P.
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la DebianLeonardo Cezar
 
Symfony: Domesticando las Vistas - decharlas
Symfony: Domesticando las Vistas - decharlasSymfony: Domesticando las Vistas - decharlas
Symfony: Domesticando las Vistas - decharlasDecharlas
 
Symfony: Domesticando las Vistas
Symfony: Domesticando las VistasSymfony: Domesticando las Vistas
Symfony: Domesticando las VistasJose Antonio Pio
 
Introducción a phone gap
Introducción a phone gapIntroducción a phone gap
Introducción a phone gapRodrigo Corral
 
Gulp js php sevilla 28 septiembre 2016
Gulp js   php sevilla 28 septiembre 2016Gulp js   php sevilla 28 septiembre 2016
Gulp js php sevilla 28 septiembre 2016Agencia INNN
 
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterAdolfo Sanz De Diego
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework SymfonyAlejandro Hernández
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryDavid Arango
 

Similar a Silex, desarrollo web ágil y profesional con PHP (20)

Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevilla
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQuery
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
PostgreSQL À la Debian
PostgreSQL À la DebianPostgreSQL À la Debian
PostgreSQL À la Debian
 
Symfony: Domesticando las Vistas - decharlas
Symfony: Domesticando las Vistas - decharlasSymfony: Domesticando las Vistas - decharlas
Symfony: Domesticando las Vistas - decharlas
 
Symfony: Domesticando las Vistas
Symfony: Domesticando las VistasSymfony: Domesticando las Vistas
Symfony: Domesticando las Vistas
 
Laravel 5.1
Laravel 5.1Laravel 5.1
Laravel 5.1
 
(Muy breve) Introduccion a jQuery
(Muy breve) Introduccion a jQuery(Muy breve) Introduccion a jQuery
(Muy breve) Introduccion a jQuery
 
JAVASCRIPT.pptx
JAVASCRIPT.pptxJAVASCRIPT.pptx
JAVASCRIPT.pptx
 
Introducción a phone gap
Introducción a phone gapIntroducción a phone gap
Introducción a phone gap
 
9.laravel
9.laravel9.laravel
9.laravel
 
Gulp js php sevilla 28 septiembre 2016
Gulp js   php sevilla 28 septiembre 2016Gulp js   php sevilla 28 septiembre 2016
Gulp js php sevilla 28 septiembre 2016
 
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipster
 
Symfony 2 CMF
Symfony 2 CMFSymfony 2 CMF
Symfony 2 CMF
 
Creación de plugins con Grails
Creación de plugins con GrailsCreación de plugins con Grails
Creación de plugins con Grails
 
Curso AngularJS - 7. temas avanzados
Curso AngularJS - 7. temas avanzadosCurso AngularJS - 7. temas avanzados
Curso AngularJS - 7. temas avanzados
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework Symfony
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQuery
 

Más de Javier Eguiluz

deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de SymfonydeSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de SymfonyJavier Eguiluz
 
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)Javier Eguiluz
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Javier Eguiluz
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricksJavier Eguiluz
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Javier Eguiluz
 
Twig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasTwig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasJavier Eguiluz
 
Desymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseñoDesymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseñoJavier Eguiluz
 
Curso Symfony - Anexos
Curso Symfony - AnexosCurso Symfony - Anexos
Curso Symfony - AnexosJavier Eguiluz
 
Curso Symfony - Clase 5
Curso Symfony - Clase 5Curso Symfony - Clase 5
Curso Symfony - Clase 5Javier Eguiluz
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4Javier Eguiluz
 
Curso Symfony - Clase 3
Curso Symfony - Clase 3Curso Symfony - Clase 3
Curso Symfony - Clase 3Javier Eguiluz
 
Curso Symfony - Clase 2
Curso Symfony - Clase 2Curso Symfony - Clase 2
Curso Symfony - Clase 2Javier Eguiluz
 
Curso Symfony - Clase 1
Curso Symfony - Clase 1Curso Symfony - Clase 1
Curso Symfony - Clase 1Javier Eguiluz
 

Más de Javier Eguiluz (17)

deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de SymfonydeSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
 
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8
 
Silex al límite
Silex al límiteSilex al límite
Silex al límite
 
Twig tips and tricks
Twig tips and tricksTwig tips and tricks
Twig tips and tricks
 
Twig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasTwig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadas
 
Wallpaper Notifier
Wallpaper NotifierWallpaper Notifier
Wallpaper Notifier
 
Desymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseñoDesymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseño
 
Desymfony 2011 - Twig
Desymfony 2011 - TwigDesymfony 2011 - Twig
Desymfony 2011 - Twig
 
Curso Symfony - Anexos
Curso Symfony - AnexosCurso Symfony - Anexos
Curso Symfony - Anexos
 
Curso Symfony - Clase 5
Curso Symfony - Clase 5Curso Symfony - Clase 5
Curso Symfony - Clase 5
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4
 
Curso Symfony - Clase 3
Curso Symfony - Clase 3Curso Symfony - Clase 3
Curso Symfony - Clase 3
 
Curso Symfony - Clase 2
Curso Symfony - Clase 2Curso Symfony - Clase 2
Curso Symfony - Clase 2
 
Curso Symfony - Clase 1
Curso Symfony - Clase 1Curso Symfony - Clase 1
Curso Symfony - Clase 1
 

Último

EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...axelv9257
 
microsoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamtemicrosoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamte2024020140
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxgustavovasquezv56
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptxdulcemonterroza
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORASMarc Liust
 
herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaJadeVilcscordova
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfYanitza28
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8antoniopalmieriluna
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendidaLuis Francisco Reyes Aceves
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionEmanuelMuoz11
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfaxelv9257
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfYanitza28
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfJosAndrRosarioVzquez
 
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptxTarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptxVICTORMANUELBEASAGUI
 

Último (16)

EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
microsoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamtemicrosoft word manuales para todos tipos de estudiamte
microsoft word manuales para todos tipos de estudiamte
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORAS
 
herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el tema
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdf
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacion
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdf
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
 
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptxTarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
Tarea_sesion_15_Reportes Maestro - Detalle con el uso de AJAX.pptx
 

Silex, desarrollo web ágil y profesional con PHP