Holas, y bueno ya van unos años que deje de publicar en este blog. Un motón de nuevas experiencias que tuve y otro montón de cosas nuevas que pude aprender.
Escribo esto para mencionar que tengo como objetivo -finalizando el 2017 y comenzando el 2018- de volver a publicar diferentes cosas que me parezcan interesantes en mi nuevo blog http://blog.donkeysharp.xyz/
Saludos!
miércoles, 13 de diciembre de 2017
lunes, 14 de julio de 2014
Reiniciando GNU/Linux con la nariz ;)
Hola, ya es más de un año que no publico nada en este blog , pero bueno, esta vez los aburrire con una forma no muy conocida de reiniciar el sistema GNU/Linux.
Pues bien, ¿qué hacen cuando por alguna razón su sistema operativo se cuelga (X11 no reacciona a ninguna acción, no puedo acceder a las TTYs, etc.)?. Pues la solución de muchas personas (incluyendome) es la de presionar el botón de encendido y nuevamente iniciar el sistema bueno esta solución tiene ciertos inconvenientes:
Ahora, supongo que varios le dieron un ojo a su teclado y se preguntan cual de todas es SysRq. Por lo general en la mayoría de los teclados la tecla Print Screen o Imprimir Pantalla es la tecla SysRq.
Pues bien, ¿qué hacen cuando por alguna razón su sistema operativo se cuelga (X11 no reacciona a ninguna acción, no puedo acceder a las TTYs, etc.)?. Pues la solución de muchas personas (incluyendome) es la de presionar el botón de encendido y nuevamente iniciar el sistema bueno esta solución tiene ciertos inconvenientes:
- Perdida de archivos
- No desmontar el sistema de archivos correctamente
- Procesos no finalizados como deben
Haciendo magia con la tecla SysRq
Sabiendo estas cosas, el kernel Linux cuenta con una característica especial para estas situaciones (no les parece genial?) pero esta no es muy conocida, de hecho no la conocía hasta hace un par de meses. Esta característica se llama "Linux Magic System Request Key Hacks" (documentación) la cual nos permite ejecutar una serie de comandos a bajo nivel a través de la tecla SysRq (System Request o Petición al Sistema).Ahora, supongo que varios le dieron un ojo a su teclado y se preguntan cual de todas es SysRq. Por lo general en la mayoría de los teclados la tecla Print Screen o Imprimir Pantalla es la tecla SysRq.
Verificando si esta característica esta o nó habilitada
Para verificar si esta característica se encuentra habilitada es necesario verificar que el archivo /proc/sys/kernel/sysrq tenga un contenido mayor a cero. Si es así verán un número el cual puede tener los siguientes significados:lunes, 29 de abril de 2013
Utilizando Quartz.net en tu aplicación - Creando tareas programadas
Hola a todos, después de tanto tiempo vuelvo a postear en mi blog, muchas cosas pasaron en este tiempo, muchas cosas que aprendí y también muchas cosas que se deben postear :D.
Pues bien, vayamos a la parte interesante con la que los aburrire en este post ;), primeramente dejenme presentarles a Quartz.net que es un Task Scheduler el cual nos permite programar tareas a ejecutar cada cierto tiempo según segundos, minutos o incluso según una expresión CRON de Unix, en palabras simples es un programador de tareas como el que tiene Windows. El proyecto Quartz.net está basado en el proyecto Quartz que originalmente fue creado para Java, este es mantenido por la comunidad y es un proyecto bastante maduro.
Quartz.net tiene dos opciones: la primera es correr como un servicio windows y la segunda es embeber el "programador de tareas" a nuestra aplicación. Para este post utilizaremos la segunda opción, hay que resaltar que esta opción no es muy recomendada si la aplicación en la que correra el "programador de tareas" pueda ser detenida en algún momento, es decir, esto funcionará mientras la aplicación siga ejecutandose.
Pues bien, vayamos a la parte interesante con la que los aburrire en este post ;), primeramente dejenme presentarles a Quartz.net que es un Task Scheduler el cual nos permite programar tareas a ejecutar cada cierto tiempo según segundos, minutos o incluso según una expresión CRON de Unix, en palabras simples es un programador de tareas como el que tiene Windows. El proyecto Quartz.net está basado en el proyecto Quartz que originalmente fue creado para Java, este es mantenido por la comunidad y es un proyecto bastante maduro.
Quartz.net tiene dos opciones: la primera es correr como un servicio windows y la segunda es embeber el "programador de tareas" a nuestra aplicación. Para este post utilizaremos la segunda opción, hay que resaltar que esta opción no es muy recomendada si la aplicación en la que correra el "programador de tareas" pueda ser detenida en algún momento, es decir, esto funcionará mientras la aplicación siga ejecutandose.
jueves, 6 de diciembre de 2012
Usando mismo perfil de Thunderbird en GNU/Linux y Windows
Holas, de tiempazo que volveré a aburrirlos con alguno de mis experimentos locos, pues bien esta vez les mostraré como utilizar el mismo "profile" de Thunderbird tanto en GNU/Linux como en Windows.
Bueno el escenario básicamente es el siguiente: se cuenta con una máquina dual-boot con GNU/Linux y Windows, en mi caso inicialmente descargué e instale Thunderbird en Windows, sincronicé mis cuentas de correo, etc, etc. pero bueno al ser varias cuentas de correo y eran muchos mensajes (cosa de 300MB aprox.) no quería sincronizar mis cuentas en mi instalación de GNU/Linux de esa forma llegue a esta solución.
Los archivos de configuración que Thunderbird utiliza en ambos sistemas son los mismos, con la diferencia que se encuentran ubicados en diferentes lugares (por obvias razones ¬¬).
- En Windows 7 el profile de Thunderbird se encuentra en el directorio C:\Users\TU_USUARIO\AppData\Roaming\Thunderbird\Profiles\[random].default
- En GNU/Linux el profile se encuentra en /home/USUARIO/.thunderbird/[random].default
viernes, 26 de octubre de 2012
Material GUI Inf-121
Hola, acá les dejo los vídeo tutoriales sobre desarrollo de GUI con C-Sharp, el zip cuenta con vídeos con extensión .exe, no se asusten es por cuestiones de tamaño ya que hay vídeos que duran aproximadamente media hora y pesan mas o menos 5mb.
Este es el link de descarga:
https://www.dropbox.com/s/onyxtqb7g5pi1eg/Material%20121%20-%20aux.zip
Cualquier duda o pregunta pueden escribir a serguimant@hotmail.com o agregarme a facebook.
Saludos.
Este es el link de descarga:
https://www.dropbox.com/s/onyxtqb7g5pi1eg/Material%20121%20-%20aux.zip
Cualquier duda o pregunta pueden escribir a serguimant@hotmail.com o agregarme a facebook.
Saludos.
martes, 21 de agosto de 2012
Twitter, Python y GNU/Linux
Hola, bueno el otro dice haciendo algunas travesuras :P deje encendida mi maquina procesando algunas cosas, pero por ciertos motivos queria lograr cancelar esta tarea remotamente, pero el problema es que estaba en el cine (primer inconveniente), el segundo inconveniente fue que no tengo SSH Server público en mi PC por el hecho que no tengo IP pública (segundo inconveniente) y finalmente uno diría utilizar algo como TeamViewer ya que hay para dispositivos Android, esta solución parecería la más razonable pero yo no cuento con un smartphone (tercer inconveniente). Y bueno, se me vino una solución que igual realice hace un tiempo, pero utilizando CSharp bajo Windows.
La idea de este proyecto o del que hice en windows es el de escribir un tweet y que la aplicación lea constantemente el último tweet de cierto usuario. Ahora si el tweet tiene cierto formato preestablecido por nosotros indicando que sea cierta tarea se debe realizar en la PC que ejecute esta aplicación.
Pues bien, en windows lo logre sin muchos problemas utilizando Twitterizer. Ahora quiero hacer algo similar para que se ejecute en GNU/Linux, para ello utilizaré el buen Python (nadie le gana XDD).
jueves, 2 de agosto de 2012
Jugando con memes
Hola a todos, toda la tarde estuve viendo varios chistes de Bad Luck Brian ... todo un personaje y bueno estos memes siempre andan sacandome risas y risas ... asi que decidi hacer una aplicación que básicamente solo pone el texto sobre una imagen ... asi podrán hacer sus propios chistes de este pobre sujeto o de otros :P
Pues bien, ahora les explico como funciona, al ser una aplicación simple y bien hecha a la rápida toda la lógica esta en el formulario principal queria utilizar WPF ... pero bueno :\ tienen que formatear el texto a mano ... es decir ponerlo al centro, darle los saltos de linea, etc. además que se tiene la opción de elegir el tamaño de la fuente, este es un pantallazo de como luce la aplicación:
martes, 31 de julio de 2012
Mi Aplicación esta borracha!! XD
Que tal, bueno esta no es una entrada muy técnica o la gran cosa ... solo es una aplicación que muestra una imagen borrosa como si estuvieras borracho jajajaja, el efecto borracho lo hice utilizando Expression Blend 4. Vean que tal aca les dejo el link de descarga.
Bueno, explicando un poco solo cree un Storyboard que realiza una transformación de posición utilizando keyframes y una de las propiedades del Styoryboard es que su duración será Forever .
<Storyboard x:Key="Storyboard1" RepeatBehavior="Forever">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="image">
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="-2.668"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="-2.668"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="image">
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="2.668"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="2.668"/>
<EasingDoubleKeyFrame KeyTime="0:0:1.2" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
martes, 15 de mayo de 2012
Apoyando a la causa!
Hola a todos! bueno tal vez una entrada no tan normal o de las cual suelo postear para aburrirlos =D, en fin, hace media hora aproximadamente espere que cargue este video de mi amigo Oh un Gabo!! http://www.youtube.com/watch?v=wX9AP6tIaOk, y bueno me dije "por qué no ayudar a la causa??", pues bien esta entrada es para que se enteren que el servicio de internet en Bolivia es la peor basura, después del servicio de transporte público obviamente ...
Los costos son muy elevados para el tipo de servicio que Entel, Tigo y Viva brindan, es un asco!!!! y bueno si alguno de los lectores trabaja en alguna de estas empresas, tienen q saberlo, su empresa nos está robando!!!, si no me creen, nada mejor que una infografía para mostrarselos :), en fin ... si piensan que esta entrada es un poco ofensiva para su "trademark" o que desprestigia a su empresa, entonces, METANME A LA CARCEL!!!!, <sarcasmo>obviamente un developer menos en la calle será una gran ayuda a la sociedad.</sarcasmo>
Bueno, ya mucho trolling para estas empresas, pero en fin, no crean que soy un loco fanático religioso (pese a que soy Kopimi XD), pero igual, solo podria mandarles bombas fork, en fin, se está lanzando una campaña para que de alguna forma se escuche nuestra voz ...
Entren a este sitio donde hay más información al respecto http://www.masymejorinternet.org.bo
Ahora sí, me despido pero pedirles que hagan full ruido en redes sociales, twitter, etc., etc, ya que todos quisieramos un servicio de interenet justo y real bueno, ya no los aburro más xauuu!!!!!!!!!
Saludos
jueves, 19 de abril de 2012
Tic Tac Toe - Silverlight(Programmatically)
Bueno, como parte del diplomado en creación de aplicaciones para WindowsPhone7, una de nuestras primeras actividades que ya incluyen programación, es la de crear un Tic Tac Toe, tres en raya, etc. para dos jugadores, lo interesante de esta solución es que debía ser utilizando CSharp y no declarando la UI con XAML dentro de una librería de clases para su reutilización, pues bien mi idea es la siguiente:
- Crear una clase que herede del panel Grid, la cual me servirá de contenedor principal para alojar a los demas controles
- Este grid tendrá 4 filas y 3 columnas, la primera fila para un titulo, botón de reinicio, etc.
- En cada celda del grid, a partir de la segunda fila, pondré un Border para que en este se dibujen las figuras de cada jugador al responder al evento Tap de los borders
Bueno, primeramente la clase que abstraerá la lógica y el diseño será TicTacToe, la cual heredará de la clase Grid:
jueves, 23 de febrero de 2012
Introducción a HTML 5 - parte 1
Hola a todos, volviendo a escribir después de mucho tiempo, pues bien estos dias estuve viendo algo de HTML5 junto con WebMatrix y me gustaría compartir con ustedes la parte de HTML5, pienso presentar mas adelante tutoriales sobre WebMatrix.
Pues bien, como todos sabrán HTML5 salió con todo el año pasado y acompañado de CSS3 y Javascript es posible crear sitios web con una gran calidad en cuanto a diseño. Tal es su éxito que el mismo Microsoft esta adoptando esta tecnolgía para su próxima generación de aplicaciones, muchos de los juegos famosos como AngryBirds, Cut the Rope han sacado su versión en HTML5 y eso nos muestra el poder gráfico con el que cuenta esta naciente tecnología.
Actualmente
Definición del Doctype
Ahora vamos a lo que nos interesa, la forma de definir un documento HTML5 no es algo del otro mundo, pero uno de los primeros cambios que se tienen es la forma de definir el Doctype, ahora es un poco más simple y más fácil de memorizar:
<!DOCTYPE HTML>
<!-- Define doctype para html5, para que sea reconocido por los browsers -->
<html>
<head>
<!-- Información de cabecera del documento -->
</head>
<body>
<!-- Cuerpo del documento -->
</body>
</html>
Como se ve en el ejemplo, esa es la forma para definir un documento con contenido HTML5.
Nuevas etiquetas en HTML5
Primeramente todas las etiquetas que usamos en HTML4 que es el que la mayoria conoce se mantienen, pero ahora HTML5 incluye nuevas etiquetas las cuales tienen un significado estructural y significado gráfico, es decir que algunas de las nuevas etiquetas no se pueden ver visualmente pero como diseñadores nos ayudan a delimitar partes que comunmente tiene un sitio tales como headers, footers, articles, nav, etc. y también etiquetas que pueden ser observadas visualmente como la etiqueta audio, con el transcurso del tiempo les mostraré cada una de estas.
domingo, 22 de enero de 2012
Problema con Eclipse+jdk Debian Squeeze
Hola a todos, bueno aunque esta es una entrada un tanto diferente a las que generalmente y en un sistema operativo diferente, aca va.
Decidí aprender a desarrollar en android, esta vez de verdad y sin interrupciones, y bajo un entorno GNU/Linux, actualmente la distribucion que utilizo es Debian Squeeze, pues bien, estos fueron los problemas que tuve:
1. Después de instalar jdk, instalé el .bin que descargue de la web de oracle, después de esta instalación siempre tengo la costumbre de probar el compilador desde una terminal, pero luego para mi asombro :) me di cuenta que cuando escribía javac en la terminal me salía un mensaje de comando no encontrado, pero eso era falso ya que tenia instalado el jdk en /opt/jdk1.6.0_16/, luego buscando por internet encontré que tenia que establecer algunas variables de entorno, para lo cual editando el archivo /etc/bash.bashrc como root adicioné las siguientes lineas
# Establece la ruta del jdk
export JAVA_HOME=/opt/jdk1.6.0_16/
# Establece el directorio donde se encuentra el compilador
export PATH=$PATH:$JAVA_HOME/bin
# Establece el directorio donde se encuentran los binarios del JRE
export PATH=$PATH:$JAVA_HOME/jre/bin
Y bueno, con eso ya solucioné el problema que tenia en la terminal, super. Pero luego tuve otro problema, descargue el empaquetado de eclipse desde su web, de la misma forma que el jdk, esta vez los descomprimí en /opt/eclipse, lo ejecute por terminal
$ ./eclipse
Y se ejecuto tranquilamente, luego por cuestiones de comodidad, quise ponerlo en mi panel de accesos directos, establecí la ruta del ejecutable pero otra sorpresa, me salía un mensaje de error que podía encontrar ningún JRE instalado, lo cual era falso, y en el mensaje de error aparecía la siguiente ruta /opt/eclipse/jre/bin/java, obviamente no tenia ese directorio donde estaba instalado eclipse, entonces sabiendo que el JRE estaba en la carpeta del jdk, decidí crear un enlace simbólico del /bin del JRE a la carpeta de eclipse, esto ejecutando los siguientes comandos:
# mkdir /opt/eclipse/jre
# ln -s /opt/jdk1.6.0_16/jre/bin /opt/eclipse/jre/
Al no ser desarrollador java (siento que es la peor excusa), y menos en un entorno GNU/Linux, no estoy seguro que esta si esto puede ser considerado o no una buena práctica, pero funcionó por mi, todo en mi afán de intentar aprender a desarrollar aplicaciones para android.
Bueno, espero que les sea de utilidad.
Saludos
sábado, 17 de diciembre de 2011
Utilizando Reflection para el Acceso a Datos
Hola a todos, pues hace tiempo programe una clase utilitaria para automatizar la transformación de objetos ADO.Net que contenian información recuperada de una fuente de datos a POCO (Plain Old CLR Objects) utilizando reflection. Pues sin nada que hacer este sábado por la noche, decidí escribir este post sobre este DataTransformer
Primero comentar que reflection es el proceso en el cual un programa puede modificar su propia estructura en tiempo de ejecución (gracias wikipedia). Bueno esto se lo puede entender de muchas formas, pero un ejemplo simple sería el de crear la instancia de una clase cualquiera en tiempo de ejecución, por ejemplo pasandole como parámetro el nombre de esta, tal vez es un poco abstracto comprender esto pero en wikipedia hay un ejemplo muy bueno, que prácticamente hace la creación de un objeto de la forma clásica y utilizando reflection:
//Without reflection
Foo foo = new Foo();
foo.Hello();
//With reflection
object foo = Activator.CreateInstance(null, "Foo");
foo.GetType().GetMethod("Hello").Invoke(foo, null);
Ahora, como podríamos aplicar esto para automatizar el acceso a datos?, primeramente, esto se aplica en caso que nuestra capa de acceso a datos no cuente con un ORM. Siempre se dará el caso que una empresa requiera que la capa de acceso a datos se realice utilizando Ado.net puro y no un ORM, de todos modos, si nuestra aplicación tiene una arquitectura por lo menos de tres capas, se realizará un mapeo manual de los objetos ado.net a nuestro POCO, por ejemplo:
public List<Persona> GetPersonas() {
SqlConnection conn = new SqlConnection(Config.GetDbString("mibase"));
string sql = "SP_GetPersonas";
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
DataTable personas = new DataTable();
try {
adapter.Fill(personas);
List<Persona> result = new List<Persona>();
foreach(DataRow row in personas.Rows) {
Persona temp = new Persona();
temp.Codigo = row["Codigo"].ToString();
temp.Nombre = row["Nombre"].ToString();
result.Add(temp);
}
return result;
}
catch(Exception ex) {
throw ex;
}
}
Como se ve en el ejemplo, basicamente se esta haciendo un mapeo manual de una estructura DataTable a un objeto de tipo Persona, hasta aca todo simple, yo no me haria problema si tengo que hacer esto para 10 tablas, pero las estructuras empresariales pueden ser de decenas de decenas de tablas, sin incluir vistas. Entonces aca es donde entra reflection, para crear objetos dinámicamente.
Al siguiente clase como lo mencione arriba, realiza la transformación de una objeto Ado.net en un POCO, básicamente crea la instancia de un objeto que yo especifico, recorre sus propiedades y las compara con el nombre de las columnas de nuestro objeto Ado.net, si coinciden asigna el valor del objeto Ado.net a nuestro POCO.
Este es el código de DataTransformer:
public static class DataTransformer {
/// <summary>
/// Realiza la conversión de un DataTable a
/// una lista genérica de tipo TargetType
/// </summary>
/// <typeparam name="TargetType">Tipo destino de la lista</typeparam>
/// <param name="table">Origen de datos</param>
/// <returns>Lista genérica</returns>
/// <exception cref="Exception: En caso que los tipos del origen de datos no coincidan
/// con los de TargetType"></exception>
public static List<TargetType> DataTableToGenericList<TargetType>(DataTable table) {
List<TargetType> resultList = new List<TargetType>();
DataColumn temp;
TargetType item;
item = Activator.CreateInstance<TargetType>();
PropertyInfo[] properties = item.GetType().GetProperties();
foreach (DataRow row in table.Rows) {
item = Activator.CreateInstance<TargetType>();
foreach (PropertyInfo property in properties) {
temp = table.Columns[property.Name];
if (temp != null) {
if (temp.DataType.Name.Equals(property.PropertyType.Name)) {
property.SetValue(item, row[temp], null);
}
else {
throw new Exception("El tipo de la propiedad y columna son diferentes.");
}
}
}
resultList.Add(item);
}
return resultList;
}
/// <summary>
/// Realiza la conversión de un IDataReader a
/// una lista genérica de tipo TargetType
/// </summary>
/// <typeparam name="TargetType">Tipo destino de la lista</typeparam>
/// <param name="reader">Origen de datos</param>
/// <returns>Lista genérica</returns>
/// <exception cref="Exception: En caso que los tipos del origen de datos no coincidan
/// con los de TargetType"></exception>
public static List<TargetType> DataReaderToGenericList<TargetType>(IDataReader reader) {
List<TargetType> resultList = new List<TargetType>();
object propertyValue;
int columnNumber = reader.FieldCount;
TargetType item;
item = Activator.CreateInstance<TargetType>();
PropertyInfo[] properties = item.GetType().GetProperties();
while (reader.Read()) {
item = Activator.CreateInstance<TargetType>();
foreach (PropertyInfo property in properties) {
for (int i = 0; i < columnNumber; i++) {
if (reader.GetName(i).ToLower().Equals(property.Name.ToLower())) {
if (reader.GetFieldType(i).Name.Equals(property.PropertyType.Name)) {
propertyValue = reader.GetValue(i);
property.SetValue(item, propertyValue, null);
break;
}
else {
throw new Exception("El tipo de la propiedad y columna son diferentes.");
}
}
}
}
resultList.Add(item);
}
return resultList;
}
public static TargetType DataTableToObject<TargetType>(DataTable table) {
List<TargetType> lista = DataTableToGenericList<TargetType>(table);
if (lista.Count > 0)
return lista[0];
else
return default(TargetType);
}
}
Analicemos un poco el método DataTableToGenericList. Primero notar que recibe como parámetro el objeto Ado.net del cual queremos transformar los datos, luego tenemos el tipo al cual queremos transformar, obviamente este tipo tiene que ser POCO. Luego se crea una lista de objetos del tipo que se nos da como parametro, luego obtiene en un arreglo de tipo PropertyInfo las propiedades de este objeto.
Finalmente recorre las filas del DataTable, y por cada fila, recorre el arreglo que contiene las propiedades y las compara con las columnas del DataTable y voila!!
Una vez que tenemos este transformador de datos, nuestro código para obtener una lista de personas, tendríamos lo siguiente:
public List<Persona> GetPersonas() {
SqlConnection conn = new SqlConnection(Config.GetDbString("mibase"));
string sql = "SP_GetPersonas";
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
DataTable personas = new DataTable();
try {
adapter.Fill(personas);
return DataTransformer.DataTableToGenericList<Persona>(personas);
return result;
}
catch(Exception ex) {
throw ex;
}
}
Y como pueden observar, ya no es necesario mapear los objetos manualmente.
Bueno, eso es todo para esta entrada, ya me cayo el sueño, espero les sea de utilidad.
Saludos
jueves, 1 de diciembre de 2011
Mis primeros pasos con Web Matrix
Hola a todos, pues bien, una de las tareas que mi amigo asigno fue la de ver y mostrar lo que respecta uso la siguientes tecnologías:
- Web Matrix
- Azure
- Windows Phone 7
Pues bien, Azure nunca lo toque además que tampoco tengo SDK, lo se error mío. WP7 lo estoy viendo de a poco y Web Matrix es algo nuevo para mí, por lo que leí en me parece una buena herramienta, por el hecho que el desarrollo y deployment de sitios web y que opera (no se si es el mejor término), con plataformas como GNU/Linux.
En este momento lo estoy descargando y en el wizard de instalación se da la opción de instalar aplicaciones tales como CMS, Wikis, Blog engines, etc, etc. Una herramienta muy completa. Otra de las cosas que me llama la atención y que pude observar en el video de 3 minutos que se muestra en
el sitio de Web Matrix es el hecho de utilizar Razor para los sitios, pues bien, esto me impulsa mas a aprender el uso de esta herramienta, ya que en un futuro quiero aprender a utilizar ASP.NET MVC y hasta donde se, el View Engine de este framework es Razor.
el sitio de Web Matrix es el hecho de utilizar Razor para los sitios, pues bien, esto me impulsa mas a aprender el uso de esta herramienta, ya que en un futuro quiero aprender a utilizar ASP.NET MVC y hasta donde se, el View Engine de este framework es Razor.
Saludos!
sábado, 26 de noviembre de 2011
Nuevos Horizontes
Hola a todos, varias cosas raras ocurrieron en mi vida estos ultimos días,
tuve que decidir varias cosas, analizar las consecuencias de cada una de
mis decisiones, pero al final, en lo personal creo que tome la mejor decision.
Ahora, tengo que dedicarme a full a la actividad que decidí continuar, es decir
los Student Tech Clubs :)
Ahora las actividades que se vayan realizando con los Student Tech Clubs de la
Universidad Mayor de San Andrés, y los de Bolivia los iré publicando aca. En estas
semanas se me encargó la creación del sitio (nuevo reto para mí), el cual tendrá
la información sobre los STCs en Bolivia.
Saludos
tuve que decidir varias cosas, analizar las consecuencias de cada una de
mis decisiones, pero al final, en lo personal creo que tome la mejor decision.
Ahora, tengo que dedicarme a full a la actividad que decidí continuar, es decir
los Student Tech Clubs :)
Ahora las actividades que se vayan realizando con los Student Tech Clubs de la
Universidad Mayor de San Andrés, y los de Bolivia los iré publicando aca. En estas
semanas se me encargó la creación del sitio (nuevo reto para mí), el cual tendrá
la información sobre los STCs en Bolivia.
Saludos
miércoles, 5 de octubre de 2011
PasteBin4DotNet
Bueno, para las personas que conocen PasteBin.com, se habrán dado cuenta que tiene disponible una API y una serie de herramientas, pues bien aprovechando que mi docente de investigacion y operaciones no pasaría clases no fui a la universidad y comence con esto. El por que de esta librería si ya hay herramienta hechas?, pues por que soy geek y por que programo por pasión al teclado.
Actualmente esta libreria solo realiza el login correspondiente, y la publicación de nuevos pastes. Lo que todavía no hace es borrar pastes, listar pastes, etc. etc.
Asi que mis TODOS serán:
- Completar las otras funcionalidad de acuerdo con la documentación de la API en pastebin.com
- Viendo que en la página existen herramientas para varios sistemas operativos móviles, me gustaría hacer un cliente para WP7
- Y otro cliente con Metro Style para hacer algo un poco mas útil que el clásico "Hola mundo"
Por el momento este el código que hice, se que a muchos les podrá parecer feo y un poco inseguro ya que me olvide del control de excepciones.
###########Update: 16/09/2011 02:08am############
Vaya que fue una noche productiva, me lanze de loco y empece a programar las otras funciones que Pastebin provee en su api, con un poco de pruebas de unidad vi que todo estaba funcionando correctamente, solo falta realizar las pruebas de unidad para borrar un paste y obtener la información de usuario, creo que este proyecto es un pasatiempo para un sabado en la noche aburridisimo. Espero publicar el código fuente hasta el medio día.
###########Update: 16/09/2011 02:08am############
Vaya que fue una noche productiva, me lanze de loco y empece a programar las otras funciones que Pastebin provee en su api, con un poco de pruebas de unidad vi que todo estaba funcionando correctamente, solo falta realizar las pruebas de unidad para borrar un paste y obtener la información de usuario, creo que este proyecto es un pasatiempo para un sabado en la noche aburridisimo. Espero publicar el código fuente hasta el medio día.
Convirtiendo objetos a un arreglo de bytes y viceversa
Hola a todos, en esta entrada se mostrará el proceso para
convertir un objeto a un array de bytes y viceversa, pues esta fue
una necesidad que se me presento mientras trabajaba con sockets,
tenia que enviar cierta información, y decidi enviarla a traves de
objetos CLR, uno de los problemas de este metodo es que si existen
errores en la transmisión de datos, se lanzaría un excepcion en
el receptor ya que no podría convertir el array al objeto deseado.
En fin para realizar esto, hice uso de dos objetos:
- System.IO.MemoryStream
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
y el código es el siguiente:
miércoles, 28 de septiembre de 2011
Donkey Rat - Mi Pet Project
Hasta que me decidí hacerlo, ahora con una nueva mascota, Donkey Rat, hace tiempo que queria hacer algo similar, algo con trabajo de sockets, etc, etc.
Aprovechando que hoy la universidad esta cerrada, comence creandolo, fue una mañana productiva, ya tengo la parte de shell remota, hice la prueba con telnet y netcat y funciono!!! me sentía tan feliz, ahora solo falta crear la herramienta para el administrador, y subirlo a codeplex o github ...
Seguire escribiendo sobre el pequeño Donkey Rat...
Saludos
Aprovechando que hoy la universidad esta cerrada, comence creandolo, fue una mañana productiva, ya tengo la parte de shell remota, hice la prueba con telnet y netcat y funciono!!! me sentía tan feliz, ahora solo falta crear la herramienta para el administrador, y subirlo a codeplex o github ...
Seguire escribiendo sobre el pequeño Donkey Rat...
lunes, 12 de septiembre de 2011
Feliz día del programador!!!! 1111 1111
Bueno, jejejjeje solo desear un feliz del programador, pues si, día del programador. ... como lo escucharon ... día 256 del año: http://www.programmerday.info/
Saludos!
martes, 6 de septiembre de 2011
Script Python para realizar combinaciones
Hola a todos, en esta entrada publicaré un script python, pues bien, este script toma como entrada los símbolos de un alfabeto, y realiza la operación de potencia sobre este (Ver lenguajes formales), básicamente esta operación consta en generar todas las combinaciones posibles de cierto tamaño, por ejemplo, si se tiene el alfabeto S={0,1} y se desea elvar este alfabeto a la potencia 3, entonces:
- S^3 = {000,001,010,011,100,101,110,111}
Bueno, ahora vayamos al código, el script es el siguiente:
- S^3 = {000,001,010,011,100,101,110,111}
Bueno, ahora vayamos al código, el script es el siguiente:
Suscribirse a:
Entradas (Atom)
