Lightcloud es una base de datos basada en clave-valor muy rápida, desarrollada por la gente de Plurk, que llega casi al rendimiento de Memcachedb. Está basado en Tokyo Tyrant.
Puede almacenar millones de keys en pocos servidores
Escala horizontalmente
Los nodos se replican vía master-master, failover automático y balanceo de carga
Por ahora solo está para Python, pero el puerto puede ser desarrollado fácilmente en cualquier lenguaje
Tutorial para crear un menú redondo con iconos al rededor y tooltips (como pop-ups de información) para cada icono. Todo el menu está basado en XHTML y CSS, sin necesidad de utilizar Javascript.
Para aquellos que estais intentando dar el salto a Ubuntu… para aquellos que hace poco os cambiasteis y aún no conoceis muchas aplicaciones… y para todos en general, os mostramos lo que a nuestro entender es el Top Ten de las aplicaciones de Ubuntu.
Diseñar una base de datos no es algo sencillo y sà muy importante, ya que un mal diseño conlleva dificultades para desarrollar la aplicación o una aplicación compleja. Unos consejos que realmente son muy necesarios y muchas veces no se llevan a cabo.
Ignorar la normalización: la normalización es fundamental para un buen rendimiento y una sencilla programación.
Nomenclatura no estándar: los nombres deben significar algo para que sea sencillo de comprender a simple vista. A parte, la nomenclatura debe ser constante en todo el diseño.
Falta de documentación: esto es una constante en todo el mundo de la programación, y en las bases de datos no va a ser menos. Que tu sepas que significa una tabla o un campo, no quiere decir que otra persona que entre en el proyecto vaya a saberlo con la misma facilidad que tú.
Una tabla que agrupa a muchas: un error normal es pensar que un diseño con muchas tablas es más complejo, y que es mejor meterlo todo en una única tabla.
No usar las caracterÃsticas de SQL para proteger la integridad de los datos: hay que tener en cuenta las reglas de campos nulos, tamaños de los campos y claves secundarias en el diseño para obtener una mejor integridad de datos.
Falta de pruebas: algo para mà muy importante es hacer pruebas de estres, para saber si la base de datos va a aguantar el volumen de datos que necesitará la aplicación. Comprobar el tiempo de ejecución de las sentencias para añadir Ãndices, etc…
Hay un nuevo chico en el barrio, y se llama Panamá, un nuevo sistema de anuncios de Yahoo! basado en el que adquirió de Overture hace ya tres años. Yahoo! lo ha abierto a nuevos anunciantes; por lo pronto solo en Estados Unidos…
¿Quieres saber como maquetaremos nuestros sitios en unos años? ¿Te intriga conocer las nuevas caracterÃsticas que traerá la especificación de CSS 3? En CSS3.info encontrarás un weblog con noticias y artÃculos sobre las novedades, ejemplos de atrib
Cómo colocar una imagen de fondo de nuestra pelÃcula que se adapte al tamaño de la ventana del navegador, escalandose pero sin distorsionarse. Escribo este tip viendo una pregunta y buscando la respuesta, que aquà posteo para el disfrute de todos uste
Closures son bloques de código que pueden ser pasados a una función y que pueden manejar variables que están definidas en el mismo ámbito. Algo que puede ser bastante útil cuando queremos repetir un código que solo se ejecutará en un lugar determinado y no queremos definir una función a nivel de clase para poder usarla.
Un vistazo a un ejemplo nos podrá ayudar de mejor manera:
function replace_in_array ($search, $replacement, $array) {
$map = function ($text) use ($search, $replacement) {
if (strpos ($text, $search) > 50) {
return str_replace ($search, $replacement, $text);
} else {
return $text;
}
};
return array_map ($map, $array);
}
Como se puede ver se trata de definir una función con una serie de parámetros, indicar qué variables del mismo ámbito puede usar y una vez definida, realizar la llamada a la función.
wwiTV es un sitio que nos permite ver una infinidad de canales de TV de forma online y totalmente gratuita, sólo debemos disponer de un buen ancho de banda, aunque hay streaming disponible desde los 28.8Kb/s hasta los 2000Kb/s.
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