Como son las entrevistas en Google?

by ryudice on July 18, 2010

Si quieren saber como es el proceso de entrevistas para ser contratado en google les recomiendo este post, esta en ingles pero lo pueden traducir con google translate y si saben ingles aun mejor.

En general el proceso consta de alrededor de 5 entrevistas segun esta persona, he leido otros posts sobre entrevistas de google y todos concuerdan en la cantidad de entrevistas que tienen que pasar antes de ser contratados( si es que los contratan). En el post el autor menciona algunos recursos interesantes sobre que necesitan si quieren trabajar en google, obviamente no son recursos oficiales pero tambien si ven los comentarios un ex-empleado de google da unos cuantos tips.

{ 0 comments }

Hace dos dias paso algo para lo que no estaba preparado, el hosting tuvo un problema y perdio la base de datos del blog, no tenia respaldos, ya que yo no creia en los respaldo porque nunca habia estado en una situacion como esta, nunca se me ha arruinado un disco, nunca habia perdido informacion, hasta hace 2 dias…

Entre al blog y vi que tiraba un error de que no podia abrir la base de datos, no me asuste porque ya me habia pasado y lo solucione facilmente, pero esta ves entre al panel de control del hosting y veo que en el tamanio de la base de datos aparecia “0.0MB”, todavia no me habia asustado porque pense “quizas no sirve el panel de control”, luego para verificar decidi abrir la base de datos en phpMyAdmin,  y hoy si me asuste, todas las tablas tenian cero filas, trate de buscar algun respaldo que me acordaba haber hecho hace mucho pero no tuve exito. La verdad me resigne y dije que desde entonces no iba a subestimar la importancia de los respaldos.

Afortunadamente, me comunique con el hosting y tenian el respaldo del dia anterior guardado, al final todo regreso a la normalidad, pero lo mas importante es que aprendi una leccion: Hay que hacer respaldos.

Inmediatamente el blog estaba arriba, instale el plugin WP-DBManager y programe respaldos automaticos cada 3 dias de la base de datos, lo bueno de este plugin en especial es que tiene la opcion de enviarte el respaldo a tu correo electronico, asi en caso de que agarren fuego los centros de computo del hosting, yo voy a tener el respaldo en mi correo :) .

{ 0 comments }

Mi mama siempre me dice que paso demasiado tiempo en la computadora y que hay que tomar un descanso cada hora, el problema es que nunca me acuerdo que tengo que descansar de tan concentrado que estoy. Esta pequeña aplicación te recuerda que tienes que tomar un descanso, según el tiempo que ustedes configuren, es sencilla y funcional y para aquellos que se preocupan por su salud les servirá para acordarse de levantarse para ir a tomar un café y relajarse un rato.

Descargar Big Stretch

{ 0 comments }

ASP.NET MVC + ExtJS

by ryudice on June 3, 2010

Si no han oido de ExtJS, es un framework para RIAs (Rich Internet Application) basado en javascript, otros framework de RIA son Flex y Silverlight, los cuales estan basados en plataformas completamente diferentes ala de ExtJS, ya que ExtJS no requiere que se instale ningun plugin adicional a diferencia de Silverlight y Flex, ya que ExtJS lo unico que necesita es javascript.

ExtJS esta compuesto por varios componentes programados en javascript, similar al modelo de ASP.NET normal, por ejemplo, incluye un componente para Grids, uno para ventanas, formularios, etc., pero lo que convierte a ExtJS en  un framework RIA es que todo lo hace a traves de JSON y AJAX, por lo que tener que refrescar la pagina es raro en aplicaciones hechas completamente en ExtJS, es como cargar una aplicacion de escritorio en el navegador.

ASP.NET MVC Y ExtJS

He estado utilizando ExtJS para un proyecto en la universidad y decidi utilizar ASP.NET MVC como tecnologia de servidor y descrubri que ExtJS y ASP.NET MVC se integran increiblemente bien, desarrollar las aplicaciones es mucho mas sencillo.

La curva de aprendizaje de ExtJS puede ser un poco inclinada (dificil) si no estan familiriazados con javascript pero una ves se acostumbren se van a dar cuenta porque los desarrolladores de ExtJS decidieron usar javascript.

Llenando un grid de ExtJS con datos de un controlador de ASP.NET MVC

Vamos a crear un grid sencillo y le vamos a cargar datos desde un controlador de ASP.NET MVC para que vean lo sencillo que es.

En ExtJS todo el acceso a datos se hace por medio de objetos de tipo Store, en nuestro caso vamos a usar un JsonStore, ya que nuestro controlador retornara datos serializados en formato JSON.

Descargando ExtJs y agregando referencias

La libreria la pueden descargar de www.extjs.com, luego copien los archivos que se muestran en la imagen a un nuevo directorio llamado extjs dentro de la carpeta “Scripts” de la aplicacion.

image

La estructura dentro de la aplicacion debe quedarles asi:

image

Ahora agreguen estas referencias al master page o ala pagina donde quieran usar la libreria:

<script src="/Scripts/extjs/adapter/ext/ext-base.js" type="text/javascript"></script>
<script src="/Scripts/extjs/ext-all.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="/Scripts/extjs/resources/css/ext-all.css" />

Este es el codigo del controlador que vamos a utilizar, cree una clase de nombre Empleado que vamos a retornar,y tambien cree un metodo para generar empleados y asi poder retornar la lista de empleados.

    [HandleError]
    public class EmpleadoController : Controller
    {
        public ActionResult Index()
        {
            var empleados = GenerarEmpleados(25).ToList();
 
            if (Request.IsAjaxRequest())
            {
                return Json(new {data = empleados, total = empleados.Count},JsonRequestBehavior.AllowGet);
            }
 
            return View();
        }
 
 
        private IEnumerable<empleado> GenerarEmpleados(int cantidad)
        {
            var nombres = new []{&quot;Roberto&quot;, &quot;Javier&quot;, &quot;Ernesto&quot;, &quot;Diego&quot;, &quot;Julio&quot;, &quot;Carlos&quot;};
            var apellidos = new[] {&quot;Gonzalez&quot;, &quot;Martinez&quot;, &quot;Zepeda&quot;, &quot;Perez&quot;, &quot;Calderon&quot;};
            var cargos = new[] {&quot;Gerente de operaciones&quot;, &quot;Programador&quot;, &quot;Administrador&quot;, &quot;DBA&quot;, &quot;Coordinador&quot;};
            var random = new Random();
            for (int i = 0; i &lt; cantidad; i++)
            {
                yield return new Empleado
                                 {
                                     Apellido = apellidos[random.Next(0, 4)],
                                     Nombre = nombres[random.Next(0, 4)],
                                     Cargo = cargos[random.Next(0, 4)],
                                     Sueldo = random.Next(100, 5000),
 
                                 };
 
            }
 
 
        }
    }
 
    public class Empleado
    {
        public string Nombre { get; set; }
        public string Apellido { get; set; }
        public decimal Sueldo { get; set; }
        public string Cargo { get; set; }
    }

 

Vamos a usar el mismo metodo “Index” para retornar nuestros datos, la unica diferencia es que si la peticion fue hecha a traves de AJAX, como es en el caso de ExtJS, entonces vamos a retornar JSON, de otra manera vamos a retornar la pagina para ser visualizada en el navegador, asi nos ahorramos estar creando nuevas acciones en el controlador.

Es hora de escribir un poco de javascript, primero vamos a crear un JsonStore de ExtJS, el JsonStore es como un Datasource que vamos a utilizar para cargar el Json que retornara nuestro metodo Index:

    var empleadosStore = new Ext.data.JsonStore(
    {
        url: &quot;/Empleado&quot;,
        fields: [&quot;Apellido&quot;,&quot;Nombre&quot;,&quot;Cargo&quot;,&quot;Sueldo&quot;],
        root: 'data'
    });
 
    var grid = new Ext.grid.GridPanel({
        title: 'empleados',
        store: empleadosStore,
        height: 400,
        colModel: new Ext.grid.ColumnModel({
            columns: [{ header: 'Nombre', dataIndex: 'Nombre' },
        { header: 'Apellidos', dataIndex: 'Apellido' },
        { header: 'Cargo', dataIndex: 'Cargo' },
        { header: 'Sueldo', dataIndex: 'Sueldo', renderer: Ext.util.Format.usMoney}]
        })
    });
 
    Ext.onReady(function(){
        grid.render('empleados_grid');
        empleadosStore.load();
    });

 

Explicacion

Primero creamos un JsonStore, este es parecido a los objetos datasource asp.net, cualquier acceso a datos se tiene que hacer por medio de un objeto Store, en nuestro caso usamos un JsonStore ya que la informacion que accesamos esta en formato Json. Como parametros del constructor del JsonStore le mandamos un Hash con las propiedades que le queremos asignar. Especificamos que la URL para cargar los datos es “/Empleado”, la cual es la URL de la accion Index d emi controlador, recuerden que si la accion detecta en la peticion es AJAX regresa un arreglo JSON, el JsonStore hace todas sus peticiones por medio de AJAX. Pueden ver en firebug lo que retorna la accion:

image

En la propiedad “fields” especificamos las propiedades de mis objetos JSON, y la propiedad “root” sirve para especificar la propiedad del resultado de JSON que contiene mi lista de datos, en nuestro caso, el objeto JSON que regresamos contiene dos propiedades, una llamada  “data” que contiene mis objetos, y otra llamada “total” que contiene la cantidad de objetos regresados.

Despues de crear el store ahora creamos un objeto de tipo “GridPanel” que vamos a utilizar para cargar nuestros datos. Asi como el objeto Store, al GridPanel tambien podemos enviarle las propiedades en un hash en el constructor, las propiedades mas importantes son “store” que especificar el DataStore de donde vamos a cargar los datos y la propiedad colModel donde especificamos las columnas del grid.

Al crear nuestras columnas la propiedad “dataIndex” especifica la propiedad del objeto que queremos mostrar.

Una ves tenemos creado el grid, tenemos que especificar el id de un div a donde vamos a renderizar el grid:

    Ext.onReady(function(){
        grid.render('empleados_grid');
        empleadosStore.load();
    });

 

El metodo onReady nos sirve para definicar una funcion que se va ejecutar al temrinarse de cargar el documento.

El metodo “load” de nuestro dataStore sirve para hacer la peticion y cargar la informacion.

Resultado final

image

Por alguna razon el css que traen las aplicacion MVC distorsiona el disenio del grid, si lo quitan se van a ver bien.

{ 1 comment }

Supongo que ya les ha pasado que ni se dan cuenta y de repente su disco duro ya esta lleno, a mi me pasa seguido porque desafortunadamente soy muy desordenado, pero he encontrado una herramienta que aunque no me evita el desorden por lo menos me ayuda a ordenarlo, se llama GetFolderSize, hay otras herramientas como estas, son comunes, pero lo que destaca a esta es que es gratis.

GetFolderSize escanea todas las carpetas del disco, y archivos, y muestra cuanto ocupa cada una, en porcentaje y en bytes, y hace mas facil identificar en donde estan los archivos que mas espacio nos consumen.

image

{ 0 comments }

Marihuana digital

by ryudice on May 17, 2010

Estoy conciente que este post esta muy afuera dle contexto del blog pero me parecio un tema interesante para compartir.

IDoser es un programa que por medio de sonidos intenta simular en el cerebro el mismo tipo de estado que causa la marihuana.

El cerebro humano genera diferente tipos de ondas en ciertas frecuencias dependiendo del estado en el que se encuentra, estas ondas se conocen como brainwaves en ingles, por ejemplo, cuando estamos alerta generamos ondas beta, cuando estamos relajados generamos ondas alpha, estas ondas alpha estan asociados con la meditacion. El programa lo que hace es que usando sonidos hacer que el cerebro genere las mismas ondas que genera cuando estamos bajo efectos de la marihuana.

No solo trae marihuana, trae varias drogas, a mi la verdad no me funciono mucho pero esta tambien Neuroprogrammer, otro programa parecido el cual a mi me funciono mejor.

{ 1 comment }

Usando el nuevo tipo dynamic en C# 4.0

by ryudice on April 25, 2010

Una de las nuevas funcionalidades de la nueva version de C# 4.0 que viene con el framework 4.0 son los tipos “dinamicos” los cuales se declaran usando la palabra “dynamic”.

La palabra “dynamic” tiene una funcionalidad muy similar a la palabra “var”, que se incluyo a apartir de C# 3.0, ya que el tipo de la variable es inferido al momento de compilar el programa, la diferencia y gran ventaja de la palabra dynamic es que la resolucion de los metodos de cualquier variable declarada como dynamic se realiza en el momento de ejecucion, no en momento de compilacion. Por ejemplo:

Digamos que yo estoy tratando de llamar un metodo que no existe de mi clase string:

var persona=new Persona(); 
persona.Suicidarse(); //este metodo no existe, tira error al momento de compilar

El codigo anterior no compila. Ahora usando la palabra dynamic:

dynamic persona=new Persona(); 
persona.Suicidarse();

Esto si compila, sin embargo tira un error al momento en el que se ejecuta el codigo.

Ventajas

Para que nos puede servir la palabra dynamic? bueno pues la razon principal de su inclusion en este framework es gracias al DLR(Dynamic Language Runtime), el DLR es lo que nos permite ejecutar scripts de lenguajes interpretado en .NET como python y ruby, como ya sabran estos lenguajes son de tipado dinamico entonces para poder interactuar con objetos de estos dos lenguajes de script era necesario tener la palabra dynamic.

Aparte de esto, con la palabra dynamic nos evitamos tener que usar reflection en algunos casos. Por ejemplo, si estamos usando variable de tipo object, tenemos que usar reflection para acceder a sus metodos o propiedades, ahora solo podemos usar la palabra dynamic y llamamos a los metodos sin recibir errores al compilar porque el metodo no existe.

Aplicacion de ejemplo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
namespace Demostraciones.Dynamic
{
    class Program
    {
        static void Main(string[] args)
        {
            ParametroDinamico(new { Nombre="Roberto", Apellido="Yudice" });
            ParametroNoDinamico(new { Nombre="Roberto", Apellido="Yudice" });
        }
 
        static void ParametroDinamico(dynamic parametro)
        {
            Console.WriteLine("Ejecutando metodo dinamico");
            Console.WriteLine(parametro.Nombre);
            Console.WriteLine(parametro.Apellido);
        }
 
        static void ParametroNoDinamico(object parametro)
        {
            Console.WriteLine("Ejecutando metodo con Reflection");
            var propertyInfo = parametro.GetType().GetProperty("Nombre");
            var value = propertyInfo.GetValue(parametro,null);
            Console.WriteLine(value.ToString());
            propertyInfo = parametro.GetType().GetProperty("Apellido");
            value = propertyInfo.GetValue(parametro,null);
            Console.WriteLine(value.ToString());
        }
    }
}

 

Como podran ver me ahorro una buena parte de codigo usando la palabra dynamic.

{ 1 comment }

Microsoft Fix it

by ryudice on April 18, 2010

Microsoft ha lanzado una nueva herramientas que tiene como objetivo solucionar problemas comunes de sus sistemas operativos, no se cuando la lanzaron pero se encuentra en beta todavia, se ve interesante.

Ir a sitio oficial de Microsoft Fix it

{ 1 comment }

Tutorial de IronRuby

by ryudice on April 17, 2010

IronRuby es un version del famoso lenguaje Ruby,el cual era practicamente desconocido hasta que salio Ruby on Rails, que se ejecuta en el .NET framework o el CLR en terminos mas tecnicos. Esto nos permite correr scripts de ruby en aplicaciones .NET e incluso permitir que nuestros scripts interactuen con objetos en .NET.

En mi caso yo necesitaba ejecutar un bloque de codigo que necesitaba ser modificado en tiempo de ejecucion, en otras palabras, necesitaba almacenar en mi base de datos un bloque de codigo que se iba utilizar para validacion y este codigo necesita ser modificado por otro usuario por medio de la parte de administracion de la aplicacion, ejecutar codigo dinamicamente en c# simplemente no es posible, lo mas cerca que pueden llegar es compilandolo y luego ejecutandolo lo cual aparte de ser una tarea que requiere mucho codigo no es muy eficiente, asi que decidi usar IronRuby para esto.

Uno de las caracteristicas importantes de IronRuby es que es un lenguaje con bastantes posibilidades para metaprogramacion. Metaprogramacion quiere decir que un programa puede modificarse el solo por medio del mismo codigo. Un ejemplo de las caracteristicas de metraprogramacion de ruby en la funcion eval, parecida a la de javascript, por ejemplo en ruby yo puedo ejecutar codigo de la siguiente manera

str="4/2" 
eval str #el resultado es 2

Lo que hace la funcion eval es ejecutar el codigo de la variable str y me devuele 2, comoq ue si yo tuviera una linea de codigo 4/2.

Descargando IronRuby

La ultima version a la fecha de este post es la 1.0 pueden descargarla aqui.

Ejecutando Codigo de IronRuby desde una Aplicacion .NET

Creamos un nuevo proyecto de tipo Consola en Visual Studio

image

Ahora necesitamos agregar las referencias que necesita IronRuby, los DLL se encuentras en la carpeta “bin” dentro del folder de instalacion de IronRuby, agreguen referencia a los DLL que se muestran en la imagen de abajo.

image

Y este es el codigo de la aplicacion:

using Microsoft.Scripting.Hosting;
 
namespace IronRuby.Demostracion
{
    class Program
    {
        static void Main(string[] args)
        {
            string script = "puts 'Hola mundo'";
 
            ScriptEngine scriptEngine = IronRuby.Ruby.CreateEngine();
            ScriptSource source = scriptEngine.CreateScriptSourceFromString(script);
            source.Execute();
        }
    }
}

El resultado es el siguiente:

image

Explicacion

La funcion puts en ruby en el equivalente a Console.Write en .NET, lo unico que hace es imprimir un string en consola, en Ruby no es necesiario usar parentesis para los parametros de un metodo, aunque es permitido, de tal forma que tambien pude haber utilizado “puts(‘Hola Mundo’)”.

Luego en las siguientes lineas de codigo despues de la variable script, primero creo un script engine con una funcionq ue ya viene dentro de IronRuby, con este Script engine luego creo un ScriptSource, el cual representa al codigo de mi script, para ejecutar el script solamente hay que llamar el metodo Execute de la clase ScriptSource. En caso de que el script retorn un objeto entonces el metodo Execute lo retorn como tipo Object.

En el siguiente post voy a demostrarles como interactuar con objetos .NET en ruby.

{ 0 comments }

Convencion sobre configuracion

by ryudice on April 13, 2010

Desafortunadamente para mi persona no puedo dormir asi que voy a tratar de aprovechar mi insomnio con este post. La convencion sobre configuracin es un paradigma que ha surgido con gran popularidad en los frameworks de desarrollo web, el ejemplo clasico es el framework rails. La razon de este surgimiento esta en que de repente a los programadores empezaron a preocuparse por ser productivos mas de lo normal, he aqui porque la mayoria de estos frameworks de convencio sobre configuracion tambien utilizan lenguajes dinamicos(Groovy, ruby, php, python), los cuales se supone que hacen mas productivo al programador porque permiten usar metaprogramacion y tipado dinamico.

Convencion sobre configuracion quiere decir que en ves de tener que configurar mi aplicacion en un archivo XML(por ejemplo), lo que hago es utilizar una convecion, de nombrado de mis clases por ejemplo, para susituir la configuracion.

Digamos que en el caso de ASP.NET, yo tengo varias clases pero no todas son clases de persistencia, y que normalmente yo tengo que definir en un XML las clases de persisten como en el caso de Nhibernate, ahora esto es configuracion, si quisieramos usar convencion lo que hariamos es nombrar mis clases con un prefijo, “DB” por ejemplo, de tal manera que mi clase de persistencia de productos se llame “DBProducto”, y que automaticamente Nhibernate, asuma que las clases que contengan este prefijo son clases persistencia, ahora esto es convencion, no tengo que configurar nada.

El ejemplo anteriormente mencionado actualmente se puede lograr utilizando Fluent NHibernate, es una version de convencion sobre configuracion de Nhibernate.

La convencion sobre configuracion realmente nos vuelve mas productivos, mucho mas, yo la verdad amo a Rails desde la primera ves que lo logre entender de verdad, desgraciadamente esta lejos de darme de comer, asi que tengo que seguir con .Net.

Otros frameworks de configuracion sobre convencion son Spring Roo(Java), Grails(Groovy), Fluent Nhibernate(.NET), Rails(Ruby), CakePHP(Php), ASP.NET MVC (.NET)

{ 0 comments }

Get Adobe Flash playerPlugin by wpburn.com wordpress themes

PensandoEnCodigo is Digg proof thanks to caching by WP Super Cache