Controla tu banshee desde tu cel con Remuco y Ubuntu
En ubuntu karmic debes seguir la siguiente receta
Agregar al repositorio las siguientes entradas (sudo gedit /etc/apt/sources.list)
deb-src http://ppa.launchpad.net/remuco-team/ppa/ubuntu karmic main
Actualizamos el repositorio:
Instalamoso el cliente Remuco para nuestro reproductor favorito (en mi caso es el 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:
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:
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
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 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:
-- / | \
--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.
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.
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
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.
ProblemaHacer 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 10Salida
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++:
#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
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
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.
// 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
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!

