Translate
sábado, 13 de abril de 2013
USB claro en linux
Estoy sin internet, porque se corto el teléfono, más allá de eso se me ocurrió comprar un modem claro para salir del paso, en fin fui a comprarlo y le pregunte al vendedor que sistemas operativos soportaba, y me contesto Windows, ha y mac también pero nunca lo probé. Digamos que Linux ni hablar pensé, y pensé bien; no funciona en Linux. Por lo menos no sin bajar nada; en fin posteo esto desde el windows que tuve que instalar.
Solo tengo que decirle algo a claro:
Programadores con experiencia.
Hace ya tiempo ley un artículo en java hispano sobre si es mejor un programador con más experiencia; en este articulo se demuestra que no es mejor una persona con más experiencia que un novato programando y al principio pensé que había algo mal, no puede ser que un programador que tiene 3 años en el mercado programe igual que uno que tiene 4 años de experiencia o 2. Me parecía muy raro, pero luego me di cuenta que en realidad alguien con menos conceptos programa igual que los experimentados, con la diferencia de que el desarrollo de software no todo es programar. Es decir nosotros estamos todo el tiempo topándonos con problemas, problemas que puede ser la base de datos o hibernate o algúna otra herramienta y sin embargo se nota a simple vista que alguien que tiene más tiempo programando maneja mejor estas herramientas. Sin hablar de que si hay que diseñar algo con algún patrón; es innegable que el manejo de patrones lleva su tiempo.
Es decir el tiempo te llena de conocimiento y esto vale. Y si no se usa o quedo viejo hay que hacer el esfuerzo de extrapolar el conocimiento, es muy difícil generalizar por ejemplo como se utiliza una herramienta; pero los conceptos siempre quedan; un ejemplo podría ser la gente que sabe flash y diseñar con flash, si bien hubo cambio si una persona que utilizo flash le toca diseñar en html 5 va ser mucho más rápido que alguien que nunca diseño. Por este motivo, hay que esforzarse para entender los conceptos y no solo las herramientas, para que nuestro conocimiento pueda durar en el tiempo.
Es decir el tiempo te llena de conocimiento y esto vale. Y si no se usa o quedo viejo hay que hacer el esfuerzo de extrapolar el conocimiento, es muy difícil generalizar por ejemplo como se utiliza una herramienta; pero los conceptos siempre quedan; un ejemplo podría ser la gente que sabe flash y diseñar con flash, si bien hubo cambio si una persona que utilizo flash le toca diseñar en html 5 va ser mucho más rápido que alguien que nunca diseño. Por este motivo, hay que esforzarse para entender los conceptos y no solo las herramientas, para que nuestro conocimiento pueda durar en el tiempo.
jueves, 11 de abril de 2013
MoSQL, de mongoDb a postgres!!
Con el crecimiento de NoSQL, las herramientas que permiten convivir NoSQL cn base de datos relacionales estan tomando mayor importancia. Por lo tanto les quiero presentar MoSQL, que permite hacer? Replicar datos desde una base de datos MongoDB a una postgres.
Con MoSQL, se puede ejecutar aplicaciones contra una base de datos MongoDB, pero también mantener una actualización de sus datos en PostgreSQL, listo para realizar consultas con toda la potencia de SQL.
Dejo link:
https://stripe.com/blog/announcing-mosql
https://github.com/stripe/mosql
lunes, 8 de abril de 2013
Libertad y educación
Quiero recomendar el blog Libertad y educación, muy bueno y interesante. Y mi pensamiento es que en todas las entidades educativas se debería enseñar software libre. Por que? Porque el software libre te brinda mayor libertad de aprendizaje, podemos aprender más.
Dejo link:
http://libertadygnu.blogspot.mx/
sábado, 6 de abril de 2013
Rust, un nuevo lenguaje de Mozilla
Mozilla anuncia un nuevo motor de renderizado de paginas Servo, lo que me llamo la atención es que servo va ser escrito en un lenguaje nuevo llamado Rust.
Rust a simple vista se ve como c++, pero es bastante más evolucionado. Veamos un poco de código:
use core::rand::RngUtil;
fn main() {
for ["Alice", "Bob", "Carol"].each |&name| {
do spawn {
let v = rand::Rng().shuffle([1, 2, 3]);
for v.each |&num| {
print(fmt!("%s says: '%d'\n", name, num))
}
}
}
}
Que nos ofrece este lenguaje:
- Inferencia de tipos
- Tareas concurrentes seguras
- Closures
- Pattern matching
- Polimorfismo.
Vamos a ver como va evolucionando su uso, por ahora voy mirando su documentación:
http://www.rust-lang.org/
http://doc.rust-lang.org/doc/tutorial.html
http://doc.rust-lang.org/doc/rust.html
Preguntas y respuestas de mi base datos Oracle
Siempre tenemos que mirar nuestra base para cuidar que su crecimiento no sea abrupto, lo peor que nos puede pasar es que las entidades más grandes, sean las que más se consultan y esto suele pasar seguido. Para llevar un control respondamos 3 preguntas:
Cual son los 40 objetos más grande de mi base de datos?
select * from (
select owner, segment_name, bytes/1024/1024 Size_Mb from dba_segments order by
bytes/1024/1024 DESC )
where rownum <= 40
Cual son las 40 tablas más grande de mi base de datos?
select *
from (select segment_name "Table Name",
round(sum(bytes)/1024/1024, 2) "Size MB"
from dba_extents
where segment_type = 'TABLE'
group by segment_name
order by 2 desc)
Cuales son los objetos más accedidos?
SELECT ROWNUM AS RANK, Seg_Lio.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'LIO' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'logical reads'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seg_Lio
WHERE ROWNUM <= 15
UNION ALL
SELECT ROWNUM AS RANK, Seq_Pio_r.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'PIO Reads' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'physical reads'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seq_Pio_r
WHERE ROWNUM <= 15
UNION ALL
SELECT ROWNUM AS RANK, Seq_Pio_w.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'PIO Writes' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'physical writes'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seq_Pio_w
WHERE ROWNUM <= 15
Con el resultado de estas consultas podemos tomar decisiones antes que la base se vuelva lenta.
Cual son los 40 objetos más grande de mi base de datos?
select * from (
select owner, segment_name, bytes/1024/1024 Size_Mb from dba_segments order by
bytes/1024/1024 DESC )
where rownum <= 40
Cual son las 40 tablas más grande de mi base de datos?
select *
from (select segment_name "Table Name",
round(sum(bytes)/1024/1024, 2) "Size MB"
from dba_extents
where segment_type = 'TABLE'
group by segment_name
order by 2 desc)
Cuales son los objetos más accedidos?
SELECT ROWNUM AS RANK, Seg_Lio.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'LIO' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'logical reads'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seg_Lio
WHERE ROWNUM <= 15
UNION ALL
SELECT ROWNUM AS RANK, Seq_Pio_r.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'PIO Reads' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'physical reads'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seq_Pio_r
WHERE ROWNUM <= 15
UNION ALL
SELECT ROWNUM AS RANK, Seq_Pio_w.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'PIO Writes' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'physical writes'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seq_Pio_w
WHERE ROWNUM <= 15
Con el resultado de estas consultas podemos tomar decisiones antes que la base se vuelva lenta.
Aprender Python con Pythonmonk
De los creadores de rubymonk llega pythonmonk, es un manual online para aprender python. Una gran idea , y si no hicieron el de ruby se los aconsejo.
A ponerse a estudiar pequeños saltamontes.
Dejo link:
http://pythonmonk.com
jueves, 4 de abril de 2013
Mi nuevo linux Fedora!!
Por cuestiones de la vida me he movido a fedora, la verdad es que extraño un poco a Mint pero hay que seguir adelante en el camino me encontré con Yum extender, que me parece que va ser mi mejor amigo. Me encontré con gnome-shell y me divorcie a los pocos días, y ahora estoy conviviendo con KDE que me esta tratando bien.
Dejo una foto de mi escritorio:
Dejo links:
http://gomix.fedorapeople.org/software-management-guide/f18/html-single/
Dejo una foto de mi escritorio:
Dejo links:
http://gomix.fedorapeople.org/software-management-guide/f18/html-single/
martes, 2 de abril de 2013
Libros de programación gratuitos
Un montón de libros sobre programación y lenguajes lo encontraran en el siguiente link:
http://www.onlineprogrammingbooks.com/
http://www.onlineprogrammingbooks.com/
Getting Started with DB2 Express-C
DB2 Universal Database es el sistema de administración de bases de datos que brinda una plataforma de base de datos flexible y efectiva en costos para construir aplicaciones robustas de negocios on demand.
Esto es lo que nos indica IBM en su pagina, tambien existe una versión express de la base de datos llamada DB2 Express-C, esta buena, lo que quiero compartir es un libro gratuito sobre esta base.
Dejo link:
http://www.ibm.com/developerworks/wikis/display/DB2/FREE+Book-+Getting+Started+with+DB2+Express-C
lunes, 1 de abril de 2013
Visualizador de código Python online
Los que están aprendiendo a programar y los que estamos aprendiendo python, es de mucha ayuda ver que esta sucediendo cuando corremos el código. Les dejo un vizualisador en el que se puede ver los valores de las variables y como ejecuta el programa linea por linea.
Dejo una pantalla de ejemplo:
Dejo link:
http://pythontutor.com/visualize.html
Dejo una pantalla de ejemplo:
Dejo link:
http://pythontutor.com/visualize.html
doctest, Usando la documentación para testear.
Me encontré con este framework de python y la verdad que quede sorprendido, su facilidad de uso y pragmatismo. La idea es que cuando realizamos funciones debemos documentarlas, que no mejor que luego de documentarla dejar un ejemplo de como funciona y el resultado que devuelve la función. Bueno la idea de este framework es utilizar esta documentación para testear nuestra función.
Veamos un ejemplo:
""" This is the "example" module. The example module supplies one function, factorial(). For example, >>> factorial(5) 120 """ def factorial(n): """Return the factorial of n, an exact integer >= 0. >>> [factorial(n) for n in range(6)] [1, 1, 2, 6, 24, 120] >>> factorial(30) 265252859812191058636308480000000 >>> factorial(-1) Traceback (most recent call last): ... ValueError: n must be >= 0 Factorials of floats are OK, but the float must be an exact integer: >>> factorial(30.1) Traceback (most recent call last): ... ValueError: n must be exact integer >>> factorial(30.0) 265252859812191058636308480000000 It must also not be ridiculously large: >>> factorial(1e100) Traceback (most recent call last): ... OverflowError: n too large """ import math if not n >= 0: raise ValueError("n must be >= 0") if math.floor(n) != n: raise ValueError("n must be exact integer") if n+1 == n: # catch a value like 1e300 raise OverflowError("n too large") result = 1 factor = 2 while factor <= n: result *= factor factor += 1 return result if __name__ == "__main__": import doctest doctest.testmod()Como vemos en el ejemplo se creo una funcion factorial y se la documento con ejemplos de uso, luego al final de la función se indico que si se corre este modulo como programa principal, se corran los test. Por lo tanto si hacemos:
python example.py -v
La "-v" es para que doctest devuelva una salida. Con la ejecución de esta linea de código se correrán los ejemplos de la documentación devolviendo los siguientes valores:
Trying:
factorial(5)
Expecting:
120
ok
Trying:
[factorial(n) for n in range(6)]
Expecting:
[1, 1, 2, 6, 24, 120]
ok
Es genial!! Me parece una gran idea, que mal que no lo haya conocido antes. Existe un port para java que se llama doctestj; tendremos que probarlo.
Dejo link:
http://docs.python.org/3.3/library/doctest.html
https://code.google.com/p/doctestj/
sábado, 30 de marzo de 2013
Taller gratuito de introducción a Python
Este taller gratuito te servirá para dar los primeros pasos en Python, un lenguaje de programación multiplataforma y de propósito general que tiene diversas particularidades que lo hacen especial. Python es interpretado y está pensado para que tenga una sintaxis ligera y limpia, lo que lo hace sencillo de aprender.
Así comienza a describir el curso gratuito realizado por escuela It. Vamos a tener que inscribirnos, ojo comienza el 1 de abril.
Dejo link:
http://escuela.it/cursos/taller-python/
Así comienza a describir el curso gratuito realizado por escuela It. Vamos a tener que inscribirnos, ojo comienza el 1 de abril.
Dejo link:
http://escuela.it/cursos/taller-python/
jueves, 28 de marzo de 2013
putty y Xming, una potencia!!
Les explico en el trabajo tenemos varios linux y clientes windows (un clásico); y nos conectamos con ssh a los servers; ssh tiene la opción -x que permite desplegar aplicaciones gráficas en el cliente. Bueno si hacemos ssh -x en linux y queremos ejecutar por ejemplo firefox funciona excelentemente; pero si lo hacemos desde windows, no funciona y es esperable.
Por lo tanto hay que instalar Xming que es un permite ver ventanas de linux en windows. Es decir yo puedo utilizar nautilus desde mi ventana de windows y anda que da calambre.
Dejo link:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
http://sourceforge.net/projects/xming/
http://www.straightrunning.com/XmingNotes/
getVarName y para que quisiera saber el nombre de la variable?
Ojo lo que van a leer, no es real! No me tomen tan en serio. Se me ocurrió una idea bastante loca, pero va la tiro; a ver que opinión recibo. Porque algún lenguaje o uno nuevo crea o tiene un método que nos indique el nombre de la variable que usamos?
Onda:
String nombre = getVarName(pepe)
print(nombre) // Aca imprime pepe
Es una idea revolucionaria, pero para que la puedo llegar a usar?
Supongamos los mapas, que necesito una key para referenciar un valor bueno podría hacer algo así:
String variable1 = "hola mundo"
miMapa.put(getVarName(variable1), variable1)
Entonces cuando quiero saber el valor puedo hacer:
print(miMapa.get(getVarName(variable1))) // Acá imprimiría "hola mundo"
Esto a pesar que suene loco es bastante fácil de implementar con las macros del lenguaje. Se acuerdan de las macros? Las macros son instrucciones que le damos al compilador. Si nos fijamos en la wiki nos dira:
"Con el fin de evitar al programador la tediosa repetición de partes idénticas de un programa, los ensambladores y compiladores cuentan con macroprocesadores que permiten definir una abreviatura para representar una parte de un programa y utilizar esa abreviatura cuantas veces sea necesario. Para utilizar una macro, primero hay que declararla. En la declaración se establece el nombre que se le dará a la macro y el conjunto de instrucciones que representará."
Por ejemplo le podemos decir "che mira antes de compilar pasa por todo el código y donde veas getVarName(nombreDeUnaVariable) vos pone el string "nombreDeUnaVariable". Y listo!
Ahora llega el momento en que flasheo, que tal si se puede implementar orientado a objeto?? En este hipotético caso no se me ocurre una implementación. Pero supongamos que se pueda, puede ser un método de Object todos heredar de Object y listo. Lo bueno es que lo puedo sobrescribir. Por ejemplo quiero llenar otro mapa con objetos de la clase persona (supongamos) entonces puedo hacer esto.
class Persona
Integer id
String getVarName()
String varName = super.getVarName()
return varName + " " + id
end
En fin con esto puedo hacer algo así:
List personas = getPersonasFromDB();
for (Persona persona in personas)
mapaDePersonas.put(persona.getVarName(), persona)
En realidad podemos modificar el mapa para que haga mapaDePersonas.put(persona) y ya nos tome el nombre de la variable...
for (String p in mapaDePersonas.keys())
print(p) // aca imprime persona 1, persona 2, etc...
Y lo mejor de todo es que podria hacer:
class Persona
String getVarName()
String varName = super.getVarName()
return varName.changeCar("_", " ").upperFirstLetter() + " es mi nombre!"
end
piñon_fijo = Persona.new()
print(piñon_fijo) // y aca imprime "Piñon fijo es mi nombre!"
Que les parece la idea?? Saben si a alguien se le ocurrió antes? se les ocurre otro uso? Les gusto el ejemplo de Piñon Fijo??
Onda:
String nombre = getVarName(pepe)
print(nombre) // Aca imprime pepe
Es una idea revolucionaria, pero para que la puedo llegar a usar?
Supongamos los mapas, que necesito una key para referenciar un valor bueno podría hacer algo así:
String variable1 = "hola mundo"
miMapa.put(getVarName(variable1), variable1)
Entonces cuando quiero saber el valor puedo hacer:
print(miMapa.get(getVarName(variable1))) // Acá imprimiría "hola mundo"
Esto a pesar que suene loco es bastante fácil de implementar con las macros del lenguaje. Se acuerdan de las macros? Las macros son instrucciones que le damos al compilador. Si nos fijamos en la wiki nos dira:
"Con el fin de evitar al programador la tediosa repetición de partes idénticas de un programa, los ensambladores y compiladores cuentan con macroprocesadores que permiten definir una abreviatura para representar una parte de un programa y utilizar esa abreviatura cuantas veces sea necesario. Para utilizar una macro, primero hay que declararla. En la declaración se establece el nombre que se le dará a la macro y el conjunto de instrucciones que representará."
Por ejemplo le podemos decir "che mira antes de compilar pasa por todo el código y donde veas getVarName(nombreDeUnaVariable) vos pone el string "nombreDeUnaVariable". Y listo!
Ahora llega el momento en que flasheo, que tal si se puede implementar orientado a objeto?? En este hipotético caso no se me ocurre una implementación. Pero supongamos que se pueda, puede ser un método de Object todos heredar de Object y listo. Lo bueno es que lo puedo sobrescribir. Por ejemplo quiero llenar otro mapa con objetos de la clase persona (supongamos) entonces puedo hacer esto.
class Persona
Integer id
String getVarName()
String varName = super.getVarName()
return varName + " " + id
end
En fin con esto puedo hacer algo así:
List personas = getPersonasFromDB();
for (Persona persona in personas)
mapaDePersonas.put(persona.getVarName(), persona)
En realidad podemos modificar el mapa para que haga mapaDePersonas.put(persona) y ya nos tome el nombre de la variable...
for (String p in mapaDePersonas.keys())
print(p) // aca imprime persona 1, persona 2, etc...
Y lo mejor de todo es que podria hacer:
class Persona
String getVarName()
String varName = super.getVarName()
return varName.changeCar("_", " ").upperFirstLetter() + " es mi nombre!"
end
piñon_fijo = Persona.new()
print(piñon_fijo) // y aca imprime "Piñon fijo es mi nombre!"
Que les parece la idea?? Saben si a alguien se le ocurrió antes? se les ocurre otro uso? Les gusto el ejemplo de Piñon Fijo??
Suscribirse a:
Entradas (Atom)