Los chicos de Tekpub han publicado un video muy recomendable en el que se muestran alguna de las extrañas formas de actuar de MySQL y como Postgres resuelve esos problemas. El video está en ingles, pero tranquilidad que se entiende perfectamente los casos mostrados.
Personalmente, en mi uso de MySQL, mi mayor queja es respecto a los mensajes de error. Estos muchas veces son muy ambiguos y no permiten encontrar el error a menos que releas todo el código.
miércoles, 12 de diciembre de 2012
martes, 11 de diciembre de 2012
Leer HTML en Android
Les dejo el código que utilice para leer el HTML de una URL en Android. En teoría debería funcionar también en Java sin mayores modificaciones, pero no lo he probado.
Requiere el permiso de android.permission.INTERNET.
public static String getHTML(String url) throws IOException {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
String html = "";
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder str = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
str.append(line);
}
in.close();
html = str.toString();
return html;
}
Requiere el permiso de android.permission.INTERNET.
Certificado Java
Hace unos meses atrás aprobé la certificación Java (Java Standard Edition 6 Programmer Certified Professional Exam English) y he decidido relatar mi experiencia.
Libros de ayuda
Básicamente utilice tres guías de estudio:
SCJP Sun Certified Programmer for Java 6 - Completísima guía de estudio con todos los temas que podrían venir. Lo único malo es que está en ingles.
Resumen - Guía excelentemente resumida del anterior y en español.
OCP Java SE 6 Programmer Practice Exams - Guía de ejercicios.
¿Dónde programar el examen?
Yo compre el derecho de examen en PearsonVue y no tuve ningún problema. En ella puedes seleccionar fácilmente dónde y cuándo dar el examen en tu localidad. Lo único malo es que debes contar con tarjeta de crédito para realizar la compra.
Costo del examen
En PearsonVue puedes adquirir el derecho de examen a 150 dolares.
La preparación
Lee ambos libros y luego haz los ejercicios de la guía de ejercicios. Son de lejos mucho más difíciles que las preguntas del examen.
¿Qué recibes al aprobar?
Recibes obviamente el cartón que prueba que haz pasado el examen y una tarjeta metálica con tu nombre y el certificado alcanzado. La entrega demora alrededor de un mes.
El examen
El examen toma alrededor de 150 minutos, son si mal no recuerdo 60 preguntas y apruebas con el 61% de respuestas correctas. El examen consta en su mayoría de selección múltiple y si mal no recuerdo no hay preguntas de Drag&Drop. A diferencia de la guía de ejercicios, existen muy pocas preguntas donde debas marcar más de una respuesta a la vez, lo cual lo vuelve mucho más fácil.
Suerte, porque nunca viene mal aunque estudies mucho.
PD.- NO TE SALTEES TEMAS, se que aprender expresiones regulares y comandos de compilador de java es un rollo, pero sí vienen, al menos un par de preguntas.
Libros de ayuda
Básicamente utilice tres guías de estudio:
SCJP Sun Certified Programmer for Java 6 - Completísima guía de estudio con todos los temas que podrían venir. Lo único malo es que está en ingles.
Resumen - Guía excelentemente resumida del anterior y en español.
OCP Java SE 6 Programmer Practice Exams - Guía de ejercicios.
¿Dónde programar el examen?
Yo compre el derecho de examen en PearsonVue y no tuve ningún problema. En ella puedes seleccionar fácilmente dónde y cuándo dar el examen en tu localidad. Lo único malo es que debes contar con tarjeta de crédito para realizar la compra.
Costo del examen
En PearsonVue puedes adquirir el derecho de examen a 150 dolares.
La preparación
Lee ambos libros y luego haz los ejercicios de la guía de ejercicios. Son de lejos mucho más difíciles que las preguntas del examen.
¿Qué recibes al aprobar?
Recibes obviamente el cartón que prueba que haz pasado el examen y una tarjeta metálica con tu nombre y el certificado alcanzado. La entrega demora alrededor de un mes.
El examen
El examen toma alrededor de 150 minutos, son si mal no recuerdo 60 preguntas y apruebas con el 61% de respuestas correctas. El examen consta en su mayoría de selección múltiple y si mal no recuerdo no hay preguntas de Drag&Drop. A diferencia de la guía de ejercicios, existen muy pocas preguntas donde debas marcar más de una respuesta a la vez, lo cual lo vuelve mucho más fácil.
Suerte, porque nunca viene mal aunque estudies mucho.
PD.- NO TE SALTEES TEMAS, se que aprender expresiones regulares y comandos de compilador de java es un rollo, pero sí vienen, al menos un par de preguntas.
lunes, 10 de diciembre de 2012
Bloques de código en Blogger
Para aquellos como yo que tienen un blog de programación en el que deben escribir bloques de código les dejo este pequeño tutorial.
1) Entrar a la opción de Plantillas de tu blog.
2) Click en edición de HTML.

3) Agregar el siguiente código justo encima de </head>
4) Debería quedar algo así.

5) Para agregarlo en tu post, entrar al modo HTML de la edición del mismo:

6) Y agregar el código que deseas mostrar de la siguiente manera:
7) Y eso es todo. El ejemplo se vera así:
Note: Recordar que en caso de utilizar carácteres especiales de HTML como < y > hay que primero decodificarlo. Puedes usar esta página para ello: http://www.opinionatedgeek.com/dotnet/tools/htmlencode/Encode.aspx
Lo malo es que también decodifica las comillas simples y dobles, por lo que requiere volver a reemplazar.
Fuente: CraftyFella's Blog - Syntax Highlighting with Blogger Engine
1) Entrar a la opción de Plantillas de tu blog.

3) Agregar el siguiente código justo encima de </head>
<link <link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> <link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'></script> <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'></script> <script language='javascript'> SyntaxHighlighter.config.bloggerMode = true; SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf'; SyntaxHighlighter.all(); </script>
4) Debería quedar algo así.

5) Para agregarlo en tu post, entrar al modo HTML de la edición del mismo:

6) Y agregar el código que deseas mostrar de la siguiente manera:
// Comment
<pre class="brush: csharp">// Comment
public class Testing {
public Testing() {
}
public void Method() {
/* Another Comment
on multiple lines */
int x = 9;
}
}
</pre>
Donde brush es el lenguaje del código. entre los que he usado están java, csharp y html.7) Y eso es todo. El ejemplo se vera así:
// Comment
public class Testing {
public Testing() {
}
public void Method() {
/* Another Comment
on multiple lines */
int x = 9;
}
}
Note: Recordar que en caso de utilizar carácteres especiales de HTML como < y > hay que primero decodificarlo. Puedes usar esta página para ello: http://www.opinionatedgeek.com/dotnet/tools/htmlencode/Encode.aspx
Lo malo es que también decodifica las comillas simples y dobles, por lo que requiere volver a reemplazar.
Fuente: CraftyFella's Blog - Syntax Highlighting with Blogger Engine
Cargar una imagen desde URL en Android
Hace poco decidí a programar en Android para crear una App que requería cargar imágenes desde URL. Para todo aquel que tuviera ese problema les dejo el código de como pasarlo a Bitmap y así poder usarlo más cómodamente para por ejemplo usarlo en un ImageView.
Primero creamos el método genérico que se encargará de recepcionar el InputStream que le mandemos. Esto lo hago para que lo podamos reutilizar con otros InputStream (por ejemplo una carga de archivo local).
En realidad con solo poner BitmapFactory.decodeStream(instream) ya se decodifica el InputStream, pero primero hago una operación para re-escalar la imagen al ancho requerido de la imagen a mostrar ya que si cargas una cantidad regular de imágenes puedes provocar un OutMemoryException que en español sería saturar la memoria. Igualmente puedes provocar un OutMemoryException si cargas muchas imagenes, pero en teoría de esta forma reducirás las probabilidades y aún más si es que cargas imágenes muy grandes.
Luego de eso creamos el método que se encargará de crear el InputStream que leerá la URL que le enviemos.
Bueno, si a ti no te preocupa saturar la memoria puedes eliminar lo del re-escalado. El método quedaría así:
Primero creamos el método genérico que se encargará de recepcionar el InputStream que le mandemos. Esto lo hago para que lo podamos reutilizar con otros InputStream (por ejemplo una carga de archivo local).
public static Bitmap decodeFile(InputStream instream, int reqWidth)
throws IOException {
// Decodificar tamaño de imagen
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(instream, null, o);
final int width = o.outWidth;
final int height = o.outHeight;
// Find the correct scale value. It should be the power of 2.
int inSampleSize = 1;
if (width > reqWidth) {
inSampleSize = Math.round((float) width / (float) reqWidth);
}
// Decodificar con inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = inSampleSize;
instream.reset();
return BitmapFactory.decodeStream(instream, null, o2);
}
En realidad con solo poner BitmapFactory.decodeStream(instream) ya se decodifica el InputStream, pero primero hago una operación para re-escalar la imagen al ancho requerido de la imagen a mostrar ya que si cargas una cantidad regular de imágenes puedes provocar un OutMemoryException que en español sería saturar la memoria. Igualmente puedes provocar un OutMemoryException si cargas muchas imagenes, pero en teoría de esta forma reducirás las probabilidades y aún más si es que cargas imágenes muy grandes.
Luego de eso creamos el método que se encargará de crear el InputStream que leerá la URL que le enviemos.
public static Bitmap loadFromUrl(String link, int reqWidth)
throws IOException, URISyntaxException {
HttpGet httpRequest = null;
httpRequest = new HttpGet(link);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
InputStream instream = bufHttpEntity.getContent();
return decodeFile(instream, reqWidth);
}
Bueno, si a ti no te preocupa saturar la memoria puedes eliminar lo del re-escalado. El método quedaría así:
public static Bitmap loadFromUrl(String link) throws
IOException, URISyntaxException {
HttpGet httpRequest = null;
httpRequest = new HttpGet(link);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
InputStream instream = bufHttpEntity.getContent();
return BitmapFactory.decodeStream(instream);
}
Suscribirse a:
Comentarios (Atom)
