Mejorar el rendimiento de nuestro sitio web

Contexto

Tenemos datos que publicar

hay más de 1.000 usuarios

Identificar el Problema

Soluciones

Hip·Hop

HHVM

Máquina Virtual HipHop HHVM es una máquina virtual de código abierto basada en la compilación just-in-time (JIT) que sirve como motor de ejecución para el lenguaje de programación Hack.

Mediante el uso del principio de compilación JIT, el código Hack se transforma primero en código intermedio de HipHop (HHBC), que luego se traduce dinámicamente a código de máquina x86-64.

Hack (programming language)

Es un lenguaje de programación para la maquina virtual HipHop, y es un dialecto de PHP.

¡ Pero no se como es la infraestructura de Facebook !

HHVM en Wikipedia

2014-10-08 HHVM es lo mejor desde el pan de molde

Wikipedia_Signpost

Wikipedia

Apache backend request rate, by traffic cluster

Principio de Pareto

«el 80% del esfuerzo de desarrollo (en tiempo y recursos) produce el 20% del código, mientras que el 80% restante es producido con tan solo un 20% del esfuerzo».

"debemos de olvidar las pequeñas eficiencias, digamos alrededor del 97% del tiempo"

«En el artículo de Donald Knuth "Structured Programming With GoTo Statements" escribió: "Los programadores pierden enormes cantidades de tiempo pensando o preocupándose por la velocidad de las partes no críticas de sus programas, y estos intentos de eficiencia realmente tienen un fuerte impacto negativo cuando a la depuración y el mantenimiento; debemos de olvidar las pequeñas eficiencias, digamos alrededor del 97% del tiempo: la optimización prematura es la raíz de todo mal. Sin embargo, no debemos dejar pasar nuestras oportunidades en ese crítico 3%".»

Representational State Transfer

Restful Representational state transfer (REST) es la arquitectura de software que utiliza una interfaz uniforme entre componentes físicamente separados, a menudo a través de Internet sobre una arquitectura Cliente-Servidor

Introducción

Algoritmo Divide y vencerás

En las CC, el término divide y vencerás hace referencia a uno de los más importantes paradigmas de diseño algorítmico.

La idea central es de manera recursiva un problema dividirlo en dos o más subproblemas de igual tipo o similar. Hasta que se llega a un resultado simple.

Al final, las soluciones a cada uno de los subproblemas se combinan para dar una solución al problema original.

En política y psicología, divide y vencerás o dividir para reinar (del griego: διαίρει καὶ βασίλευε, diaírei kaì basíleue) es ganar y mantener el poder mediante la ruptura en piezas de las concentraciones más grandes, que tienen individualmente menos energía. El concepto se refiere a una estrategia que rompe las estructuras de poder existentes y evita la vinculación de los grupos de poder más pequeños. Podría ser utilizada en todos los ámbitos en los que, para obtener un resultado favorable, es en primer lugar necesario o ventajoso romper o dividir lo que se opone a la solución o a un determinado problema inicial.

Heurística en Software Libre I

El problema no solo es mio, entonces ya debe haber alguien con una solución

Heurística en Software Libre II

C++ vs Python vs JavaScript vs Java

Comparación

C++

Python

Java

JavaScript

fannkuch-redux

×

source

secs

mem

cpu

1.0

Rust #4

7.21

10,932

28.34

1.0

C gcc #5

7.53

11,224

29.37

1.1

Rust #5

7.77

10,932

30.49

1.1

C++ g++ #5

7.99

10,936

31.23

1.1

Chapel #2

8.09

10,932

32.18

1.1

Ada 2012 GNAT #3

8.23

10,936

32.72

1.1

Go #3

8.25

10,936

32.92

1.2

F# .NET #6

8.33

106,496

32.25

1.2

OCaml #3

8.76

11,132

34.99

1.2

OCaml #4

8.77

11,128

35.06

1.3

C# .NET #6

9.16

30,572

36.34

×

source

secs

mem

cpu

1.3

C++ g++ #2

9.51

10,912

37.33

1.4

F# .NET #5

9.75

111,368

38.19

1.4

C++ g++ #4

9.82

10,912

38.52

1.4

Lisp SBCL #4

9.96

29,748

39.01

1.4

Classic Fortran #3

10.26

11,160

40.95

1.4

C++ g++

10.39

10,912

40.77

1.5

Free Pascal

10.54

11,220

42.09

1.5

Java

10.71

40,324

42.25

1.5

Node js #5

11.08

81,124

43.87

1.6

Go

11.83

11,128

47.26

40

Python 3 #4

285.20

14,264

18 min

C++

logo

extensiones

.h .hh .hpp .hxx .h++ .cc .cpp .cxx .c++

Paradigmas

procedural, imperativo, funcional, orientado a objeto, genérico, modular.

Apareció por primera vez

1985 ( hace 38 años )

Diseñado por

Bjarne Stroustrup, Bell Labs

Stable release

C++20 (ISO/IEC 14882:2020)

Release date

15 de diciembre del 2020; hace 2 años

Preview release

C++23

Disciplina de tipos

Estático, fuerte, nominativo, parcialmente inferido

C++

Implementaciones

GCC, LLVM Clang, Microsoft Visual C++, Intel C++ Compiler, IBM XL C++, EDG

Influenciado por

Ada, ALGOL 68, BCPL, C, CLU, ML, Mesa, Modula-2,[1] Simula, Smalltalk

Influyo

Ada 95, C#, C99, Chapel, Clojure, D, Java, JS++, Lua, Nim, Objective-C++, Perl, PHP, Python, Rust, Seed7, Carbon

Sistemas Operativos

Multi plataforma

NGREST

ngrest es un framework REST en C++. Es pequeño, rápido y muy fácil de usar.

#include <ngrest/common/Service.h>

class myproject: public ngrest::Service
{
public:
  std::string echo(const std::string& text);
};
#include "myproject.h"

std::string myproject::echo(const std::string& text)
{
    return "Hi, " + text;
}
   // *method: POST
   // *location: echo
   std::string echoPost(const std::string& text);

   //! a simple operation "echo"
   /*!
     example of GET request:
     http://server:port/ngrest/examples/Echo?text=Hello%20World!
   */
   // *method: GET
   // *location: echo?text={text}
   std::string echoGet(const std::string& text);
};

}}

Ngrest-db

Es un ORM pequeño y fácil de usar, para trabajar junto con ngrest.

Ventajas:

DBMS soportados:

#include <ngrest/common/Nullable.h>

// *table: users
struct User
{
   // *pk: true
   // *autoincrement: true
   int id;

   std::string name;

   // *unique: true
   // *type: varchar(64)
   std::string email;

   // *type: timestamp
   // *default: CURRENT_TIMESTAMP
   // *ignoreOnInsert: true
   std::string registered;
};

Fin

¡¡¡ Gracias !!!

Fravia+

Francesco Vianello (30 de agosto de 1952 - 3 de mayo de 2009), más conocido por su apodo Fravia+, fue un ingeniero inverso de software y «seeker» conocido por su archivo web de las técnicas y trabajos sobre ingeniería inversa.

Edward Snowden

Edward Joseph Snowden (Elizabeth City, 21 de junio de 1983) es un consultor tecnológico estadounidense, informante, antiguo empleado de la CIA (Agencia Central de Inteligencia) y de la NSA (Agencia de Seguridad Nacional).

En junio del 2013, Snowden hizo públicos, a través de los periódicos The Guardian y The Washington Post, documentos clasificados como alto secreto sobre varios programas de la NSA, incluyendo los programas de vigilancia masiva PRISM y XKeyscore

Aaron Swartz

Aaron Hillel Swartz (8 de noviembre de 1986, Chicago - 11 de enero de 2013, Nueva York) fue un programador, emprendedor, escritor, activista político y hacktivista de Internet. Estuvo involucrado en el desarrollo del formato de fuente web RSS, y el formato de publicación Markdown, la organización Creative Commons, la infraestructura del sitio web "web.py" y el sitio web de marcadores sociales Reddit, del cual se convirtió en socio luego de que éste se fusionara con su compañía, Infogami. Recibió atención de los medios después de la recolección de artículos de revistas académicas JSTOR.

Fue diseñador jefe del proyecto inicial de Open Library.

Alexandra Elbakyan

Alexandra Asanovna Elbakyan (1988) es una desarrolladora de software y neurocientífica de Kazajistán, más conocida por ser la fundadora del proyecto Sci-Hub en 2011 una web de acceso libre a más de 40 millones de artículos científicos recientes.

Donald Knuth

Donald Ervin Knuth (Milwaukee, Wisconsin; 10 de enero 1938) es un reconocido experto en ciencias de la computación estadounidense y matemático, famoso por su fructífera investigación dentro del análisis de algoritmos y compiladores.

Pablo Azero

30 años en docencia universitaria de pregrado y posgrado en informática e ingeniería de software y 20 años en la industria del software.

"Improving type-error messages in functional languages" Bastiaan Heeren, Johan Jeuring, Doaitse Swierstra, Pablo Azero Alcocer

¡¡¡ Gracias !!!