MemcacheDB es un sistema de almacenamiento clave-valor distribuido diseñado para persistencia. No se trata de una solución de caché, pero si sigue el control memcache (no completamente), por lo que cualquier cliente de memcached puede conectar con él. Utiliza como sistema base de almacenamiento Berkeley DB (una de las más rápidas), por lo que muchas de sus características incluye transacciones y replicación.
Tiene un alto rendimiento de lectura/escritura para objetos basados en claves-valor. Entre los comandos de memcache soporta get, set, add, replace, append, prepend, incr, decr, delete y stats. MemcacheDB
Interesante API de Google para simular un teclado mediante Javascript, sobre todo es útil para evitar keyloggers y la captura de contraseñas. Introducing the Virtual Keyboard API
Mμ Connect es una librería Javascript muy ligera que permite utilizar Facebook Connect desde tu web y pudiendo usar tus frameworks favoritos: Dojo, jQuery, MooTools, Prototype o YUI.
Entre otras acciones nos permite loguearnos, desloguearnos, leer y escribir y añadir amigos.
Llevaban mucho tiempo hablando de ello, y al fin está disponible para desarrolladores. La nueva plataforma cruzada (‘cross-pattform’) permite aprovechar las herramientas de desarrollo web para construir aplicaciones que se ejecuten en nuestro escritorio.
Tener un grid con todas las filas al mismo tamaño puede ser algo difícil de conseguir. El problema viene con que CSS grid toma el tamaño de las filas según el tamaño máximo de sus celdas.
Para conseguir ello es necesario que el contenido de la celda tenga posicionamiento absoluto, y jugar con ::before para simular contenido vacío que rellene la celda:
Como se puede ver, existen dos scripts dentro de npm: build que compila el js y extrae los CSS, y dev, que arranca el servidor de webpack habilitando HMR (🎶 ¡ya no puedo vivir sin él! 🎶).
Ambas configuraciones de webpack usan un script en común (webpack.config.common.js):
const webpack = require( 'webpack' );
const path = require( 'path' );
// Carga los ficheros .vueconst VueLoaderPlugin = require( 'vue-loader/lib/plugin' );
// Configura stylelintconst StyleLintPlugin = require( 'stylelint-webpack-plugin' );
// Para obtener un path para los aliasfunctionresolve( dir ) {
return path.join( __dirname, '.', dir );
}
module.exports = {
mode: 'production',
// Fichero inicial del proyecto
entry: './js/main.js',
// Fichero final para incluir
output: {
filename: 'js/main.js',
publicPath: '/dist/',
},
module: {
// Reglas para los ficheros
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
},
{
test: /\.vue$/,
loader: 'vue-loader',
},
{
test: /\.css$/,
use: [
'css-loader',
'sass-loader',
],
},
],
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new VueLoaderPlugin(),
new StyleLintPlugin( {
files: [ '**/*.{vue,htm,html,css,sss,less,scss,sass}' ],
} ),
],
resolve: {
extensions: [ '.js', '.vue', '.json' ],
alias: {
'@': resolve( '' ),
},
},
};
El frontend se gestiona desde el fichero main.js, que inicializará Vue y añadirá el componente principal:
import Vue from 'vue';
import Buefy from 'buefy';
import'buefy/dist/buefy.css';
import App from './components/App.vue';
import'@/assets/scss/main.scss';
Vue.use( Buefy );
new Vue( {
el: '#app',
components: {
App,
},
render: ( c ) => c( 'app' ),
} );
// accept replacement modulesif ( module.hot ) {
module.hot.accept();
}
Y ya por último el componente App.vue, que muestra simplemente un poco de HTML