Entradas de Marzo del 2011

Ruta Moto – 20110331

Jueves 31 de Marzo del 2011

[xtrasgu.org]Aprovechando un buen día de sol, hoy he salido a dar una vuelta por la zona de La Manzaneda. Nada importante que comentar; cuesta abajo voy como el culo y subo algo mejor, aunque sigo yendo mejor en coche :-)


View Ruta Moto – 20110331 in a larger map

Twitter Semanal – 2011-03-27

Domingo 27 de Marzo del 2011
  • «Eres más inútil que el que diseñó el abre fácil de Chiquilín» #
  • Esperando en el fisio, a ver si me parte la espalda de una vez. #
  • Estrenando unos Sennheiser CX150: http://is.gd/UxefkT #
  • Seleccionando fotos de la despedida de @piedraluna78… de esta me retiro… #

Ruta Moto – 20110323-24

[xtrasgu.org]Esta semana amenazaban lluvia para el fin de semana (acertaron), por lo que aprovechando que los días han crecido lo suficiente como para que anochezca pasadas las 19:30, la opción de coger la moto para dar una vuelta por semana resultaba tan tentadora que al final salí en moto dos días.

Las rutas no fueron gran cosa, pero tras unas cuantas salidas con la señora a cuestas, lo de ir solo se agradece… o:-)

El martes decidí ir hasta El Escamplero, para luego bajar hasta Trubia, y volver a Oviedo por la carretera vieja, una subida con buena carretera y bastantes curvas, que debe de ser una ruta muy transitada por moteros, ya que la mayoría de los quitamiedos están adaptados para proteger de caídas. La ruta estuvo bien, pero salí de casa con 10º y en una hora el frío se nota un montón.

Ruta Moto – 20110323


View Ruta Moto – 20110323 in a larger map

El miércoles la idea era coger la carretera por la que vuelvo de trabajar, la vieja que va de Tudela Veguín a Oviedo pasando por el cementerio, ya que es una carretera que llevo haciendo año y medio en coche, es tranquila, y me la conozco al dedillo. Para llegar a Tudela Veguín, fui por la A-66 en dirección a Mieres hasta Olloniego, y aunque parezca mentira, una autopista en moto, en hora punta, y con la limitación a 110 km/h, acojona bastante…

Por lo demás, la subida de vuelta a casa me gustó bastante; entre que le empiezo a coger el punto a la moto, que iba sólo, y que de la carretera me conozco hasta los baches… coser y cantar. La sensación que me dio es que hacía menos frío que el día anterior, que también ayuda.

Ruta Moto – 20110324


View Ruta Moto – 20110324 in a larger map

Twitter Semanal – 2011-03-20

Domingo 20 de Marzo del 2011
  • La cornuda, a poner el siguiente: RT @BreakingNews Hillary Clinton arrives in Egypt to support transition from Mubarak's rule #
  • Revit Siren Lady roja pedida ayer en FC-Moto… ¡y no es para mi! http://is.gd/mIjcAW #
  • Por cierto, Revit Siren roja de http://is.gd/MDSRsV puesta en casa por 188€; las alternativas en tienda off-line se iban a 240€… ¡Así no! #
  • Confirmado tras acabar de leer «A twist of the wrist II», mucho mejor que el primer libro. #
  • Tras la buena experiencia con Chrome en el ordenador del trabajo, cambiando #Iceweasel por #Chrome en casa. #
  • A poner al nuevo, como en Egipto: RT @BreakingNews US Sec. of State Clinton arrives in Tunisia – Al Jazeera http://bit.ly/fYeI0i #

AndroidGameOfLife: El Juego de la Vida

Miércoles 16 de Marzo del 2011

[xtrasgu.org]Siguiendo con las aplicaciones programadas para Android, esta vez tengo el gusto de presentar una versión simplificada de El Juego de la Vida. La simplificación viene dada por las reglas que se aplican en la frontera del tablero, que no son las correctas.

A continuación, una captura de pantalla:

AndroidGameOfLife: El Juego de la Vida

El programa lo puedes descargar en AndroidGameOfLife, y el código fuente lo tienes aquí debajo:

/*
 * AndroidGameOfLife - Game of Life for Android. 
 * 
 * Copyright (c) 2011, Pablo López Cienfuegos <xtrasgu@gmail.com>
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *   
 */

package org.xtrasgu.gameoflife;

import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class AndroidGameOfLife extends Activity {
	ViewGameOfLife viewgameoflife;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// Set full screen view:
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);

		// Set screen always on:
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
				WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

		// Set full brightness:
		WindowManager.LayoutParams lp = getWindow().getAttributes();
		lp.screenBrightness = 1.0f;
		getWindow().setAttributes(lp);

		// Set portrait orientation:
		this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

		viewgameoflife = new ViewGameOfLife(this);
		setContentView(viewgameoflife);
	}

	private class ViewGameOfLife extends View {
		int HDIM = 160;
		int VDIM = 266;
		int SUM = 0;
		int MATRIXA[][] = new int[HDIM][VDIM];
		int MATRIXB[][] = new int[HDIM][VDIM];
		Paint paint = new Paint();

		public ViewGameOfLife(Context context) {
			super(context);
			generateGameOfLifeSeed();
		}

		public void generateGameOfLifeSeed() {
			for (int i = 0; i < HDIM; i++)
				for (int j = 0; j < VDIM; j++)
					MATRIXA[i][j] = (int) (Math.floor(Math.random() * 2.0));
			invalidate();
		}

		@Override
		public boolean onTouchEvent(MotionEvent event) {
			generateGameOfLifeSeed();
			return true;
		}

		@Override
		protected void onDraw(Canvas canvas) {

			// Set background:
			paint.setColor(Color.BLACK);
			paint.setStyle(Paint.Style.FILL);
			canvas.drawPaint(paint);

			// Game of Life:
			for (int i = 1; i < HDIM - 1; i++)
				for (int j = 1; j < VDIM - 1; j++) {
					SUM = MATRIXA[i - 1][j - 1] + MATRIXA[i - 1][j]
							+ MATRIXA[i - 1][j + 1] + MATRIXA[i][j - 1]
							+ MATRIXA[i][j + 1] + MATRIXA[i + 1][j - 1]
							+ MATRIXA[i + 1][j] + MATRIXA[i + 1][j + 1];
					if (SUM == 2)
						MATRIXB[i][j] = MATRIXA[i][j];
					else if (SUM == 3)
						MATRIXB[i][j] = 1;
					else
						MATRIXB[i][j] = 0;
				}

			for (int i = 0; i < HDIM; i++)
				for (int j = 0; j < VDIM; j++)
					MATRIXA[i][j] = MATRIXB[i][j];

			paint.setColor(Color.BLUE);
			for (int i = 0; i < HDIM; i += 2) {
				canvas.drawCircle(i * 2 + 1, 1, 1, paint);
				canvas.drawCircle(i * 2 - 1, VDIM * 2 - 1, 1, paint);
			}
			for (int j = 0; j < VDIM; j += 2) {
				canvas.drawCircle(1, j * 2 + 1, 1, paint);
				canvas.drawCircle(HDIM * 2 - 1, j * 2 + 3, 1, paint);
			}

			paint.setColor(Color.YELLOW);
			for (int i = 1; i < HDIM; i += 2) {
				canvas.drawCircle(i * 2 + 1, 1, 1, paint);
				canvas.drawCircle(i * 2 - 1, VDIM * 2 - 1, 1, paint);
			}
			for (int j = 1; j < VDIM; j += 2) {
				canvas.drawCircle(1, j * 2 + 1, 1, paint);
				canvas.drawCircle(HDIM * 2 - 1, j * 2 - 1, 1, paint);
			}

			paint.setColor(Color.GREEN);
			for (int i = 0; i < HDIM; i++)
				for (int j = 0; j < VDIM; j++)
					if (MATRIXA[i][j] == 1)
						canvas.drawCircle(i * 2 + 1, j * 2 + 1, 1, paint);
			invalidate();
		}
	}
}

Twitter Semanal – 2011-03-13

Domingo 13 de Marzo del 2011

Ruta Moto – 20110311

[xtrasgu.org]Nunca es tarde si la bicha es buena; salimos el Viernes pasado, pero hasta hoy no me ha dado por escribir nada. Tercera salida en moto en modo duo, esta vez incluyendo un kilómetro de autopista… ¡100km/h!

Cuando le dices en un semáforo que la vas a meter por la autopista se menea un poco y sujetar la moto para que no la tire cuesta, pero yo creo que de esta ya va, y la próxima vez podemos ir a algún sitio de verdad. De hecho, ya está mirando una Revit Siren Lady y todo.

La ruta, como estas últimas, no tiene nada:


Ver Ruta Moto – 20110311 en un mapa más grande

Twitter Semanal – 2011-03-06

Domingo 06 de Marzo del 2011
  • ¡Qué pesados los de @Fnac_ESP con su tarjeta de socio! Que si puntos acumulados, ticket con puntos, correos… ¡Vaya ganas de que caduque! #
  • Sorprendentemente, la página del Banco Popular lleva toda la mañana sin funcionar… mira que me extraña… #
  • WordPress actualizado a 3.1 sin problemas. #

Ruta Moto – 20110306

[xtrasgu.org]Segunda ruta con mi señora a bordo, a ver si va perdiendo el «respeto» a la moto. Paseo tranquilo por los alrededores de Oviedo, pasando por Colloto, Lugones y la Pista Finlandesa. ¡Hemos llegado a 80km/h!

La paciente de momento no presenta reacciones adversas, por lo que calculo que con otra ruta de broma cogiendo un poco de autopista, ya estará lista para empezar a salir en moto de verdad… y sino, también.


Ver Ruta Moto – 20110306 en un mapa más grande

AndroidGenerateSID: Generador Aleatorio de Nombres de Sistema SAP

Martes 01 de Marzo del 2011

[xtrasgu.org]Teniendo en cuenta el gran éxito de GenerateSID: Generador Aleatorio de Nombres de Sistema SAP, y el de su secuela GenerateSID: Generador Aleatorio de Nombres de Sistema SAP (v2.0), era evidente que la saga no podía terminar ahí.

Aprovechando el entorno de desarrollo que estuve configurando en Installing the Android SDK under Debian GNU/LiNUX 5.0 Lenny, he modificado el Generador Aleatorio de Nombres de Sistema SAP para que ahora funcione en Android.

El aspecto de la aplicación, como suele ser habitual, impecable:

AndroidGenerateSID: Generador Aleatorio de Nombres de Sistema SAP

Si te apetece probarlo, lo puedes descargar en AndroidGenerateSID.

Ya por último, y como de costumbre, el código fuente del programa:

/*
 * AndroidGenerateSID - Let Android choose an SAP SID for you. 
 * 
 * Copyright (c) 2010, Pablo López Cienfuegos 
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see .
 *   
 */

package org.xtrasgu.generatesid;

import java.util.Arrays;
import android.app.Activity;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;

public class AndroidGenerateSID extends Activity {
	ViewGenerateSID viewgeneratesid;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// Set full screen view:
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		requestWindowFeature(Window.FEATURE_NO_TITLE);

		// Set full brightness:
		WindowManager.LayoutParams lp = getWindow().getAttributes();
		lp.screenBrightness = 1.0f;
		getWindow().setAttributes(lp);

		viewgeneratesid = new ViewGenerateSID(this);
		setContentView(viewgeneratesid);
	}

	private class ViewGenerateSID extends View {

		public ViewGenerateSID(Context context) {
			super(context);
		}

		@Override
		public boolean onTouchEvent(MotionEvent event){
			invalidate();
			return true;
		}
		
		@Override
		protected void onDraw(Canvas canvas) {
			Paint paint = new Paint();
			
			// Set background:
			paint.setColor(Color.BLACK);
			paint.setStyle(Paint.Style.FILL);
			canvas.drawPaint(paint);
			
			// Set foreground: 
			paint.setColor(Color.WHITE);
			paint.setStyle(Paint.Style.FILL_AND_STROKE);
			paint.setAntiAlias(true);
			paint.setTextSize(120);
			paint.setTextAlign(Paint.Align.CENTER);
			canvas.drawText(generateSID(), canvas.getWidth()/2, canvas.getHeight()/2, paint);
		}
		
		public String generateSID() {
			int rnd;
			String sid;
			String alfa="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
			String alfanum=alfa+"0123456789";
			String[] existingSIDs={};	//Add your existing system landscape SIDs
			String[] exceptionSIDs={"ADD", "ALL", "AND", "ANY", "ASC", "AUX", "COM", "CON", "DBA",
					"END", "EPS", "FOR", "GID", "IBM", "INT", "KEY", "LOG", "LPT",
					"MON", "NIX", "NOT", "NUL", "OFF", "OMS", "PRN", "RAW", "ROW",
					"SAP", "SET", "SGA", "SHG", "SID", "SQL", "SYS", "TMP", "UID",
					"USR", "VAR"}; 
			
			sid="ADD";
			while(Arrays.binarySearch(existingSIDs, sid)>-1 || Arrays.binarySearch(exceptionSIDs, sid)>-1){
				rnd=(int)Math.floor(Math.random()*alfa.length());
				sid=""+alfa.substring(rnd, rnd+1);
				for(int i=0;i<2;i++){
					rnd=(int)Math.floor(Math.random()*alfanum.length());
					sid+=alfanum.substring(rnd, rnd+1);
				}
			}
			return sid;
		}
	}
}