logoTh!nk Again


Controla tu banshee desde tu cel con Remuco y Ubuntu

Posted in Tutoriales, Uncategorized by admin on the August 21st, 2010


En ubuntu karmic debes seguir la siguiente receta

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 51A6F565

Agregar al repositorio las siguientes entradas (sudo gedit /etc/apt/sources.list)

deb http://ppa.launchpad.net/remuco-team/ppa/ubuntu karmic main
deb-src http://ppa.launchpad.net/remuco-team/ppa/ubuntu karmic main

Actualizamos el repositorio:

sudo apt-get update

Instalamoso el cliente Remuco para nuestro reproductor favorito (en mi caso es el banshee)

sudo apt-get install remuco-banshee

Bajamos e instalamos el cliente (midlet) en nuestro celular con soporte para aplicaciones java.

Descargamos la última versión de aquí, descomprimimos el .rar y buscamos en la siguiente ruta la aplicación .jar, en mi caso:

/home/dennys/Escritorio/remuco-0.9.3/client/midp/app/remuco.jar

Enviamos por bluetooth el .jar a nuestro teléfono, aceptamos la aplicación y el Remuco queda instalado. Ahora hay que levantar el cliente en nuestro ubuntu de la siguiente forma:

dennys@inspiron:~$ remuco-banshee
Log output will be stored in /home/dennys/.cache/remuco/banshee/log
Contribute to Remuco: Please run 'remuco-report' once a client has connected, thanks!

Para no hacer el paso anterior cada vez que encendemos la compu, lo agregamos como una aplicación de inicio:

Sistemas>Preferencias>Aplicaciones de Inicio
Luego el botón Añadir y escribimos:

También tenemos que abrir nuestro Banshee y agregar canciones a la cola de reproducción, las cuales podrá “ver” el cliente Remuco en el teléfono.

¡Listo!, abre la aplicación en el teléfono y disfruta tu controlo remoto :) .

Más información:
Using mobile phone as remote for linux media players is fun!

Recorrido sobre un árbol de Jerarquías en SQL Server

Posted in Programming Languages, Uncategorized by admin on the August 21st, 2010

Necesitarás la estructura de la tabla y unos cuantos datos de prueba que puedes copiar de aquí, lo he tomado de la página Recursive Queries Using Common Table Expressions del msdn.

-- Create an Employee table.
CREATE TABLE dbo.MyEmployees
(
EmployeeID smallint NOT NULL,
FirstName nvarchar(30)  NOT NULL,
LastName  nvarchar(40) NOT NULL,
Title nvarchar(50) NOT NULL,
DeptID smallint NOT NULL,
ManagerID int NULL,
CONSTRAINT PK_EmployeeID PRIMARY KEY CLUSTERED (EmployeeID ASC)
);
-- Populate the table with values.
INSERT INTO dbo.MyEmployees VALUES
(1, N'Ken', N'Sanchez', N'Chief Executive Officer',16,NULL)
,(273, N'Brian', N'Welcker', N'Vice President of Sales',3,1)
,(274, N'Stephen', N'Jiang', N'North American Sales Manager',3,273)
,(275, N'Michael', N'Blythe', N'Sales Representative',3,274)
,(276, N'Linda', N'Mitchell', N'Sales Representative',3,274)
,(285, N'Syed', N'Abbas', N'Pacific Sales Manager',3,273)
,(286, N'Lynn', N'Tsoflias', N'Sales Representative',3,285)
,(16,  N'David',N'Bradley', N'Marketing Manager', 4, 273)
,(23,  N'Mary', N'Gibson', N'Marketing Specialist', 4, 16);

Tenemos un árbol de jerarquías como este:

--   273
--  / |  \
--16 274 285
--/  / \    \
--23  275 276 286

¿Como puedo conocer los nodos ancestros del nodo 286?
Este query soluciona el problema, empleando un CTE (Common Table Expression) que entre cosas permite ser autoreferenciado.

WITH DirectReports (ManagerID, EmployeeID, Title, Level)
AS
(
-- Anchor member definition
SELECT e.ManagerID, e.EmployeeID, e.Title, 0 AS Level
FROM dbo.MyEmployees AS e
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON e.EmployeeID = edh.EmployeeID AND  edh.EndDate IS NULL
WHERE e.EmployeeID IN (1,274,276,275) --COMO PARAMETRO LAS HOJAS
UNION ALL
-- Recursive member definition
SELECT e.ManagerID, e.EmployeeID, e.Title, Level + 1
FROM dbo.MyEmployees AS e
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON e.EmployeeID = edh.EmployeeID AND edh.EndDate IS NULL
INNER JOIN DirectReports AS d
ON e.EmployeeID = d.ManagerID
)
SELECT * FROM MyEmployees
-- Statement that executes the CTE
SELECT DISTINCT ManagerID, EmployeeID--, Title, Level
FROM DirectReports

Cuando el número de nodos se encuentra en el orden de los miles, el tiempo de ejecución toma importancia y es mejor tener una versión iterativa de la solución.

DROP TABLE #Tree
CREATE TABLE #Tree
(
cid    INT NOT NULL,
pid    INT NULL,
lvl    INT NOT NULL,
);

declare @lvl AS int
SET @lvl = 0

--Inserta al conjunto los nodos raíz
INSERT INTO #Tree(lvl,cid, pid)
SELECT @lvl,EmployeeID, ManagerID
FROM dbo.MyEmployees
WHERE EmployeeID IN (1,274,276,275)

--  select * from #Tree
WHILE @@rowcount > 0
BEGIN
SET @lvl = @lvl + 1;

INSERT INTO #Tree(lvl,cid, pid)
SELECT @lvl, C.EmployeeID, C.ManagerID
FROM #Tree AS P
JOIN dbo.MyEmployees AS C
ON P.lvl = @lvl - 1 AND
P.pid = C.EmployeeID;
END
SELECT DISTINCT cid,pid FROM #Tree

Concurso de Programación ANPA10

Posted in Challenges, Programming Languages, Uncategorized by admin on the March 27th, 2010
logoANPA

Faltan pocos días para el ANPA 2010

El próximo concurso de la ANPA será el 24 de Abril del presente año en León, Guanajuato; no es necesario pertenecer a alguna institución para poder participar y para que se animen a participar, este es uno de los problemas del ANPA07.

Problema: Cajas (ANPA 07 Semifinal) 
Autor: Fory
Historia  
         El encargado de “Empresa productora de cartón” decidió lanzar una línea nueva de cajas.  La línea consiste en una colección de cajas cúbicas de diferentes tamaños.  Como promoción de lanzamiento se hicieron paquetes de cajas de tal forma que al abrir una puedas encontrar otra y dentro de esta una más y así sucesivamente hasta abrir la caja más pequeña incluida en el paquete.  De improviso llega un cliente a la fábrica pidiendo un paquete de lanzamiento; desafortunadamente todos los paquetes ya fueron enviados a las tiendas. Dado que tú eres el responsable de armarlos decides formar uno con el mayor número posible de cajas existentes en la fábrica.  
Problema

 Hacer un programa que lea el tamaño de cada una de las cajas que hay en la fábrica y escriba el mayor número de cajas que puede tener el paquete. Dentro de una caja de tamaño T puedes meter otra de tamaño t sólo sí t < T. 

Entrada 

La primer línea de la entrada contendrá un sólo número entero n (1 ≤ n ≤ 100). Dicho número representa el número de casos de prueba para este problema. Cada una de las siguientes n líneas describirá un caso de prueba. En cada caso debes leer primero un entero k (1 ≤ k ≤ 1000) que indica cuantas cajas hay en la fábrica y después leer el tamaño de cada una de las cajas. El tamaño de cada caja será un entero entre 1 y 1000.

 Ejemplo: 
4
11 1 2 3 4 5 6 7 8 9 10 11
1 10
4 2 2 2 2
5 1 2 2 3 10 

Salida 

Para cada caso de prueba debes escribir una línea de texto con el mensaje “El paquete mayor tiene N cajas.”, siendo N el número de cajas en el paquete más grande.  Ejemplo (estas salidas corresponden al ejemplo que se da en Entrada): 

El paquete mayor tiene 11 cajas.
El paquete mayor tiene 1 cajas.
El paquete mayor tiene 1 cajas.
El paquete mayor tiene 4 cajas. 

Nombre del programa 
cajas.cpp, cajas.java, cajas.cs, cajas.vb

Como pueden ver, no es nada del otro mundo y la solución se puede escribir en pocas lineas en c++:

//@dennysreg
#include <cstdio>
#include <set>
using namespace std;
int main(){
  int casos, ncajas, tamCaja;
  scanf("%d",&casos);
  while(casos--){
      set<int>cajas_no_repetidas;
      scanf("%d",&ncajas);
      for(int i=0; i<ncajas;i++){
          scanf("%d",&tamCaja);
          cajas_no_repetidas.insert(tamCaja);
      }
      printf("El paquete mayor tiene %d cajas.\n",cajas_no_repetidas.size());
  } 
}

Les dejo algunos de los problemas aquí para que se terminen de animar.

Knight Rider effect based on Arduino

Posted in Uncategorized by admin on the November 22nd, 2009

I confess that I liked so much the TV show “Knight Rider” (”Kit, el auto increíble” in Mexico) of eighties. I have seen the new version, the effects are cool but not so much the story. Here is an sketch that looks like the ancient panel of Kit. Take a look and leave me your comments!

matrix 8x8

matrix 8x8


Here is the Arduino sketch, it’s a mod of Tom Igoe’s code that reduce the number of ports that we need to control the matrix adding an 4017 counter.

// Kinght Rider
// by Dennys Regalado Díaz <http://challenges.qumax.org>
int clock = 9;// goes to the clock pin on the 4017 IC
int reset = 8;//goes to the reset pin on the 4017 IC
int row[]={0,1,2,3,4,5,6,7}; //PORTD(0-7)
void setup(){
  //simple stuff here
  pinMode(clock,OUTPUT);
  pinMode(reset,OUTPUT);

   for (int thisPin = 0; thisPin < 8; thisPin++) {
    // initialize the output pins for matrix 1:
    pinMode(row[thisPin], OUTPUT);
    // take the row pins (i.e. the cathodes) low to
    // the LEDS are off:
    digitalWrite(row[thisPin], HIGH);
  }
 
  //reseting the 4017 IC, you have to do this
  digitalWrite(reset,HIGH);
  delayMicroseconds(5);
  digitalWrite(reset,LOW);
}

void display_pattern(int loops)
{
  for (int thisrow = 0; thisrow < 8; thisrow++) {
    // take the row pin (cathodes) high:
    digitalWrite(row[thisrow], LOW);
    // iterate over the cols (anodes):
    for (int thiscol = 0; thiscol < 8; thiscol++) {
      // when the row is low and the col is high,
      // the LED where they meet turns on:
      //send a clock signal to the counter 4017
      digitalWrite(clock, LOW);
      delay(50);
      digitalWrite(clock, HIGH);
    }
    // take the row pin high to turn off the whole row
    digitalWrite(row[thisrow], HIGH);
  }
}

void loop(){
  display_pattern(100);// calls for the display_pattern function and says that int loop = 15(if you do more loop the pattern whould scrrol slower).
}

eXitium: mini mod del Juego Left4Dead

Posted in Hecho en México, Juegos, Uncategorized, proyectos by admin on the June 10th, 2009



Daniel Reynoso nos cuenta desde su página, sobre la modificación que le hizo al juego de acción Left4Dead. Se trata de un juego en primera persona que tiene como escenario el anexo a la Facultad de Ingeniería de la UNAM, México. Daniel nos cuenta de cómo surgió la iniciativa de este proyecto:

Después de jugar HalfLife 2 un par de veces, decidí probar las herramientas de desarrollo. Así que construí un mapa aleatorio, coloqué una esfera roja y pensé: “mmm, esta podría ser la Leonardita (la escultura roja del Anexo de Ingeniería, UNAM)  sería excelente hacer el mapa completo” Y así, un nuevo mod para el HL2 había nacido.

¿Cuál es la historia? Bueno, es el mismo inexplicable apocalipsis de zombies, pero en otro país (México). Mismo concepto, distintas circunstancias.

Mas información en la página oficial, gracias Daniel!