Últimamente he descubierto que paso mucho tiempo procastinando en cosas que no me aportan mucho, diferente a cuando por ejemplo mataba tiempo tratando de aprender python. No me preocupa mucho pero si quisiera enfocarme en cosas más útiles.
Casi siempre tengo un servidor web corriendo en mi equipo, así que opté por generar entradas en mi /etc/hosts que apunten esos sitios a una página local donde me recuerdo que podría invertir mi tiempo en otras cosas. Una especie de auto-reflejo condicionado.
Desintoxicación de redes sociales, le digo.
Sobre la evaluación
1. “Hay seis factores a evaluar :
Doctrina
Tiempo
Terreno
Mando
Disciplina”
2. “El arte de la guerra se basa en el engaño.”
3. “Muchas menos oportunidades de victoria tendrá aquel que no realiza cálculos en absoluto.”
Sobre la iniciación de las acciones
4. “Los que no son totalmente conscientes de la desventaja de servirse de las armas no pueden ser totalmente conscientes de las ventajas de utilizarlas.”
5. “Si utilizas al enemigo para derrotar al enemigo, serás poderoso en cualquier lugar a donde vayas.”
Sobre las proposiciones de la victoria y la derrota
6. “Es mejor conservar a un enemigo intacto que destruirlo.”
7. “La victoria completa se produce cuando el enemigo es vencido por el empleo de la estrategia.”
8. "Si no puedes ser fuerte, pero tampoco sabes ser débil, serás derrotado."
9. “Triunfan aquellos que saben cuándo luchar y cuándo no.”
10. “Hacerte invencible significa conocerte a ti mismo; aguardar para descubrir la vulnerabili-dad del adversario significa conocer a los demás.”
11. “Todo el mundo elogia la victoria en la batalla, pero lo verdaderamente deseable es poder ver el mundo de lo sutil y darte cuenta del mundo de lo oculto, hasta el punto de ser capaz de alcanzar la victoria donde no existe forma.”
12. “Servirse de la armonía para desvanecer la oposición.”
Sobre la firmeza
13. “Obtener la victoria sin necesidad de ejercer la fuerza.”
14. “Cuando hay entusiasmo, convicción, orden, organización, recursos, compromiso de los soldados, tienes la fuerza del ímpetu, y el tímido es valeroso. Así es posible asignar a los soldados por sus capacidades, habilidades y encomendarles deberes y responsabilidades adecuadas. Cada cual es útil.”
Sobre lo lleno y lo vacío
15. “Para tomar infaliblemente lo que atacas, ataca donde no haya defensa. Para mantener una defensa infaliblemente segura, defiende donde no haya ataque.”
16. “Cuando los adversarios llegan para atacarte, no luchas con ellos, sino que estableces un cambio estratégico para confundirlos y llenarlos de incertidumbre.”
17. “Haz que los adversarios vean como extraordinario lo que es ordinario para ti; haz que vean como ordinario lo que es extraordinario para ti.”
18. “Las preparaciones por todas partes significará ser vulnerable por todas partes.”
19. “Si conoces el lugar y la fecha de la batalla, puedes acudir a ella aunque estés a mil kilómetros de distancia.”
20. “Pruébalos para averiguar sus puntos fuertes y sus puntos débiles.”
21. “Cuando no tienes forma, los informadores no pueden descubrir nada, ya que la información no puede crear una estrategia.”
Sobre el enfrentamiento directo e indirecto
22. “Cuando emprendes la marcha después que los otros y llegas antes que ellos, conoces la estrategia de hacer que las distancias sean cercanas.”
23. “Si ignoras los planes de tus rivales, no puedes hacer alianzas precisas.”
24. “Una fuerza se usa según la estrategia prevista, se moviliza mediante la esperanza de recompensa, y se adapta mediante la división y la combinación.”
25. “Una vez que están unificados, el valiente no puede actuar solo, ni el tímido puede retirarse solo: ésta es la regla general del empleo de un grupo.”
26. “Cuando la mente original es firme, la energía fresca es victoriosa.”
27. “Utilizar el orden para enfrentarse al desorden, utilizar la calma para enfrentarse con los que se agitan, esto es dominar el corazón.”
28. “A menos que tu corazón esté totalmente abierto y tu mente en orden, no puedes esperar ser capaz de adaptarte a responder sin límites, a manejar los acontecimientos de manera infalible, a enfrentarte a dificultades graves e inesperadas sin turbarte, dirigiendo cada cosa sin confusión.”
29. “No presiones a un enemigo desesperado.”
Sobre los nueve cambios
30. “Si están al mando de ejércitos, pero ignoran las artes de la total adaptabilidad, aunque conozcan el objetivo a lograr, no pueden hacer que los soldados luchen por él.”
31. “El beneficio y el daño son interdependientes, y los sabios los tienen en cuenta.”
32. “Cansa a los enemigos manteniéndolos ocupados y no dejándoles respirar. Pero antes de lograrlo, tienes que desarrollar un ejército fuerte, un pueblo próspero, una sociedad armoniosa y una manera ordenada de vivir.”
33. “Si puedes recordar siempre el peligro cuando estás a salvo y el caos en tiempos de orden, permanece atento al peligro y al caos mientras no tengan todavía forma, y evítalos antes de que se presenten; ésta es la mejor estrategia de todas.”
34. “Los buenos generales se comprometen hasta la muerte, pero no se aferran a la esperanza de sobrevivir; actúan de acuerdo con los acontecimientos, en forma racional y realista, sin dejarse llevar por las emociones ni estar sujetos a quedar confundidos. Cuando ven una buena oportunidad, son como tigres, en caso contrario cierran sus puertas. Su acción y su no acción son cuestiones de estrategia, y no pueden ser complacidos ni enfadados.”
Sobre la distribución de los medios
35. “Mándalos con humanidad y benevolencia, unifícalos de manera estricta y firme. Cuando la benevolencia y la firmeza son evidentes, es posible estar seguro de la victoria.”
36. “Cuando las órdenes se dan de manera clara, sencilla y consecuente a las tropas, éstas las aceptan. Cuando las órdenes son confusas, contradictorias y cambiantes las tropas no las aceptan o no las entienden.”
37. “Cuando las órdenes son razonables, justas, sencillas, claras y consecuentes, existe una satisfacción recíproca entre el líder y el grupo.”
Sobre la topología
38. “Hay seis maneras de ser derrotado. La primera es no calibrar el número de fuerzas; la segunda, la ausencia de un sistema claro de recompensas y castigos; la tercera, la insuficiencia de entrenamiento; la cuarta es la pasión irracional; la quinta es la ineficacia de la ley del orden; y la sexta es el fallo de no seleccionar a los soldados fuertes y resueltos.”
39. “Pero si eres tan amable con ellos que no los puedes utilizar, si eres tan indulgente que no les puedes dar órdenes, tan informal que no puedes disciplinarlos, tus soldados serán como niños mimados y, por lo tanto, inservibles.”
Sobre las nueve clases de terreno
40. “Se podría preguntar cómo enfrentarse a fuerzas enemigas numerosas y bien organizadas que se dirigen hacia ti. La respuesta es quitarles en primer lugar algo que aprecien, y después te escucharán.”
41. “Que los movimientos de tus tropas y la preparación de tus planes sean insondables.”
42. “Si no tienen otra opción, lucharán hasta el final.”
43. “Dirigir un grupo es como dirigir a un solo individuo que no tiene más que una sola opción.”
44. “Corresponde al general ser tranquilo, reservado, justo y metódico.”
Sobre la concordia y la discordia
45. “La información previa debe obtenerse de personas; personas que conozcan la situación del adversario.”
46. “No será ventajoso para el ejército actuar sin conocer la situación del enemigo, y conocer la situación del enemigo no es posible sin el espionaje.”
sudo apt-get upd... y presionas la tecla "Tab" para que este comando se auto complete, no pasa nada, y no es solo con este comando, es con prácticamente todos los relacionados con los programas instalado en tu Ubuntu.bash.bashrc con Gedit para que podamos editar las lineas que están causando el problema:I just read Digital Fortress by Dan Brown.
It was an entertaining read. It was like reading a long movie, if that makes any sense. It has some imprecisions but I don't complain when people fly in the movies thus I won't complain about them now. It's a fiction book anyway. If you wish an introduction to cryptography you should read The Code Book instead.
I'm of the thinking that people should be able to keep secrets if they wish to but some governments do not like that. Refusing to hand over your encryption keys is a crime in the UK, for instance.
There are nice mentions of the EFF. Also a small mention of Colombia.
<script type="text/javascript"></script>
Discussion
Después de dos años he dejado de usar Twitter.
Algunas cosas de Twitter me gustan y he sido juicioso marcando mis favoritos. Twitter no me disgusta, lo que me disgusta es el hábito que se forma. Estar revisando Twitter cada rato para ver algunas cosas interesantes entre un montón de datos escritos sin cuidado y sin contexto.
Escribir tweets es muy barato. Escribir en un weblog requiere pensar más. Seguiré leyendo algunos weblogs usando los feeds y no haciendo pooling.
De Twitter me gustó aprender a sintetizar. Antes 128 caracteres me parecían muy pocos y ahora me parecen bastantes.
Desde hace un tiempo he pensado en desconectarme poco a poco de fuentes de datos y ese es un paso en esa dirección.
En los últimos meses y años he pensado bastante sobre la información en diferentes ámbitos y cada vez la percibo más viva. Más poderosa.
De Jurassic Park recuerdo la frase la vida se abre camino. Podríamos decir que la información se abre camino. A fin de cuentas es la misma cosa.
Este hospedador se despide por ahora.
<script type="text/javascript"></script>
Discussion


| |



POLITECNICO COLOMBIANO JAIME ISAZA CADAVID
TALLER DE INGENIERIA DE SOFTWARE
Asignatura: Análisis y Diseño
Profesor: BERNARDO MOLINA ZULUAGA, bmolina@escolme.edu.co
ENUNCIADO
Suponga que creará un sistema informático que jugará ajedrez con un usuario. Diseñe LOS MODELOS UML que permitan implementar una solución elabore el diagrama de clases, el de casos de uso, el de secuencias y colaboración necesario para responder al menos a los siguientes requerimientos:
La partida de ajedrez se juega entre dos adversarios que mueven alternativamente sus propias piezas sobre un tablero cuadrado, llamado "tablero de ajedrez". El jugador con las piezas blancas comienza la partida. Se dice que un jugador "está en juego" cuando se ha realizado la jugada de su adversario.
El objetivo de cada jugador es situar al rey de su adversario "bajo ataque", de tal forma que el adversario no disponga de ninguna jugada (movimiento de pieza) legal que evite la "captura" del rey en la siguiente jugada. Del jugador que alcanza este objetivo se dice que ha dado "mate" al rey de su adversario y que ha ganado la partida. El adversario, cuyo rey ha recibido el mate, pierde la partida.
Si la posición es tal que ninguno de los jugadores puede dar mate, la partida es tablas.
Reconocer que tipo de pieza es cada una (Rey, reina, alfil, caballo, torre y peón)
Reconocer la forma de moverse de cada pieza:
No está permitido mover una pieza a una casilla ocupada por una pieza del mismo color. Si una pieza se mueve a una casilla ocupada por una pieza de su adversario, ésta es capturada y retirada del tablero como parte del mismo movimiento.
El alfil a cualquier casilla a lo largo de una de las diagonales sobre las que se encuentra.
La torre a cualquier casilla a lo largo de la fila o columna en las que se encuentra.
La dama a cualquier casilla a lo largo de la fila, columna o diagonal en las que se encuentra.
El caballo a una de las casillas más próximas a la que se encuentra, sin ser de la misma fila, columna o diagonal.
El peón puede hacia adelante a la casilla inmediatamente delante suyo en la misma columna, siempre que dicha casilla esté desocupada, o en su primer movimiento puede avanzar dos casillas a lo largo de la misma columna, siempre que ambas casillas estén desocupadas, o el peón puede ser movido a una casilla ocupada por una pieza del adversario que esté en diagonal delante suyo, sobre una columna adyacente, capturando dicha pieza.
Cuando un peón alcanza la fila más alejada desde su posición inicial debe ser cambiado, como parte del mismo movimiento, por una dama, torre, alfil o caballo del mismo color.
Hay dos formas diferentes de mover el rey: Desplazándolo a cualquier casilla adyacente no atacada por una o más piezas del adversario. O el "Enrocando". Movimiento del rey y de una de las torres del mismo color y que esté en la misma fila: el rey es trasladado dos casillas desde su casilla original hacia la torre y luego dicha torre es trasladada a la casilla que acaba de cruzar el rey.
Reconocer el tablero (número de casillas, identificadas las filas por letras y pro números las columnas)
Reconocer si una pieza es blanca o negra y en que casilla se encuentra.
ACTIVIDADES
Fase Análisis del problema (Lectura analítica del enunciado)
Fase Análisis de textual del problema (Lectura gramatical del enunciado)
Fase Análisis Funcional de Escenarios de utilizacion
Fase Diseño Funcional refinamiento del comportamiento de objetos en relación a estimulo - acción - efecto (Evento/Método/Cambio de estado)
Fase Implementación (Calificación de arquitectura de clases)
Fase Implementación (Codificacion de Interfaces internas/externas)
RECURSOS
Sitio DE INTERÉS


Zlib es una librería que proporciona funciones que nos permiten realizar tareas de compresión y descompresión usando el formato GZIP. En esta entrada vamos a ver algunos ejemplos sencillos de compresión de archivos usando dicha librería, y además veremos cómo funcionan las librerías adicionales para comprimir archivos en ZIP y Bunzip… aunque también existen otros formatos disponibles como rar, lzf y phar.
Este es un ejemplo básico en donde se comprime y descomprime un archivo:
function descomprimir($origen, $destino) {
$string = implode("", gzfile($origen));
$fp = fopen($destino, "w");
fwrite($fp, $string, strlen($string));
fclose($fp);
}
function comprimir($origen, $destino) {
$fp = fopen($origen, "r");
$data = fread ($fp, filesize($origen));
fclose($fp);
$zp = gzopen($destino, "w9");
gzwrite($zp, $data);
gzclose($zp);
}
comprimir("archivo.txt","archivo.gz");
descomprimir("archivo.gz","archivo2.txt");
Esta es una breve descripción de las funciones para Gzip incluidas en Zlib:
gzclose — Cierra un puntero gz-filegzcompress — Comprime una cadena de textogzencode — Crea una cadena de texto comprimida en gzipgzeof — Verifica si es el fin del archivo en un puntero gz-filegzfile — Lee el contenido de un archivo gzip y lo almacena en un arreglogzgetc — Obtiene el caracter al que apunta un gz-file pointergzgets — Obtiene la linea a la que apunta un gz-file pointergzgetss — Obtiene la linea a la que apunta un gz-file pointer y remueve las etiquetas HTMLgzinflate — Descomprime una cadena comprimidagzopen — Abre un archivo gzipAquí un ejemplo muy básico:
function comprimir_bzip($origen, $destino){
// abrir el archivo en modo escritura
$bz = bzopen($destino, "w");
// escribir el contenido del origen
bzwrite($bz, file_get_contents($filename));
// cerrar el archivo
bzclose($bz);
}
Información adicional y lista de las funciones disponibles: PHP: Bunzip.
En este caso se utilizan la clase ZipArchive:
function comprimir_zip($origen, $destino){
$zip = new ZipArchive();
if ($zip->open($destino, ZIPARCHIVE::CREATE)!==TRUE) {
die("Error al crear el archivo");
}
$zip->addFile($origen, "/".basename($origen));
$zip->close();
}
Esta es una manera sencilla de verificar si PHP fue compilado con soporte para estas librerías:
if( class_exists('ZipArchive') )
echo "ZIP: OK\n";
if( function_exists('bzwrite') )
echo "Bunzip: OK\n";
if( function_exists('gzwrite') )
echo "gzip: OK\n";
Esta entrada, principalmente dedicada a mi mismo ya que se que se me va a olvidar cómo hacerlo, indica paso a paso como crear un servicio en Android que se ejecute al iniciar el sistema. Como sabemos, un servicio es un proceso que se ejecuta en background aun cuando ningún componente visual de nuestra aplicación se encuentre activo.
La idea es más o menos sencilla: una vez que un sistema Android ha iniciado envía una acción broadcast llamada android.intent.action.BOOT_COMPLETED. La idea es crear un BroadcastReceiver que escuche este tipo de acciones e inicie el servicio que deseemos. Así pues, el primer paso es crear una clase que extienda BroadcastReceiver:
public class Recibidor extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent servicio = new Intent();
servicio.setAction("foo.bar.Servicio");
context.startService(servicio);
}
}
Lo interesante aquí es que se ejecuta el método startService enviando como parámetro un Intent cuyo action es “foo.bar.Servicio”, el cual es el servicio que deseamos ejecutar. Dicho servicio es una clase que extiende de Service, y del cual debemos sobrescribir los métodos onCreate y onStart:
public class Servicio extends Service{
private static final String TAG = "EjemploServicioBoot";
private Timer timer;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate(){
super.onCreate();
Log.d(TAG, "Servicio creado");
timer = new Timer();
}
@Override
public void onStart(final Intent intent, final int startId){
super.onStart(intent, startId);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Log.i(TAG, "Se ejecuta la tarea");
}
}, 0, 15000);
}
}
En este caso, el servicio realiza una tarea muy simple: imprime en el log del sistema un mensaje. Básicamente tenemos un objeto tipo Timer que ejecutará una tarea; en onCreate simplemente iniciamos el objeto Timer, mientras que en onStart usamos el método scheduleAtFixedRate indicando que ejecutaremos dicha tarea cada 15 segundos.
Por último, debemos registrar en el archivo AndroidManifest.xml el BroadcastReceiver y el servicio:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="foo.bar" android:versionCode="1" android:versionName="1.0">
<application>
<service android:name=".Servicio">
<intent-filter>
<action android:name="foo.bar.Servicio"/>
</intent-filter>
</service>
<receiver android:name=".Recibidor">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>
En el manifest podemos ver que añadimos un elemento service dentro de application, para registrar nuestro servicio. Y lo más interesante se ve en las líneas 12 y 17, que es donde indicamos el tipo de mensaje que nuestro recibidor estará esperando antes de ejecutar la tarea e indicamos que la aplicación requiere permisos para conocer cuando el boot del sistema a finalizado.
Hace un par de semanas publiqué una entrada en donde proponía sortear 4 e-books de Android y hoy es el día en que se escogía un ganador! El video lo grabé hace unas horas en la oficina, donde no podía hacer mucho ruido así que es un video mudo (apenas se escuchan algunos murmullos y el sonido del inicio de un Windows 7
). En fin… aquí está el sorteo y felicidades al ganador:
Este video tutorial trata de enrutamiento estatico en routers cisco.
<object height="340" width="440"> <param name="movie" value="/cisco/videos/cisco06/enrutaestatic.swf"> <param name="quality" value="high"> <param name="wmode" value="window"> <param name="menu" value="false"> <param name="bgcolor" value="#FFFFFF"> <embed bgcolor="#FFFFFF" height="340" menu="false" quality="high" src="/cisco/videos/cisco06/enrutaestatic.swf" type="application/x-shockwave-flash" width="440" wmode="window"></embed> </object>
Share and Enjoy:
GNS3 es un simulador gráfico de la red que permite la simulación de redes complejas. Aca les dejo el quinto video tutorial de redes de datos, espero les guste este simulador de redes.
Sitio oficial de GNS3: www.gns3.net
<object height="340" width="440"> <param name="movie" value="/cisco/videos/cisco05/GSN3.swf"> <param name="quality" value="high"> <param name="wmode" value="window"> <param name="menu" value="false"> <param name="bgcolor" value="#FFFFFF"> <embed bgcolor="#FFFFFF" height="340" menu="false" quality="high" src="/cisco/videos/cisco05/GSN3.swf" type="application/x-shockwave-flash" width="440" wmode="window"></embed> </object>
Share and Enjoy:
A continuación les presento el cuarto vídeo tutorial de redes, en esta oportunidad el tema que toca el autor es VLSM como una técnica más eficiente de direccionamiento IP.
<object height="340" width="440"> <param name="movie" value="/cisco/videos/cisco04/VLSM.swf"> <param name="quality" value="high"> <param name="wmode" value="window"> <param name="menu" value="false"> <param name="bgcolor" value="#FFFFFF"> <embed bgcolor="#FFFFFF" height="340" menu="false" quality="high" src="/cisco/videos/cisco04/VLSM.swf" type="application/x-shockwave-flash" width="440" wmode="window"></embed> </object>
Share and Enjoy:




Lugar: Corporación Universitaria Autónoma del Cauca, Calle 5 No. 3-85 Popayán
Fecha: Sabado 24 de Abril de 2010
Hora: 09:00 a.m. a 4:00 p.m.
Mayor Información:
En Cali queremos hacer el Día de Internet más grande del mundo y todos estos chavos y yo, el moacho con sonrisa de oreja a oreja nos proponemos a hacerlo, será genial trabajar con tod@s est@s loc@s y pues animo moachos, serémos los únicos en el mundo ese día que trataremos de movilizar toda una ciudad, será GENIAL.
import math
def separar(ecu):
"""Esta funcion separara cada valor de la ecuacion"""
ecu = ecu.replace('\t', '') #Se reemplazan los tabulados
nueva = ecu.split('x^2') #quitamos los valores con x^2 y x
nueva += nueva[1].split('x')
#Se elimina el indice 1 de la lista y lo dejamos
#con los datos necesarios
nueva.remove(nueva[1])
#Ahora recorremos la lista para no dejar signos sin valores
#creamos un contador para el indice
cont = 0
for h in nueva:
if h == '+' or h == '-' or h == '': #Si es un signo +/- o sino es nada
h += '1'
nueva.remove(nueva[cont])
nueva.insert(cont, h)
cont += 1
x = cuadratica(int(nueva[0]), int(nueva[1]), int(nueva[2]))
return x
def cuadratica(a, b, c):
"""Vamos a obtener el valor de X por medio de la ecuacion cuadratica"""
raiz = math.sqrt((b**2)-(4*a*c))
x1 = (-b + raiz)/(2*a)
x2 = (-b - raiz)/(2*a)
lista = [str(x1), str(x2)]
return lista
archi = open('quadratic.txt').readlines()
suma = 0
for h in archi:
z = separar(h)
for l in z:
#Si al final sale un .0 entonces lo volvemos entero y se suma
if l[-2:] == '.0':
suma += int(l.replace('.0', ''))
print suma
Como recomendación en seguridad, cuando necesitemos acceder a nuestros servidores desde una ubicación poco o nada segura y no queramos exponer el password de nuestro servidor, podemos optar por utilizar los famosos passwords de un solo uso u OTP (por sus siglas en inglés)
Para esto necesitamos instalar opie:
apt-get install opie-server
A continuación, como usuario establecemos una contraseña y el programa nos proporciona un challenge:
opiepasswd -c -f
ID kobayasymaru OTP key is 499 ku8732
FISH FORM BEAR HID FEAT RUBE
Podemos obtener un listado de los 10 futuros password de un solo uso que vamos a poder usar mediante el comando siguiente:
$ opiekey -n 10 499 ku8732
495: FATE SANE INN SOFA TONG OWLY
496: CRAY TACT LASS DARE JAN MART
497: COED MAUL SITU JAY KIND SINE
498: OUTS CLAN NORM LIEU AVOW PRO
499: FISH FORM BEAR HID FEAT RUBE
Por último, falta configurar el sistema para que acepte estas contraseñas. Editamos ‘/etc/pam.d/common-auth’:
auth sufficient pam_unix.so nullok_secure
auth sufficient pam_opie.so
auth required pam_deny.so
#auth requisite pam_unix.so nullok_secure
#auth optional pam_smbpass.so migrate missingok
Y en el caso de que usemos SSH, editamos ‘/etc/ssh/sshd_config’:
ChallengeResponseAuthentication yes
Deseo agradecer al Blog de Marble, por servirme de guia para crear esta entrada.