tag:blogger.com,1999:blog-3123138087273341462024-03-18T22:07:59.225-07:00BlogBlog-WhoisEl programador Gargolanecronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.comBlogger168125tag:blogger.com,1999:blog-312313808727334146.post-23994696423017211352017-08-29T14:32:00.001-07:002017-08-29T14:32:14.068-07:00Path to become a Master in CSSo I think I'm going to restart this blog and revive it with a couple of more informal kind of posts. Since right now I'm taking around 2 years to focus only in a master degree, it seems obvious that I keep a historical blog of what I'm doing.<br />
<br />
A bit of background about how I ended up here, I was fortunate enough to get a Fulbright scholarship and come to study in the US, for those who do not know about the Fulbright program I highly encourage you to take sometime to read about if you are planning to come study in a US university. So to make the story a bit short I picked UB as much as UB picked me, and so far it has been a roller coaster of emotions (I'm sure it will continue to be as the semester progress), I found the university incredible diverse and with lots of different programs and clubs for student that is hard to get bored.<br />
<br />
The semester basically started and I've picked Distributed System, Computer Vision, Algorithm for Modern computer System and Modern network concepts as my four main courses. I'll try to keep writing on a regular basis on how each course progress but so far so good, I've taken Computer Vision and even though I don't have a solid knowledge of Matlab I was able to pick it up. Distributed System is also a field that I have not been able to study enough even though I've done concurrency in Java I never quite program in a distributed system myself.<br />
<br />
Oh it's almost time for classes, I'll be back.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://media.bizj.us/view/img/2690091/suny-ub-logo*1200xx1200-675-0-63.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="450" data-original-width="800" height="180" src="https://media.bizj.us/view/img/2690091/suny-ub-logo*1200xx1200-675-0-63.jpg" width="320" /></a></div>
<br />necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-41033086769341988932014-12-06T00:35:00.002-08:002014-12-06T00:35:31.344-08:00SetAlpha despreciado en android para imageview pero……Por aca haciendo extendiendo el ImageView y haciendo una animación basica me encuentro con que <a href="http://developer.android.com/reference/android/widget/ImageView.html#setAlpha(int)">setAlpha(int)</a> esta despreciado, esta bien ¿cierto?, lo que no comprendo es que dentro del codigo el nuevo <a href="http://developer.android.com/reference/android/widget/ImageView.html#setImageAlpha(int)">setImageAlpha</a> utiliza internamente el metodo despreciado <b>setAlpha </b>sin absolutamente ningun cambio.<br />
<br />
Se ve algo así, pero puedes verlo por ti mismo en la clase <a href="https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/ImageView.java">ImageView.java</a><br />
<br />
<br />
<pre class="brush: java"> /** * Sets the alpha value that should be applied to the image.
* @param alpha the alpha value that should be applied to the image
* @see #getImageAlpha()
*/
@RemotableViewMethod
public void setImageAlpha(int alpha) {
setAlpha(alpha);
}
/**
* Sets the alpha value that should be applied to the image.
*
* @param alpha the alpha value that should be applied to the image
*
* @deprecated use #setImageAlpha(int) instead
*/
@Deprecated
@RemotableViewMethod
public void setAlpha(int alpha) {
alpha &= 0xFF; // keep it legal
if (mAlpha != alpha) {
mAlpha = alpha;
mColorMod = true;
applyColorMod();
invalidate();
}
}</pre>
<div>
<br /></div>
necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-18090733139884842692013-11-16T16:55:00.002-08:002013-11-18T16:01:56.932-08:00Pozool Punto de venta para bares y restaurantes<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq8sE3poJAVzpM3ZWVHIl9g2xfaeji7OTiGTaMjfVwebxYiRg6DTDV4Ec3zsyuZxKd8b6IMBy8z14_Uh0MJUCRnszuD1BIRlgcf63YHg2Xj4IW4xlXEKcQh4vyWXOsKMbcw0RiWgQcJA8O/s1600/1382171_215707095263658_1557785503_n.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq8sE3poJAVzpM3ZWVHIl9g2xfaeji7OTiGTaMjfVwebxYiRg6DTDV4Ec3zsyuZxKd8b6IMBy8z14_Uh0MJUCRnszuD1BIRlgcf63YHg2Xj4IW4xlXEKcQh4vyWXOsKMbcw0RiWgQcJA8O/s200/1382171_215707095263658_1557785503_n.png" width="200" /></a></div>
<br />
Durante los últimos meses he dedicado mi esfuerzo a la creación de una solución que facilite a Bares y restaurantes la administración de sus locales, particularmente aquellos que son parte de la pequeña y mediana industria.<br />
<br />
<h3>
¿Proposito de Pozool?</h3>
<div>
Para los locales que inician o que tienen presupuestos limitados, resulta un reto la adquisición de tecnología, y optan por utilizar procesos manuales para facturación, y con buenas razones dado que los puntos de ventas rondan precios que no están al alcance de un negocio pequeño o de mediano tamaño.</div>
<div>
<br /></div>
<div>
Pozool soluciona este problema particular colocándose como una aplicación gratuita en el playstore y llegando a la mayor cantidad de dispositivo. En vista de la alta penetración de dispositivos y diversidad de dispositivos Android la plataforma es perfecta para adaptarse a diferentes presupuestos.</div>
<div>
<br /></div>
<div>
Para mas detalles de Pozool visita el <a href="http://pozool.com/">sitio oficial</a> o <a href="http://atech-mobile.com/">Atech Mobile</a> la empresa detrás de esta increíble aplicación.</div>
necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-32208528626191866672013-01-05T15:39:00.002-08:002013-01-05T15:39:34.973-08:00Perspectiva de Java, Servicios web y Jersey Siempre he abogado por Java, es uno de los lenguajes mas robustos y faciles de entender si vienes de la lineas de C o C++. Muchas de sus caracteristicas han sido emuladas por la familia de lenguajes de .NET. Desde AWT y Swing hasta JSP, Servlet y JSF, pasando por Android java me ha seguido (ó yo a el) sin embargo hay un punto donde tengo que diferir de la forma en como el lenguaje no ha evolucionado y adaptado a las plataformas corrientes.<br />
<br />
Hoy me encuentro intentando crear un API REST para java, la convencion obviamente es inclinarse a JAX-RS y hay suficientes implementaciones para hacer un par de libros al respecto. Sin embargo aqui yace e problema tantos APIs y framework de Java con documentacion a media y poca atencion sin comunidad sin soporte son inservibles.<br />
<br />
<b><span style="font-size: large;">No pierdas la fe</span></b><br />
<b><span style="font-size: large;"><br /></span></b>
Desarrollo y las ciencias de la computacion no es una cuestion de fe, sino de pragmatismo. Me resulta dificil que en pleno 2013 Java no haya introducido una forma de dinamismo sin tener que recurrir a Groovy o Scala. La simple funcion de serializar y deserializar en diferentes contenedores es bizarra. Y se ha fragmentado entre la nueva versiones y las vieja estable. Tal es el caso de Jersey el cual existen diferentes versiones y diferente articulos al respecto, que si bien resultan buenos no son completos. Falta, falta algo y lo que falta es integracion, una cierta integracion que he logrado ver en python o en perl. Son plataformas que prometen algo mas que especificaciones complejas y un gran numero de standard. Una burocratica forma de lanzar nuevas caracteristicas en los lenguajes; que nos han retrasado al menos unos 8 años con respecto a .NET el competidor mas cercano. Aqui estan las 3 razones por las cuales java me ha decepcionado.<br />
<br />
<br />
<b>Sin Delegaciones, Sin closures</b><br />
<b><br /></b>
Esto esta en el wishlist para java 8, la habilidad de podeer delegar o pasar funciones como parametros para ser ejecutadas luego por la JVM en runtime. Lo mas cercano a esto es intentar enviar un objeto que implemente una interfaz pero no es eso lo que quiero. Quizas con refleccion podrias hacer algo similar pero se vuelve tan engorroso que ni siquiera vale la pena. Funciones dinamicas, on-fly olvidate de eso en Java, si no existe al momento de compilar no lo vas a poder usar.<br />
<br />
<b>Que paso spring antes eras chevere! has cambiado</b><br />
<b><br /></b>
La eterna batalla entre Java EE y spring dos enfoques que se ha vuelto una pesadilla para quien quiera estar en la Web con java. Que camino tomar, donde ir? y por que? Es cierto que python tiene muchas formas tambien de hacer las cosas pero no es necesaria tanta engorrosa configuracion ni tampoco saber si un contenedor acepta EE 6 o EE 5. Hoy Spring es un nido de proyectos que no tienen que ver con IoC tanto como antes, y con complejas caracteristica que ya no comprendo.<br />
<br />
<b>Almacenamiento de datos, ORM, hibernate y mas.</b><br />
<b><br /></b>
El resto lo puedo pasar pero la impractica medicina para almacenar datos, agreguemos el hecho que java no permite crear campos on-fly, y entre sessiones, transacciones, attach y detach; puede ser extremadamente confuso intentar hacer un simple join. El framework te permite hacer consultas a traves de HQL lo cual no tiene mucho sentido si queires alejarte de SQL, tambien puedes utilizar Criteria pero es mas dificil entender una engorrosa linea de criteria con clases limit y condiciones, que ejecutar una consulta SQL.<br />
<br />
<br />
No me mal interpreten aun creo que java es un excelente lenguaje que esta pasando por un mal momento, Android es hoy en dia uno de los pilares que mantiene a java en su gloria y ha hecho un buen trabajo con ello. Por mi parte buscare una solucion a mi problema en otra plataforma que resulte mas facil y conveniente.<br />
<br />
<b><br /></b>
<br />
<br />
<br />
<b><br /></b>
<b><br /></b>
<br />
<br />
<br />
<br />
<br />
<br />necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com2tag:blogger.com,1999:blog-312313808727334146.post-15350766504131265372012-11-17T15:30:00.001-08:002012-11-17T15:30:45.493-08:00Long time no post, I'm backLong time withouth making a post here, well what can I say…… I've been busy (that's code for lazy). So I will try to write some article probably regarding android in the next weeks before the end of the year.<br />
<br />
Other than that …… I wish you happy coding!!necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-40361795515075477842012-03-21T18:08:00.007-07:002012-03-21T20:20:00.326-07:00Como resolver el error “"an ajax http request terminated abnormally"? en Drupal 7Recientemente estuve trabajando en uno de mis nuevos sitios con Drupal 7. Es un sitio nuevo y el cambio consistio simplemente en remover el www del URL. Fui al .htaccess y simplemente descomente las lineas en cuestion.<br /><br /># To redirect all users to access the site WITHOUT the 'www.' prefix,<br /># (http://www.example.com/... will be redirected to http://example.com/...)<br /># uncomment the following:<br />RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]<br />RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]<br /><br />Todo bien, el URL se carga sin el www, chequee mi sitio el cual tiene hablitado https. Todo excelente. Bueno, mas tarde tenia que hacer un cambio en mi carousel view. Nada importante y entonces aparece el siguiente mensaje<br /><br /><span style="font-weight: bold;">an ajax http request terminated abnormally</span><br /><br />que raro..debe de ser el browser, mismo efecto en todos incluso safari. Que hice? el unico cambio relacionado fue remover el www del URL? haciendo una peque<span class="st"><em>ñ</em></span>a busqueda me encontre este articulo en ingles [1]<br /><br />Aplique los cambios sugeridos en el sitio y todo perfecto. Basicamente el problema consiste en que el core de drupal no puede determinar the base_url. Para arreglar esto debes de hacer los siguientes pasos:<br /><br />1. Abrir /sites/default/settings.php<br />2. Ir a # $base_url = 'https://www.example.com';<br />3. En mi caso estoy utilizando https y removi el www entonces cambie a lo siguiente:<br /><span style="font-weight: bold;">$base_url = 'https://example.com'; </span> //NO trailing SLASH!<br />4. Salvar el archivo, podria ser util limpiar la cache de drupal, en mi caso no fue necesario y resolvio mi problema<br /><br />Gracias a Shine Sudarsan por ese peque<span class="st"><em>ñ</em></span>o articulo que me ahorro tiempo con su solucion.<br /><br /><br /><br />Bibliografia<br /><br />[1] <a href="http://www.prasinotech.com/content/how-resolve-ajax-http-request-terminated-abnormally-error-drupal">http://www.prasinotech.com/content/how-resolve-ajax-http-request-terminated-abnormally-error-drupal</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-85896430081215011452012-02-08T19:16:00.000-08:002012-02-08T19:16:14.946-08:00Sitio FCYS-Nicaragua igual de bonito [Facepalm]En diciembre me tome un tiempo para <strike>reirme</strike> criticar el sitio de la facultad de ciencias y sistemas de la Universidad nacional de Ingenieria la cual es sin duda lider en ciencia y tecnologia. Pero bueno el caso es que desde el post se han hecho "muchos" cambios y esfuerzos para mejorar la apariencia y aqui lo demuestro:<br />
<br />
Antes se veia así:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUyDijJE1XhHa2U80gnIT0S9AckcG8LMrDXDD5FKI7C9Q9kjMFPkK22GBJLToibGHM8P0Y59cYlvIXCeaJU7nCFAxqMdzRC5ZqxMum08a2-xiSU4OhtmuEHd_38m6QYwDByXIjZsIa5xzj/s1600/Screen+Shot+2011-12-04+at+9.47.04+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="171" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUyDijJE1XhHa2U80gnIT0S9AckcG8LMrDXDD5FKI7C9Q9kjMFPkK22GBJLToibGHM8P0Y59cYlvIXCeaJU7nCFAxqMdzRC5ZqxMum08a2-xiSU4OhtmuEHd_38m6QYwDByXIjZsIa5xzj/s320/Screen+Shot+2011-12-04+at+9.47.04+AM.png" width="320" /></a></div>
Y ahora taran:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgJdBXdvvHSoq9fEP79EgogyS4pnylzjbzHXqZFCpc3PC7i295V1O1Ayzw0LMXQt6eVOwBBB72yfDpgTlo4AIzyXfMeMoPfHNT0tiiynGql03lYh-kIDj_FaL3-B16iMc1AYHWoJDfa08m/s1600/rukiddin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgJdBXdvvHSoq9fEP79EgogyS4pnylzjbzHXqZFCpc3PC7i295V1O1Ayzw0LMXQt6eVOwBBB72yfDpgTlo4AIzyXfMeMoPfHNT0tiiynGql03lYh-kIDj_FaL3-B16iMc1AYHWoJDfa08m/s320/rukiddin.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div>
<br /></div>
<div>
¿No es genial?, es por eso que he decidido hacer una serie de articulos <strike>troleando</strike> apuntando lo que a mi parecer son errores del sitio.</div>
<div>
<br /></div>
<div>
<b><span style="font-size: large;">Facepalm para el sitio</span></b><br />
<b><span style="font-size: large;"><br /></span></b><br />
<b>Dr House ¿que le parece si hacemos la pagina solo con HTML?</b></div>
<div>
<b><span style="font-size: large;"><br /></span></b></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhha4Y9zW4_YCi4GglsToOnYlLd06ghPkntAmKgRbObUygFCtw_m5847hIn5R51wOvsNYrON8m-NTZMXFvTwT04Fbv43yHKtXNl0Fh5yZIoiBxWJN3r0VLwhBewhh7V9fN6moIwnyb0vROl/s1600/FP1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhha4Y9zW4_YCi4GglsToOnYlLd06ghPkntAmKgRbObUygFCtw_m5847hIn5R51wOvsNYrON8m-NTZMXFvTwT04Fbv43yHKtXNl0Fh5yZIoiBxWJN3r0VLwhBewhh7V9fN6moIwnyb0vROl/s320/FP1.png" width="320" /></a></div>
</div>
<div>
<div class="separator" style="clear: both; text-align: -webkit-auto;">
<br /></div>
<div class="separator" style="clear: both; text-align: -webkit-auto;">
<b>¿Homero que te parece la expectacular combinacion de colores?</b></div>
<div class="separator" style="clear: both; text-align: -webkit-auto;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz20kQ0NuTDuxNS75piH_rOj0yJvLFlyk6vzYEQKvNQIZKxrEGauQmVYnLJlwSAZPU7r1rDYnbz6KVJ2okRaQ6olt8r31UrVEkOhDto7lRh_7QXexDCbdGnuGZ4yp4PnWh3NGdz60tyWAR/s1600/FP2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz20kQ0NuTDuxNS75piH_rOj0yJvLFlyk6vzYEQKvNQIZKxrEGauQmVYnLJlwSAZPU7r1rDYnbz6KVJ2okRaQ6olt8r31UrVEkOhDto7lRh_7QXexDCbdGnuGZ4yp4PnWh3NGdz60tyWAR/s320/FP2.png" width="320" /></a></div>
<br />
<br />
<b>¿Lord Zed que te parecio la navegacion del sitio?</b><br />
<b><br /></b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK6XdbgawhyphenhyphenjUm0WCL1a7nx-deTm8QphUPBEAIebL_DwSy22wPPglLQRS9e6fABfb2RHMWuGilA3EWFGADRn0twQ8crbC1vZcWvDbf66gtLuIVmk226r3F9ZAUPXWpebbbl9bPmrWNsS9L/s1600/Screen+Shot+2012-02-08+at+8.38.42+PM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK6XdbgawhyphenhyphenjUm0WCL1a7nx-deTm8QphUPBEAIebL_DwSy22wPPglLQRS9e6fABfb2RHMWuGilA3EWFGADRn0twQ8crbC1vZcWvDbf66gtLuIVmk226r3F9ZAUPXWpebbbl9bPmrWNsS9L/s320/Screen+Shot+2012-02-08+at+8.38.42+PM.png" width="126" /></a></div>
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3PhVU2Q8VzisCotP5dazRHHLwf7zcKHn7NFNeXzHCycocA0bFOtt4OeXEtexSsQx4SmXOKlPd5e3_kBVZn5IZ2mOBXEORTDHazeLSVl0wTO8mODlu0jBWG_92qMCPQmu5H0otsS2f5BsB/s1600/FP3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3PhVU2Q8VzisCotP5dazRHHLwf7zcKHn7NFNeXzHCycocA0bFOtt4OeXEtexSsQx4SmXOKlPd5e3_kBVZn5IZ2mOBXEORTDHazeLSVl0wTO8mODlu0jBWG_92qMCPQmu5H0otsS2f5BsB/s1600/FP3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3PhVU2Q8VzisCotP5dazRHHLwf7zcKHn7NFNeXzHCycocA0bFOtt4OeXEtexSsQx4SmXOKlPd5e3_kBVZn5IZ2mOBXEORTDHazeLSVl0wTO8mODlu0jBWG_92qMCPQmu5H0otsS2f5BsB/s320/FP3.png" width="320" /></a></div>
<br />
<br />
La mayoria de los enlaces redirigen a /# asi que solo sirven para refrescar... son enlaces muertos eso te da menos en busquedas organicas sin mencionar que no comprendo la navegacion.<br />
<br />
<br />
<b>Sr Picollo, ¿que parece si ponemos <a href="http://www.infolinks.com/">infolinks</a> para hacer algo de $?</b><br />
<b><br /></b></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixBU_PD3I49yKcGvl7ydkiLtrI2cLfEiDe-EoEzsxTMGUnzN_Kkxn0G38kaatAjAjGM2XWrat20RRN_AcMwqYArvoyUY8GCG-WPHyx_kZKMy6eDaa9gKFHJ_uZCLj5kSofn6vivEk0dxUy/s1600/FP4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixBU_PD3I49yKcGvl7ydkiLtrI2cLfEiDe-EoEzsxTMGUnzN_Kkxn0G38kaatAjAjGM2XWrat20RRN_AcMwqYArvoyUY8GCG-WPHyx_kZKMy6eDaa9gKFHJ_uZCLj5kSofn6vivEk0dxUy/s320/FP4.png" width="320" /></a></div>
<br />
<i>Si claro la pagina no tiene scripts por si mismo, nada de JS pero si tiene script de infolinks para ser plata extra. Bravo!</i><br />
<b><br /></b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUk5rrEdDo5Bx5-Itx2BNYKvE7d0u1IqD7UazhMrHZYyFCNcGpgyRur1DiLBvd6AjKfgLdwDCJf_1xJ1oZW8jXj4a8torotM4X6utOUWcJ1NyOtIiXoN6rD1Fv7LeasQ-NfZ2Ii0Iv1z_C/s1600/Screen+Shot+2012-02-08+at+8.50.02+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUk5rrEdDo5Bx5-Itx2BNYKvE7d0u1IqD7UazhMrHZYyFCNcGpgyRur1DiLBvd6AjKfgLdwDCJf_1xJ1oZW8jXj4a8torotM4X6utOUWcJ1NyOtIiXoN6rD1Fv7LeasQ-NfZ2Ii0Iv1z_C/s320/Screen+Shot+2012-02-08+at+8.50.02+PM.png" width="320" /></a></div>
<b><br /></b><br />
<b><br /></b><br />
<b>Ademas vamos a publicitar la Maestria Informatica Empresarial!</b><br />
<b><br /></b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTs6gQMlkO1smUMfJjOLtEpggULpFgNfJFKxqU4GgCVsAIEyZdX8d8ujeL0_g7b5isChw8RZUNKHk1kt-3ZPmkfqmuvzOq-iZYQAbbJcuD8mGng9K9vpDC0haTll3lJa4Fe7wENWNfrrs-/s1600/Screen+Shot+2012-02-08+at+9.07.14+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTs6gQMlkO1smUMfJjOLtEpggULpFgNfJFKxqU4GgCVsAIEyZdX8d8ujeL0_g7b5isChw8RZUNKHk1kt-3ZPmkfqmuvzOq-iZYQAbbJcuD8mGng9K9vpDC0haTll3lJa4Fe7wENWNfrrs-/s320/Screen+Shot+2012-02-08+at+9.07.14+PM.png" width="320" /></a></div>
<b><br /></b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1d1uqnb8LiHhgFrbPUXiu2wY_cn_YDoyaOlxNlHcOXWNgC2AzJ5j954biDyKFhPHR0_X2mMimR-4wYDcT9o_pxHvdrgaYlRb0iMLoCgcPJw-MCDlrYEsdozo8pUmv3RZGDaHKpBtTHe7z/s1600/FP5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1d1uqnb8LiHhgFrbPUXiu2wY_cn_YDoyaOlxNlHcOXWNgC2AzJ5j954biDyKFhPHR0_X2mMimR-4wYDcT9o_pxHvdrgaYlRb0iMLoCgcPJw-MCDlrYEsdozo8pUmv3RZGDaHKpBtTHe7z/s320/FP5.png" width="320" /></a></div>
<b><br /></b><br />
<br />
<b><br /></b></div>
<div>
<br /></div>
<div>
<hr />
<i>En lo personal yo he hecho muchas cosas erradas(demasiadas creo) y las sigo haciendo.… pero intento que no vean la luz del Dia, tampoco fui un alumno clase A pero tengo una obligación moral con la facultad para <strike>trolear</strike> exponer lo que creo que están haciendo mal.</i></div>
<div>
<br /></div>
<div>
<br /></div>necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com2tag:blogger.com,1999:blog-312313808727334146.post-33697146418129568252011-12-30T18:56:00.000-08:002011-12-31T14:00:21.222-08:00Se fue 2011, Bienllegada de 2012<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-rzVV8sScj28/Tv-F3XcCsbI/AAAAAAAAA8Y/h8B3t6W7fiU/s1600/2012.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="201" src="http://2.bp.blogspot.com/-rzVV8sScj28/Tv-F3XcCsbI/AAAAAAAAA8Y/h8B3t6W7fiU/s320/2012.jpg" width="320" /></a></div>
Ahora que finaliza el año, es el constante tiempo de reflexión de todo lo que ha sucedido durante este 2011, que para bien o para mal ya concluyo, lo recordare un año de idas y venidas, que me dejo nuevas y excelentes amistades; invaluable experiencia y conocimiento, pero sobre todo me regalo un año mas de vida.<br />
Hoy 31 de Diciembre de 2011, a pocas horas de concluir el año me siento a pensar lo que vivi, pero mas pienso en lo que me espera, en lo que nos espera. Sí en este funesto 2011 que se nos llevo a muchos faros, Columbo, Steve Jobs, Dennies Ritchie y Mcarthy.<br />
<br />
No olvides tampoco este 2011 que se acabo el mundo dos veces :D, y que tambien fue el año 11:11:11 11:11:11 que bien espero que hayas disfrutado ese segundo.<br />
<br />
Este 2011 cometimos errores, pero suelo pensar que cometemos los errores correctos, esos errores que te enseñan por que quien no comete errores no aprende y no vive, esos errores te permiten ser quien eres hoy, y de no cometerlos ¿quien serias? ¿quienes seriamos?.<br />
<br />
Por mi parte siempre publico la lista del año pasado con lo que quise lograr:<br />
<div class="p1">
</div>
<ul>
<li><strike><b>Terminar mi carrera y conseguir mi titulo (Abril o Mayo)</b></strike> Aunque termine como en septiembre.</li>
</ul>
<ul>
<li><b>Certificarme SCJP (Junio/Julio), Aun tengo pendiente mi certificación este es un fiel recuerdo que me sigue desde 2010.</b></li>
</ul>
<ul>
<li><b>Mejorar aun mas en C</b> tuve uno que otro encuentro con C y C++ este año quisiera que fueran mas seguido en 2012 la idea es aventurarme en programación de sistemas operativos preferiblemente distribuidos o moviles.</li>
</ul>
<ul>
<li><b><strike>Aprender Java 7 en cuanto salga(Julio). </strike> </b>Listo esto fue muy facil en cuanto salio hice mis primeras impresiones aunque espero que Java 8 ya se ponga a nivel de C#.</li>
</ul>
<ul>
<li><b style="text-decoration: line-through;">Ser mas activo con iniciativas Open Source, quizas participando en algun proyecto. </b>Pude haber participado mas pero estuve colaborando en ciertas librerias de Android como AChartEngine pero no tan activa como me hubiera gustado, eso sí estuve muy bien en StackOverFlow.</li>
</ul>
<ul>
<li><b>Mejorar en gran medida mi Deutsch practicar practicar y practicar, un sitio recomendable </b><span class="s1"><b> LiveMocha </b>lamentablemente no mejore mucho mi aleman necesito practicar mas para no perder la habilidad que ya tengo</span></li>
</ul>
<br />
<div class="p2">
Algunas cosas no esperadas de 2011 fueron:</div>
<div class="p2">
</div>
<ul>
<li>Mayor participación en Android y tecnologias moviles, agradezco mucho al trabajo que he venido desempeñando en Auxilio mundial que me ha retado en plataformas smartphone.</li>
<li>Estuve explorando mas acerca de J2EE sin embargo pudo haber sido mejor lamentablemente no e encontrado la excusa perfecta para hacerlo.</li>
<li>Aprendi mas de seguridad fueron excelente curso impartido en Unan-Leon al respecto</li>
<li>Mas activo en stackoverflow </li>
</ul>
Aun no he pensado mucho en 2012, así que lo dejare así por el momento.<br />
<br />
Estoy agradecido de haber vivido un año mas, y esperamos tener mejores tiempos en 2012.<br />
<br />
Así que hasta 2012 muchas gracias por la lectura. Hasta Pronto<br />
<br />
Atte @necronet<br />
<br />necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com1tag:blogger.com,1999:blog-312313808727334146.post-15845860945204209202011-12-21T22:16:00.000-08:002011-12-22T17:07:16.433-08:00Hacking Android, LVL Cracking<br />
<i>This is probably the last </i><i>technical year </i><i>post, consider it my Chrismast gift yo you. Happy holidays,</i><br />
<br />
A little bit of history you can Check <a href="http://hackplayers.blogspot.com/2011/12/reto-14-android-crackme2.html">Reto 14: Android crackme #2</a>, it is an intersting publication where they challenge you to bypass LVL security on a developed APK; that was the perfect excuse for me to get to learn about decompile code in Android with practice, I mean I knew "How" but i theory never done it for myself, so thanks again to <a href="http://hackplayers.blogspot.com/">Hackerplayers</a> for the challenge.<br />
<br />
<b><span style="font-size: large;">Clarifications</span></b><br />
<br />
This post is not intended to be a profound explanation about how Android compile clases and package into an APK. I'm not going to explain deeply about <a href="http://code.google.com/p/smali/">Smali/Backsmali</a> (Decompile code), there are already excelent places that you can check them out like <a href="http://mylifewithandroid.blogspot.com/2009/01/disassembling-dex-files.html">Dissasembling Dex File</a> or <a href="http://androidcracking.blogspot.com/">Android Cracking</a>, personally I liked the last better because it's a whole blog intended to cracking, tells you a lot about tips and tricks in this subject, totally worth it to check it out.<br />
<br />
This post is a pragmatic example on how you can bypass a security licencing solving ofcourse <a href="http://hackplayers.blogspot.com/2011/12/reto-14-android-crackme2.html">Reto 14: Android crackme #2</a>. So lets start with the fun, here is the answer I gave and was approve by Hackerplayer author:<br />
<br />
<b><span style="font-size: large;">Download the APKTool</span></b><br />
<br />
<a href="http://code.google.com/p/android-apktool/">Apktool</a> is a wonderful tool, when it comes to cracking more like when it comes to decompiling, it becomes your bestfriend allows you to do several stuff like:<br />
<ul>
<li style="margin-bottom: 0.3em;">Decoding resources to nearly original form (including resources.arsc, XMLs and 9.png files) and rebuilding them</li>
<li style="margin-bottom: 0.3em;">Smali debugging: <a href="http://code.google.com/p/android-apktool/wiki/SmaliDebugging" style="color: #0000cc;">SmaliDebugging</a></li>
<li style="margin-bottom: 0.3em;">Helping with some repetitive tasks</li>
</ul>
<div>
After following the APKTool instalation you can proceed to execut the folowing command:</div>
<div>
<br /></div>
<div>
<pre class="brush: shell">$apktool d cracme2hpys.apk out</pre>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgI2vB77y-Q_29rAgXqW86Bc_bIksKUjSvkH23Unstzp72mtL1I0igfZHODTB8KMe6g9zl1aJKiyIwFz3xmXm6RfPhnqUycnbAUM1MDx27XoQ3jpSqyday0qnR1ATH0qQNt2ht5p0fErLb/s1600/step1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgI2vB77y-Q_29rAgXqW86Bc_bIksKUjSvkH23Unstzp72mtL1I0igfZHODTB8KMe6g9zl1aJKiyIwFz3xmXm6RfPhnqUycnbAUM1MDx27XoQ3jpSqyday0qnR1ATH0qQNt2ht5p0fErLb/s320/step1.png" width="320" /></a></div>
<div>
<br /></div>
<div>
*out is the target folder where the <a href="http://es.wikipedia.org/wiki/APK_%28formato%29">apk</a> it's decompressed.</div>
<div>
<br /></div>
<div>
<b><span style="font-size: large;">Checking the extracted folder out</span></b></div>
<div>
<b><br /></b></div>
<div>
First I though I could bypass the application by changing the start up ACtivity on the Manifest, but that was unsucessful.<br />
<br />
So No way, I had to check out the decompile code. The AndroidManifest.xml it's always a good place to start, gives you many hint where to look like the Start up Activity, probably there is where the <a href="http://developer.android.com/guide/publishing/licensing.html">ALVL</a> process start.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxkxHKol-mSqMd9usFwmg7TV-L0sHcBA-yv63h0cuFnaxR3qPGtmSXmz3R49bgqdxzsded_V27lKgAXXZZUsLvAh8QxTrK8qXOdamf5qoqE56AI00ksHm9ZOFbygRvEiPfi2bcrlaQ-mm9/s1600/Screen+Shot+2011-12-19+at+1.30.23+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="78" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxkxHKol-mSqMd9usFwmg7TV-L0sHcBA-yv63h0cuFnaxR3qPGtmSXmz3R49bgqdxzsded_V27lKgAXXZZUsLvAh8QxTrK8qXOdamf5qoqE56AI00ksHm9ZOFbygRvEiPfi2bcrlaQ-mm9/s320/Screen+Shot+2011-12-19+at+1.30.23+PM.png" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
So you now we know we have to check LicenseCheck.smali. When you open this file, you'll se a lot of code similar to <a href="http://en.wikipedia.org/wiki/Assembly_language">Assembly language</a> if you are not confortable with this, get used to it's the only way.</div>
<div>
<br /></div>
<div>
Search for the #onCreate method on LicenseCheck, this is where the licesence que check and invoke the method doCheck on the same class.<br />
<br />
<pre class="brush: java"> invoke-direct {v1, p0, v2, v3}, Lcom/android/vending/licensing/LicenseChecker;-><init>(Landroid/content/Context;Lcom/android/vending/licensing/Policy;Ljava/lang/String;)V</init>
.line 120
iput-object v1, p0, Lcom/hpys/crackmes/LicenseCheck;->mChecker:Lcom/android/vending/licensing/LicenseChecker;
.line 123
invoke-direct {p0}, Lcom/hpys/crackmes/LicenseCheck;->doCheck()V
.line 125
return-void
</pre>
</div>
<div>
<br />
If you look at the line 123. you'll se there is a doCheck method invocation of the current class so lets dig out to see what does this method actually do:<br />
<br />
<pre class="brush: java">.method private doCheck()V
.locals 2
.prologue
.line 106
iget-object v0, p0, Lcom/hpys/crackmes/LicenseCheck;->mChecker:Lcom/android/vending/licensing/LicenseChecker;
iget-object v1, p0, Lcom/hpys/crackmes/LicenseCheck;->mLicenseCheckerCallback:Lcom/android/vending/licensing/LicenseCheckerCallback;
invoke-virtual {v0, v1}, Lcom/android/vending/licensing/LicenseChecker;->checkAccess(Lcom/android/vending/licensing/LicenseCheckerCallback;)V
.line 107
return-void
.end method
</pre>
Now is clear the method doCheck does the License check through a class named LicenseCecker aparently there is also a callback instance passed to this object probably to inform that the checking was successfuly, so now we have to into:<br />
<br />
<b>com/android/vending/licensing/LicenseChecker</b><br />
<div>
</div>
<div>
<b><span style="font-size: large;"><br /></span></b><br />
<b><span style="font-size: large;">Exploring LicenseChecker</span></b><br />
<b><span style="font-size: large;"><br /></span></b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinJxBH62Wjk1iiHVEs5W4EjBS8GZTCTsa1zI6G2U6yUCzYnLmfr5rePNJNUzwBWjss4fcMz01iXd3btHKartIkpKZETpn1QdRzbajW6KTZy_VmonE7IHxZhJX8URlumo5wNg0J9Dbyeobp/s1600/Screen+Shot+2011-12-19+at+8.53.01+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinJxBH62Wjk1iiHVEs5W4EjBS8GZTCTsa1zI6G2U6yUCzYnLmfr5rePNJNUzwBWjss4fcMz01iXd3btHKartIkpKZETpn1QdRzbajW6KTZy_VmonE7IHxZhJX8URlumo5wNg0J9Dbyeobp/s200/Screen+Shot+2011-12-19+at+8.53.01+PM.png" width="161" /></a></div>
<b><span style="font-size: large;"><br /></span></b></div>
<div>
</div>
<div>
Before we start to read all the LicenseChecker and $ classes, we should go straight to the checkAccess method that was invoke previusly in LicenseCheck class remember? I'll help you out here:</div>
<div>
<br />
<pre class="brush: java"> invoke-virtual {v0, v1}, Lcom/android/vending/licensing/LicenseChecker;->checkAccess(Lcom/android/vending/licensing/LicenseCheckerCallback;)V</pre>
</div>
<div>
<br />
Probably this method gives us better clues than any other, this method is quite extensive, so I'll narrow it do to the important stuff:<br />
<br />
<pre class="brush: java"># virtual methods
.method public declared-synchronized checkAccess(Lcom/android/vending/licensing/LicenseCheckerCallback;)V
.locals 9
.parameter "callback"
.prologue
.line 133
monitor-enter p0
:try_start_0
iget-object v1, p0, Lcom/android/vending/licensing/LicenseChecker;->mPolicy:Lcom/android/vending/licensing/Policy;
invoke-interface {v1}, Lcom/android/vending/licensing/Policy;->allowAccess()Z
move-result v1
if-eqz v1, :cond_0
.line 134
const-string v1, "LicenseChecker"
</pre>
<br />
Did you see<b> if-eqz v1, :cond_0 </b>operation? well this it's a very important one if this it's not true then It will send you lower to instantiate the License Validator, and we don;t want that do we?, so lets negate that condition with another operation <span style="background-color: white; font-family: Arial; text-align: left;"><b>if-nez vx,target</b> </span> so now it should work right? welll<br />
<br />
<br />
<b><span style="font-size: large;">Are you kidding It ain't working.... ¬¬</span></b><br />
<br />
Yes, yes I know we change the license execution and recompile and repacked (I'll explained the process later) but still does not work, well turns out the challenge gives you another problem. The MyAndroidAppActivity does not seem to be invoking the onCreate method and generate the following trace on <a href="http://developer.android.com/guide/developing/tools/logcat.html">logcat</a>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbi4KqKBwSZPnjxi46Uu_gL8a-ojhR1KI6uIvHJAjbX2NbTTHxgBuVSaVcp7gOD9y80Ll-nJVb7ZiZoTohpVep26-2gp2ejXOlhh_QRB5lbBYpO5cImx92fZuygEs3PX2s5CQdZw40VXGw/s1600/Error+crackeado.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbi4KqKBwSZPnjxi46Uu_gL8a-ojhR1KI6uIvHJAjbX2NbTTHxgBuVSaVcp7gOD9y80Ll-nJVb7ZiZoTohpVep26-2gp2ejXOlhh_QRB5lbBYpO5cImx92fZuygEs3PX2s5CQdZw40VXGw/s320/Error+crackeado.png" width="320" /></a></div>
<br /></div>
<br />
So?, What's going on?, The answer is plain simple the MyAndroidActivity does not invoke onCreate, we need to add that into the <b>backsmali. </b>Look:<br />
<br />
<pre class="brush: java">.class public Lcom/hpys/crackmes/MyAndroidAppActivity;
.super Lcom/hpys/crackmes/LicenseCheck;
.source "MyAndroidAppActivity.java"
# direct methods
.method public constructor <init>()V</init>
.locals 0
.prologue
.line 6
invoke-direct {p0}, Lcom/hpys/crackmes/LicenseCheck;-><init>()V</init>
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.locals 0
.parameter "savedInstanceState"
.prologue
.line 11
invoke-super {p0, p1}, Lcom/hpys/crackmes/LicenseCheck;->onCreate(Landroid/os/Bundle;)V
.line 15
return-void
.end method
</pre>
<br />
The code above show a lots of lacks in the MyAndroidAppActivity, being a simple and small code we can aknowledge the following problems:<br />
<br />
<br />
<ul>
<li>The onCreate method does not call the super.onCreate(savedInstanceState)</li>
<li>The onCreate method does not have any assign layout</li>
<li>The MyAndroidAppActivity inherit the LicenseCheck instead of the Activity, and also does not make the proper code on the init invocation.</li>
</ul>
<div>
Here is the right code:</div>
<div>
<br /></div>
<br />
<div>
<pre class="brush: java">.class public Lcom/hpys/crackmes/MyAndroidAppActivity;
.super Landroid/app/Activity;
.source "MyAndroidAppActivity.java"
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 6
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.locals 1
.parameter "savedInstanceState"
.prologue
.line 15
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 17
const/high16 v0, 0x7f03
invoke-virtual {p0, v0}, Lcom/hpys/crackmes/MyAndroidAppActivity;->setContentView(I)V
.line 20
return-void
.end method</init></init></pre>
</div>
<b><span style="font-size: large;"><br /></span></b><br />
We can take the following notes like the onCreate and setContentView invocation, and the variable v0 was added, when adding variable you have to be careful to declare how many are you using in the block scope in this case we add <b style="font-style: italic;">locals 1 </b>on the method declaration.<br />
<br />
Are we done? kind of, we now need to recompile and repackaged this into an APK, as I promised this is how you do it<br />
<br />
<span style="font-size: large;"><b>Back to an APK</b></span><br />
<br />
Rembember apktool? well the same tool that allows you to decompile, help you into recompile and recreate an APK, but you probably going to need a little bit more to get it back into the phone. "But you'll se I'll show you" (Joker quote)<br />
<br />
First build and create the apk with the following command<br />
<br />
<pre class="brush: shell">$ apktool b out crackemecracked.apk
</pre>
You will also need to sign this out, and you are going to need a keystore, you can easly created with <b><a href="http://docs.oracle.com/javase/1.3/docs/tooldocs/win32/keytool.html">keytool</a></b><br />
<br />
<pre class="brush: shell">$ keytool -genkey -v -keystore keystore.keystore</pre>
<br />
<br />
Now that you have a keystore, use it to signed your app<br />
<br />
<pre class="brush: shell">jarsigner -verbose -keystore keystore.keystore crackemecracked.apk crackmecracked</pre>
<br />
<div>
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span></div>
<div>
If you wish to learn more about how to sign Android application don't forget to pass by the <a href="http://developer.android.com/guide/publishing/app-signing.html"> oficial documenation</a>.</div>
<div>
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span></div>
Now that we have our nice apk signed, we can reinstall it into the phone with the adb:<br />
<br />
<pre class="brush: shell">$ adb uninstall com.hpys.crackmes
$ adb install crackemecracked-za.apk
</pre>
<br />
If everything it's correct you should be seeing this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSYyzx3fiwxm5uTXJhmImXc0hp7kAQnq8MeRe4UX1vhIKZTwzwJz2o0b-Wknv3iJa-MdqPcrRTupBIYvL0qAeiZqEX1y7Y0dpfTrUEDP1LCMNs3xPbkleqVA7eL2g8q_gsYhDpJyLm20-R/s1600/cracked.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSYyzx3fiwxm5uTXJhmImXc0hp7kAQnq8MeRe4UX1vhIKZTwzwJz2o0b-Wknv3iJa-MdqPcrRTupBIYvL0qAeiZqEX1y7Y0dpfTrUEDP1LCMNs3xPbkleqVA7eL2g8q_gsYhDpJyLm20-R/s320/cracked.png" width="320" /></a></div>
<div>
<br /></div>
<br />
<br />
<b>And READY!! </b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPUny4dttyb6UbLgmOhK6ycnBnDCh0OHZokv8iEax6NiXmar4q2i61T1I0EIST4SdXqd1voqGpclGIo0RlAvTkCxSALI2IkV0BTSW6EJQJBB4xsU1zEtuRNgp_2ilC2DqpR-NeLWiTDBMF/s1600/Screen+Shot+2011-12-20+at+11.38.34+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPUny4dttyb6UbLgmOhK6ycnBnDCh0OHZokv8iEax6NiXmar4q2i61T1I0EIST4SdXqd1voqGpclGIo0RlAvTkCxSALI2IkV0BTSW6EJQJBB4xsU1zEtuRNgp_2ilC2DqpR-NeLWiTDBMF/s200/Screen+Shot+2011-12-20+at+11.38.34+PM.png" width="200" /></a></div>
<br />
<br />
<b><span style="font-size: large;">¿Some aditional tips ?</span></b></div>
<div>
<br /></div>
<div>
Particulary I've never done this before, the information on how to modify backsmali is not that wide, but it is not that hard (at least not the basic to do this)<br />
<br />
- I suggest you learn a bit about Assembler because it is really similar the operator and the register changes.</div>
<div>
<br /></div>
<div>
- Whenever I get lost with a specific operation I went to <a href="http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html">Dalvik OpCode</a> it was like the Larouse for me<br />
<br /></div>
<div>
- I did some small and simple classes to check out what does the decompile code looks like.<br />
<br />
- No need to check everything like LicenseChecker$ResultListener$1 this classes are either anonymous or declare internal classes on the file so you can skip them.<br />
<br />
- For the recompilation and reepackaging procedure I did small <a href="http://www.4shared.com/file/ILK9UIvC/load-apk.html">shellscript</a> feel free to use it.</div>
<div>
<br />
- I suggest you two excelent I/O presentations.<br />
<br />
<b>Google I/O 2008 - Dalvik Virtual Machine Internals</b></div>
<div>
<br /></div>
<div>
<b><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/ptjedOZEXPM" width="420"></iframe></b></div>
<div>
<b><br /></b><br />
<b> Google I/O 2010 - A JIT Compiler for Android's Dalvik VM</b><br />
<div>
<br /></div>
<b><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/Ls0tM-c4Vfo" width="420"></iframe></b></div>
</div>
<div>
<b><br /></b></div>necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-62685855168154477692011-12-19T12:06:00.000-08:002011-12-22T17:07:23.130-08:00Hacking Android - Crackeando LVL<i>Este es probablemente el ultimo post del año que sea tecnico/tutorial, y es mi regalo de despedida hasta el 2012, espero que lo disfruten. </i><br />
<br />
Para hacer un poco de prologo revisa el <a href="http://hackplayers.blogspot.com/2011/12/reto-14-android-crackme2.html">Reto 14: Android crackme #2</a>, es una interesante publicación que te retan a pasarte el <a href="http://developer.android.com/guide/publishing/licensing.html">licenciamiento de Android</a> de un APK; así que es la excusa perfecta para aprender un poco de decompilado de Android, el cual hasta el momento sabia de manera teorica y nunca habia tenido una motivación mas alla de simplemente ser "<b>el sabiondo teorico</b>" para pasar a ser un <b>curioso pragmatico</b>, así que gracias a <a href="http://hackplayers.blogspot.com/">Hackerplayers</a> por el reto.<br />
<br />
<b><span style="font-size: large;">Aclaraciones</span></b><br />
<br />
Este post no es un explicativo profundo acerca de la forma que Android compila las clases y empaqueta el APK. Tampoco voy a explicar que es <a href="http://code.google.com/p/smali/">Smali/Backsmali</a> (código decompilado) para ello ya hay buenos blogs , como <a href="http://mylifewithandroid.blogspot.com/2009/01/disassembling-dex-files.html">Dissasembling Dex File</a> y claro <a href="http://androidcracking.blogspot.com/">Android Cracking</a> el ultimo un cracker de Android te cuenta muchos secretos y trucos acerca de código decompilado.<br />
<br />
Este post es más acerca de como te pasas el licenciamiento de seguridad resolviendo el <a href="http://hackplayers.blogspot.com/2011/12/reto-14-android-crackme2.html">Reto 14: Android crackme #2</a>. Asi que empezemos a divertirnos aqui esta mi respuesta (la cual fue aprobada por el autor del blog):<br />
<br />
<b><span style="font-size: large;">Descarga el APKTool</span></b><br />
<br />
El <a href="http://code.google.com/p/android-apktool/">apktool</a> es una herramienta maravillosa, si te quieres hacer de esto de cracking aplicaciones android el apktool es un fiel compañero, permite realiza muchas cosas entre ellas:<br />
<ul>
<li>Extraer y decompilar fuentes de empaquetados Android(apktool), esto incluye recursos(res), manifiesto(<a href="http://developer.android.com/guide/topics/manifest/manifest-intro.html">AndroidManifest</a>), y fuentes decompiladas.</li>
<li>Recompilar dichas fuentes y volverlas a empaquetar.</li>
<li>Depurar codigo decompilado backsmali.</li>
</ul>
<div>
Luego de seguir la instalacion del APKTool procede a ejecutar el comando para extraer el APK.</div>
<div>
<br /></div>
<div>
<pre class="brush: shell">$apktool d cracme2hpys.apk out</pre>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgI2vB77y-Q_29rAgXqW86Bc_bIksKUjSvkH23Unstzp72mtL1I0igfZHODTB8KMe6g9zl1aJKiyIwFz3xmXm6RfPhnqUycnbAUM1MDx27XoQ3jpSqyday0qnR1ATH0qQNt2ht5p0fErLb/s1600/step1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgI2vB77y-Q_29rAgXqW86Bc_bIksKUjSvkH23Unstzp72mtL1I0igfZHODTB8KMe6g9zl1aJKiyIwFz3xmXm6RfPhnqUycnbAUM1MDx27XoQ3jpSqyday0qnR1ATH0qQNt2ht5p0fErLb/s320/step1.png" width="320" /></a></div>
<div>
<br /></div>
<div>
*out es el directorio donde se descomprime el <a href="http://es.wikipedia.org/wiki/APK_%28formato%29">apk</a>.</div>
<div>
<br /></div>
<div>
<b><span style="font-size: large;">Husmeando el directorio extraido</span></b></div>
<div>
<b><br /></b></div>
<div>
Lo primero que pense es bypasear cambiando la clase en el AndroidManifest.xml que es la que comienza la aplicacion, pero no tuve exito.<br />
<br />
Asi que tuve que husmear el codigo decompilado. El AndroidManifest.xml siempre te da la pista de donde comenzar en general procuro que sea la Actividad inicial, por que es donde probablemente se de la invocación del <a href="http://developer.android.com/guide/publishing/licensing.html">ALVL</a>.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxkxHKol-mSqMd9usFwmg7TV-L0sHcBA-yv63h0cuFnaxR3qPGtmSXmz3R49bgqdxzsded_V27lKgAXXZZUsLvAh8QxTrK8qXOdamf5qoqE56AI00ksHm9ZOFbygRvEiPfi2bcrlaQ-mm9/s1600/Screen+Shot+2011-12-19+at+1.30.23+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="78" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxkxHKol-mSqMd9usFwmg7TV-L0sHcBA-yv63h0cuFnaxR3qPGtmSXmz3R49bgqdxzsded_V27lKgAXXZZUsLvAh8QxTrK8qXOdamf5qoqE56AI00ksHm9ZOFbygRvEiPfi2bcrlaQ-mm9/s320/Screen+Shot+2011-12-19+at+1.30.23+PM.png" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b><br /></b></div>
<div>
Asi que puedes revisar en la carpeta <b>com/hpys/crackmes/LicenseCheck.smali</b>. Veras mucho codigo, si tienes alguna experiencia con <a href="http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_assembly_language">lenguaje ensamblador </a> no te parecera tan raro, sino estudia un poco y veras que sencillo que es. </div>
<div>
<br /></div>
<div>
Busca en el onCreate de LicenseCheck.smali el codigo donde revisa la licencia se realiza una invocacion a un metodo doCheck().<br />
<br />
<pre class="brush: java"> invoke-direct {v1, p0, v2, v3}, Lcom/android/vending/licensing/LicenseChecker;-><init>(Landroid/content/Context;Lcom/android/vending/licensing/Policy;Ljava/lang/String;)V</init>
.line 120
iput-object v1, p0, Lcom/hpys/crackmes/LicenseCheck;->mChecker:Lcom/android/vending/licensing/LicenseChecker;
.line 123
invoke-direct {p0}, Lcom/hpys/crackmes/LicenseCheck;->doCheck()V
.line 125
return-void
</pre>
</div>
<div>
<br />
<br />
Si miras bien en la linea 123 hay hay un doCheck este llama a un metodo en la misma clase <b>LicenseCheck </b>pero que hace realmente este metodo veamos:<br />
<br />
<pre class="brush: java">.method private doCheck()V
.locals 2
.prologue
.line 106
iget-object v0, p0, Lcom/hpys/crackmes/LicenseCheck;->mChecker:Lcom/android/vending/licensing/LicenseChecker;
iget-object v1, p0, Lcom/hpys/crackmes/LicenseCheck;->mLicenseCheckerCallback:Lcom/android/vending/licensing/LicenseCheckerCallback;
invoke-virtual {v0, v1}, Lcom/android/vending/licensing/LicenseChecker;->checkAccess(Lcom/android/vending/licensing/LicenseCheckerCallback;)V
.line 107
return-void
.end method
</pre>
Ahora es claro que el metodo doCheck hace la revision, y llama a la clase LicenseChecker y aparentemente le pasa un callback LicenseCheckerCallback probablemente para informar que el licensamiento se realizo de forma correcta. Entonces el paso mas logico ahora sera ir a explorar la clase<br />
<br />
<b>com/android/vending/licensing/LicenseChecker</b><br />
<div>
</div>
<div>
<b><span style="font-size: large;"><br /></span></b><br />
<b><span style="font-size: large;">Explorando del LicenseChecker</span></b><br />
<b><span style="font-size: large;"><br /></span></b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinJxBH62Wjk1iiHVEs5W4EjBS8GZTCTsa1zI6G2U6yUCzYnLmfr5rePNJNUzwBWjss4fcMz01iXd3btHKartIkpKZETpn1QdRzbajW6KTZy_VmonE7IHxZhJX8URlumo5wNg0J9Dbyeobp/s1600/Screen+Shot+2011-12-19+at+8.53.01+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinJxBH62Wjk1iiHVEs5W4EjBS8GZTCTsa1zI6G2U6yUCzYnLmfr5rePNJNUzwBWjss4fcMz01iXd3btHKartIkpKZETpn1QdRzbajW6KTZy_VmonE7IHxZhJX8URlumo5wNg0J9Dbyeobp/s200/Screen+Shot+2011-12-19+at+8.53.01+PM.png" width="161" /></a></div>
<b><span style="font-size: large;"><br /></span></b></div>
<div>
</div>
<div>
Antes de empezar a leer todo el LicenseChecker y sus derivados, mejor ve directamente a la invocacion del metodo checkAccess que es el que invoca la clase LicenseCheck recuerdas?.</div>
<div>
<br />
<pre class="brush: java"> invoke-virtual {v0, v1}, Lcom/android/vending/licensing/LicenseChecker;->checkAccess(Lcom/android/vending/licensing/LicenseCheckerCallback;)V</pre>
</div>
<div>
<br />
Probablemente este metodo nos proporcione mejores pista que cualquier otro por que es donde se lleva acabo la revision de la licencia.<br />
<br />
El metodo checkAccess, es bastante grande así que procurare resumir las partes relevantes, por ejemplo:<br />
<br />
<pre class="brush: java"># virtual methods
.method public declared-synchronized checkAccess(Lcom/android/vending/licensing/LicenseCheckerCallback;)V
.locals 9
.parameter "callback"
.prologue
.line 133
monitor-enter p0
:try_start_0
iget-object v1, p0, Lcom/android/vending/licensing/LicenseChecker;->mPolicy:Lcom/android/vending/licensing/Policy;
invoke-interface {v1}, Lcom/android/vending/licensing/Policy;->allowAccess()Z
move-result v1
if-eqz v1, :cond_0
.line 134
const-string v1, "LicenseChecker"</pre>
<br />
<b> if-eqz v1, :cond_0 </b>esta condicion es muy importante por que en caso de cumplirse te envia a cond_0 y mas abajo indica que es la instanciacion del validador de licencias. Si nos saltamos esta parte tendremos el ejercicio terminado!!. Es bien facil de hacer esta condicion tiene una operacion antagonica la cual es: <span style="background-color: white; font-family: Arial; text-align: left;"><b>if-nez vx,target</b> </span> asi que al cambiar las operaciones deberia funcionar.<br />
<br />
<br />
<b><span style="font-size: large;">Pero no funciona.... ¬¬</span></b><br />
<br />
Si, si, cambiamos esta linea y ejecutamos el paso de recompilación de codigo y reempaquetamiento (lo explicare luego), el reto nos regala un obstaculo adicional, al pasar la licencia el MyAndroidAppActivity no parece invocar al metodo onCreate, y te genera el siguiente error en <a href="http://developer.android.com/guide/developing/tools/logcat.html">logcat</a>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbi4KqKBwSZPnjxi46Uu_gL8a-ojhR1KI6uIvHJAjbX2NbTTHxgBuVSaVcp7gOD9y80Ll-nJVb7ZiZoTohpVep26-2gp2ejXOlhh_QRB5lbBYpO5cImx92fZuygEs3PX2s5CQdZw40VXGw/s1600/Error+crackeado.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbi4KqKBwSZPnjxi46Uu_gL8a-ojhR1KI6uIvHJAjbX2NbTTHxgBuVSaVcp7gOD9y80Ll-nJVb7ZiZoTohpVep26-2gp2ejXOlhh_QRB5lbBYpO5cImx92fZuygEs3PX2s5CQdZw40VXGw/s320/Error+crackeado.png" width="320" /></a></div>
<br /></div>
<br />
¿Así que pasa? ¿por que no funciona?, Bueno la respuesta del por que no funciona es clara la clase MyAndroidAppActivity no tiene la invocación al metodo onCreate hara falta agregarselo con <b>backsmali.</b><br />
<br />
<pre class="brush: java">.class public Lcom/hpys/crackmes/MyAndroidAppActivity;
.super Lcom/hpys/crackmes/LicenseCheck;
.source "MyAndroidAppActivity.java"
# direct methods
.method public constructor <init>()V</init>
.locals 0
.prologue
.line 6
invoke-direct {p0}, Lcom/hpys/crackmes/LicenseCheck;-><init>()V</init>
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.locals 0
.parameter "savedInstanceState"
.prologue
.line 11
invoke-super {p0, p1}, Lcom/hpys/crackmes/LicenseCheck;->onCreate(Landroid/os/Bundle;)V
.line 15
return-void
.end method</pre>
<br />
<br />
El codigo anterior demuestra muchas faltas en la clase MyAndroidAppActivity, siendo un codigo pequeño y sencillo es facil reconocerlas todas:<br />
<div>
<ul>
<li>El metodo onCreate no llama al super.onCreate.</li>
<li>El metodo onCreate tampoco tiene layout asignado deberia tener main.xml con setContentView.</li>
<li>La clase MyAndroidAppActivity hereda de LicenseCheck en vez de Activity y tambien en el metodo init se hace la invocacion especial a este metodo.</li>
</ul>
<div>
Aqui el codigo del MyAndroidAppActivity con las fallas anteriores resueltas:<br />
<br /></div>
</div>
<div>
<pre class="brush: java">.class public Lcom/hpys/crackmes/MyAndroidAppActivity;
.super Landroid/app/Activity;
.source "MyAndroidAppActivity.java"
# direct methods
.method public constructor <init>()V
.locals 0
.prologue
.line 6
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
return-void
.end method
# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
.locals 1
.parameter "savedInstanceState"
.prologue
.line 15
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 17
const/high16 v0, 0x7f03
invoke-virtual {p0, v0}, Lcom/hpys/crackmes/MyAndroidAppActivity;->setContentView(I)V
.line 20
return-void
.end method</init></init></pre>
</div>
<b><span style="font-size: large;"><br /></span></b><br />
Podemos realizar los siguientes apuntes, como la invocacion del metodo <b><i>onCreate()</i></b> y de <b><i>setContentView</i> </b>con la variable <b><i>v0</i></b>, en este tienes que tener sumo cuidado en declarar <b><i>locals 1</i></b> que es el numero de variables que utilizaras.<br />
<br />
¿Ya terminamos?, algo así lo unico que falta es recompilarlo y empaquetarlo para regresarlo a un APK.<br />
<br />
<span style="font-size: large;"><b>De regreso a un APK</b></span><br />
<br />
<br />
A como mencione inicialmente <b>apktool </b>tambien te permite recompilar la aplicación y regresarla a un APK, pero vas a necesitara un poco mas de eso para colocarla devuelta en el telefono. Para recompilar la aplicacion ejecuta el comando:<br />
<br />
<pre class="brush: shell">$ apktool b out crackemecracked.apk
</pre>
Tambien necesitas firmarlo, para ello necesitas de un keystore, puedes crearlo facilmente con <b><a href="http://docs.oracle.com/javase/1.3/docs/tooldocs/win32/keytool.html">keytool</a></b><br />
<br />
<pre class="brush: shell">$ keytool -genkey -v -keystore my-release-key.keystore</pre>
<br />
<br />
Ahora ya tienes tu keystore para firmar tu aplicacion<br />
<br />
<br />
<pre class="brush: shell">jarsigner -verbose -keystore keystore.keystore crackemecracked.apk crackmecracked</pre>
<br />
<div>
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span></div>
<div>
Si deseas saber mas de como firmar aplicaciones android desde consola no te olvides pasar por la <a href="http://developer.android.com/guide/publishing/app-signing.html">documentación oficial</a>.</div>
<div>
<span style="font-family: monospace;"><span style="white-space: pre;"><br /></span></span></div>
<br />
Ahora si tenemos la aplicacion firmada, es muy sencillo desintalarla y volverla instalar con el adb.<br />
<br />
<pre class="brush: shell">$ adb uninstall com.hpys.crackmes
$ adb install crackemecracked-za.apk
</pre>
<span style="font-family: monospace; white-space: pre;"> </span> <br />
<br />
Si todo esta bien, la imagen que deberia aparecer es la siguiente:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSYyzx3fiwxm5uTXJhmImXc0hp7kAQnq8MeRe4UX1vhIKZTwzwJz2o0b-Wknv3iJa-MdqPcrRTupBIYvL0qAeiZqEX1y7Y0dpfTrUEDP1LCMNs3xPbkleqVA7eL2g8q_gsYhDpJyLm20-R/s1600/cracked.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSYyzx3fiwxm5uTXJhmImXc0hp7kAQnq8MeRe4UX1vhIKZTwzwJz2o0b-Wknv3iJa-MdqPcrRTupBIYvL0qAeiZqEX1y7Y0dpfTrUEDP1LCMNs3xPbkleqVA7eL2g8q_gsYhDpJyLm20-R/s320/cracked.png" width="320" /></a></div>
<div>
<br /></div>
<br />
<br />
<b>Y LISTO!! </b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPUny4dttyb6UbLgmOhK6ycnBnDCh0OHZokv8iEax6NiXmar4q2i61T1I0EIST4SdXqd1voqGpclGIo0RlAvTkCxSALI2IkV0BTSW6EJQJBB4xsU1zEtuRNgp_2ilC2DqpR-NeLWiTDBMF/s1600/Screen+Shot+2011-12-20+at+11.38.34+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPUny4dttyb6UbLgmOhK6ycnBnDCh0OHZokv8iEax6NiXmar4q2i61T1I0EIST4SdXqd1voqGpclGIo0RlAvTkCxSALI2IkV0BTSW6EJQJBB4xsU1zEtuRNgp_2ilC2DqpR-NeLWiTDBMF/s200/Screen+Shot+2011-12-20+at+11.38.34+PM.png" width="200" /></a></div>
<br />
<br />
<b><span style="font-size: large;">¿Algunos Tips adicionales ?</span></b></div>
<div>
<br /></div>
<div>
En lo particular nunca habia realizado esto, y la informacion de como modificar codigo backsmali no es muy amplia, pero es posible y no es tan dificil.<br />
<br />
- Te recomiendo que veas algo de codigo Assembler por que es similar al backsmali basicamente son operadores y cambios registros.</div>
<div>
<br /></div>
<div>
- Cuando estaba perdido con alguna operación acudia a <a href="http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html">Dalvik OpCode</a> el cual fue como un diccionario para mí.</div>
<div>
<br /></div>
<div>
- Tambien cree clases sencillas, como el hola mundo o una imagen para ver como se decompilaba y como se veia.<br />
<br />
- No hay necesidad de revisar todas las clases como LicenseChecker$ResultListener$1 por que se refiere a clases internas (anonimas o declaradas) en el archivo, así que obviemos eso por un momento y dediquemonos al metodo <b>doCheckAccess </b>en la clase LinceseChecker.<br />
<br />
- Para la parte de la recompilación y empaquetamiento me hice un <a href="http://www.4shared.com/file/ILK9UIvC/load-apk.html">shellscript</a> por si quieres utilizarlo.</div>
<div>
<br />
- Te recomiendo dos excelentes presentaciones de I/O.<br />
<br />
<b>Google I/O 2008 - Dalvik Virtual Machine Internals</b></div>
<div>
<br /></div>
<div>
<b><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/ptjedOZEXPM" width="420"></iframe></b></div>
<div>
<b><br /></b><br />
<b> Google I/O 2010 - A JIT Compiler for Android's Dalvik VM</b><br />
<div>
<br /></div>
<b><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/Ls0tM-c4Vfo" width="420"></iframe></b><br />
<b><br /></b></div>
</div>necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com2tag:blogger.com,1999:blog-312313808727334146.post-66210190447276422842011-12-16T06:16:00.001-08:002011-12-16T08:24:35.751-08:00Android training, Mejora tu desarrollo Android<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO4wZgm4FmRAdjP1P2bISSm3XPKWROMfcS62bTeIAUJk2mJI_oeIBtwwPs9aFEk3Yz8JoSEHxCW50t4KCKwq4uCyYxir_ZARAveNdMdNJM63WHljnnSty80M_YNyWQlyT4zWk-SMrcAEGM/s1600/training-prof.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO4wZgm4FmRAdjP1P2bISSm3XPKWROMfcS62bTeIAUJk2mJI_oeIBtwwPs9aFEk3Yz8JoSEHxCW50t4KCKwq4uCyYxir_ZARAveNdMdNJM63WHljnnSty80M_YNyWQlyT4zWk-SMrcAEGM/s320/training-prof.png" width="320" /></a></div>
Android es una plataforma bastate facil de aprender, la gran cantidad de informacion y de ejemplos en internet es impresionante, existen <a href="http://www.necronet.info/2010/10/10-lugares-para-desarrollo-de.html">muchos sitios para desarrollo android</a> como ya he comentado asi como las <a href="http://www.necronet.info/2011/11/top-5-de-herramientas-en-android.html">5 herramientas que no te puedes perder</a> al usar android.<br />
<br />
Ahora google nos da una mano extra con <a href="https://developer.android.com/training/index.html">Android training</a>, en sí estos recursos ya existian lo que pasa es que ahora estan mas ordenados, tiene buenos tips los cuales seguramente tomare el tiempo este fin de semana para ver quizas me robo unas 4 horas del sabado para refrescar y para aprender hay muchas cosas que no he visto y con los ejemplos es bastante sencillo abordarlo.<br />
<br />
Así que ya sabes si quieres tener mejor conocimiento en Android hechale una ojeada a Android Training y comparte lo que aprendiste.<br />
<br />
<br />necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-21074379144138613212011-12-05T13:44:00.001-08:002011-12-05T14:01:57.820-08:00RE: Aclaraciones [Feria Talento Tecnologico]Agradezco la respuesta brindada acerca de mi percepción de la feria tecnologica, a como escribí es una opinión <b>personal </b>y aunque ciertos aspectos son compartidos con algunos colegas no dejan de ser apreciaciones explicitamente subjetivas así como pueden haber post felicitandolos solo recalque ciertos puntos que me disgustaron..<br />
<br />
PSI, <i>“mano de obra barata” es utilizado fuera de contexto y pareciera negativo </i>No parece negativo, es negativo.<br />
<br />
Aqui la respuesta integra y oficial:<br />
<i><br /></i><br />
<div>
<div>
<i>Estimado José,</i><br />
<i>Primero que todo, deseamos darte las gracias por tomarte el tiempo para escribir y dar a conocer tus impresiones sobre la Feria de Talento Tecnológico, y en reconocimiento de este esfuerzo, quisiéramos brindarte algunas aclaraciones de nuestra parte.</i><br />
<i><br /></i><br />
<i>Para comenzar, es una lástima que consideres que tu participación en esta feria fue una “pérdida de tiempo”, aun cuando sólo estuviste presente 10 minutos. Esta feria surge a raíz de la necesidad que han expresado un número de empresas internacionales de ubicar personal nicaragüense con conocimientos de computación y las tecnologías de la información, por lo que el objetivo de la feria es ser un enlace directo entre jóvenes con estas capacidades y las empresas que los requieren, facilitando el proceso de reclutamiento.</i><br />
<i><br /></i><br />
<i>Esto quiere decir que todos aquellos que participaron tienen ahora una posición ventajosa de optar a posiciones en empresas internacionales e ingresar al mercado laboral formal en empresas responsables, con prácticas de clase mundial y con salarios superiores al promedio que se puede encontrar en el país. Y aunque la información será muy útil para tener una idea general de la cantidad de personas con conocimientos de computación en Nicaragua, el objetivo de la feria no era simplemente hacer un estudio. </i><br />
<i>En el corto plazo, de esta iniciativa surgirán oportunidades de empleo reales para los jóvenes que participaron y reunieron las calificaciones requeridas. De hecho, a algunas de las personas que asistieron ya les pidió su CV y éste fue enviado directamente a empresas que sabemos requiere de candidatos con su perfil específico.</i><br />
<i><br /></i><br />
<i>Respecto a las pruebas que se realizaron, es comprensible tu disgusto, sin embargo, quisiéramos aclarar que la cantidad de pruebas que se podrían haber realizado es inmensa dado lo vasto que es el tema. Las pruebas se enfocaron en las tecnologías de .NET y Oracle porque es en éstas tecnologías en las cuales las empresas internacionales con las que estamos trabajando han manifestado un interés inmediato, sin menoscabo de otras tecnologías como PHP, Java y Python. En la medida que se compruebe que hay recurso humano nicaragüense calificado en programación, más empresas estarán interesadas en venir a Nicaragua e irán requiriendo de personas con conocimientos de otros lenguajes informáticos, por lo que consideramos esta iniciativa como un excelente punto de arranque para empezar a crear oportunidades de empleo en esta rama profesional.
</i><br />
<i><br /></i><br />
<i>El hecho que no hayas visto a empresas publicitando u ofreciendo puestos en TI en la feria no significa no hayan posiciones vacantes para gente con un perfil de TI. Aunque las empresas no hayan estado presentes físicamente, nosotros, dentro de nuestro rol de facilitadores, estuvimos representando a dichas empresas y atendiendo sus necesidades de reclutamiento. Una vez que la información de las personas que participaron en la feria se procese, ésta será facilitada a las empresas internacionales, quienes, en base a calificaciones, estarían contactando a los candidatos.
</i><br />
<i><br /></i><br />
<i>Desde un inicio, y para evitar crear falsas expectativas, se manejó una comunicación clara y no engañosa que decía que la feria era “una excelente oportunidad para circular tus datos entre empresas internacionales en busca de talento nicaragüense con conocimientos de computación y las tecnologías de la información”. Y lo es. Algunos de los jóvenes que asistieron pasaron una hora o más en la feria haciendo las pruebas, esto demuestra no sólo el empeño que dedicaron a su participación, sino también el entusiasmo de optar a oportunidades de trabajo.</i><br />
<i><br /></i><br />
<i>Existe una gran necesidad de generar nuevas fuentes de empleo en el país, especialmente para cubrir la demanda laboral de los miles de jóvenes que salen de las universidades cada año. En este sentido, las empresas internacionales representan una excelente oportunidad para muchos jóvenes deseosos de iniciar sus carreras profesionales. Usualmente, el término “mano de obra barata” es utilizado fuera de contexto y pareciera negativo, pero creemos necesario explicar lo siguiente. Es verdad que muchas empresas internacionales buscan países como Nicaragua donde los salarios no sean tan altos como los de Estados Unidos o Europa para así poder tener operaciones más rentables. Sin embargo, esto no es algo negativo. Aun cuando en Nicaragua los salarios son más bajos que en otros países, los salarios que ofrecen empresas internacionales siguen siendo altamente competitivos al compararse con el resto de las opciones que los jóvenes pueden encontrar en el mercado laboral local. Pero más que el salario, se busca también que este tipo de empresas que vienen al país no sólo cumplan con la legislación laboral nacional, sino que además sean responsables antes sus trabajadores, el medio ambiente y las comunidades donde se establecen.</i><br />
<i><br /></i><br />
<i>Actualmente, existen miles de jóvenes que trabajan en este tipo de empresas y que de otra manera podrían estar en el sector informal o en el peor de los casos, desempleados.</i><br />
<i>Si durante los 10 minutos que estuviste en la feria llenaste el cuestionario (aunque no hayas hecho las pruebas), entonces aumentaste tus posibilidades de ser reclutado por empresas internacionales en busca de personas con conocimientos y habilidades como los que tú tienes, para nosotros eso es tiempo bien invertido. Más aún, cómo hubo algunas personas que no lograron terminar sus pruebas por falta de tiempo, los estaremos contactando para programar otro encuentro y que puedan terminar sus pruebas por completo, y te invitamos a ser parte de esta segunda fase, si es de tu interés. Si conoces otras personas que les gustaría participar en esta segunda fase, también estamos abiertos a recibirlos.</i><br />
<i>¡Aprovechamos para agradecer a todos los que asistieron a la feria con entusiasmo y optimismo!</i><br />
<i><br /></i><br />
<i>Saludos,</i><br />
<i>-Equipo Feria de Talento Tecnológico</i><br />
<i>talento.tecnologico@yahoo.com</i></div>
</div>necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com1tag:blogger.com,1999:blog-312313808727334146.post-12729088326282948732011-12-04T07:47:00.001-08:002011-12-04T08:09:45.566-08:00Sitio FCYS-UNI #WTF(Diciembre lo voy a dedicar a trolling aparentemente) Sabia que la FCYS estaba pasando por un mal rato en cuanto a las autoridades en general, pero en serio si van a sacar <a href="http://fcys.uni.edu.ni/">esto</a> como sitio oficial, les recomiendo no saquen nada; Ahora para aclarar yo no soy ninguna autoridad en diseño pero no hace falta ser un experto UX para hacer algunas percepciones.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUyDijJE1XhHa2U80gnIT0S9AckcG8LMrDXDD5FKI7C9Q9kjMFPkK22GBJLToibGHM8P0Y59cYlvIXCeaJU7nCFAxqMdzRC5ZqxMum08a2-xiSU4OhtmuEHd_38m6QYwDByXIjZsIa5xzj/s1600/Screen+Shot+2011-12-04+at+9.47.04+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="171" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUyDijJE1XhHa2U80gnIT0S9AckcG8LMrDXDD5FKI7C9Q9kjMFPkK22GBJLToibGHM8P0Y59cYlvIXCeaJU7nCFAxqMdzRC5ZqxMum08a2-xiSU4OhtmuEHd_38m6QYwDByXIjZsIa5xzj/s320/Screen+Shot+2011-12-04+at+9.47.04+AM.png" width="320" /></a></div>
<br />
<br />
(Dios mio por donde comienzo).<br />
<br />
<b>Colores e Imagenes</b><br />
<br />
Donde encontraron los colores por dios que bonito gradiente tiene el fondo, de hecho combina con el tono dorado de las letras y con el italica que le colocaron, me fascino simplemente "la creme de la creme".<br />
<br />
Es agradable ver la siguiente combinacion de colores<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja5ceJMT-eTrywVQRCW6S_IQLD0apa4Y0LWoDc92tXn0qH2I2pQ8VyuIUvEndG_5uwk6eZSE8atRTD7iyRYP7PnAsqP8BA5TMuaTQdEkMnYuKuEg_Z1Exzi2QBR39duH5S_D2wcu8ybHQ9/s1600/Screen+Shot+2011-12-04+at+9.55.40+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="90" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja5ceJMT-eTrywVQRCW6S_IQLD0apa4Y0LWoDc92tXn0qH2I2pQ8VyuIUvEndG_5uwk6eZSE8atRTD7iyRYP7PnAsqP8BA5TMuaTQdEkMnYuKuEg_Z1Exzi2QBR39duH5S_D2wcu8ybHQ9/s320/Screen+Shot+2011-12-04+at+9.55.40+AM.png" width="320" /></a></div>
<br />
Woao creo que le da ese toque especial que te quita el hambre, no se si es el verde color vomito, o el azul retro de 1998 o quizas lo maravilloso que "Maestria en Informatica en.." se mueva :O.<br />
<br />
<b>Los enlaces</b><br />
<b><br /></b><br />
HMTL? en serio HTML?, el hecho que lo de HTML5 este de moda no significa que las cosas tengan que ser .html, no es algo retro sino pasate por http://mejorando.la quizas te ayude un poco. Aqui algunos enlaces de ejemplo:<br />
<br />
http://fcys.uni.edu.ni/index.html<br />
http://fcys.uni.edu.ni/feria-2011.html<br />
http://fcys.uni.edu.ni/maestria.html<br />
<br />
Contactanos y las noticias no enlazan a nada.<br />
<br />
<br />
<b>El descaro</b><br />
<b><br /></b><br />
Promoviendo una maestria informatica con este sitio, ¿en serio? Ud como profesional iria a una maestria impartido por esta clase de institución. Y aun mas toda la info esta en un solo sitio.<br />
<br />
<br />
<b>Pero bueno...</b><br />
<br />
A nadie le gusta un criticón pero NO LO SIENTO, la facultad de ciencias y sistemas tiene que buscar formas reales de lidiar con su problematica y dejar de dar verguenza; simplemente me parece algo fuera de lugar este sitio de todos este es el peor que he visto en mucho tiempo.<br />
<br />
Si estas deacuerdo compartelo, ó comenta, y si no estas deacuerdo tambien dime ¿por que?<br />
<br />
Nota: Lo mas dinamico que tiene el sitio es la parte de facebook.<br />
<div>
<br /></div>necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com8tag:blogger.com,1999:blog-312313808727334146.post-77406068841823878342011-12-03T20:36:00.001-08:002011-12-04T04:51:49.421-08:00Feria Tecnologica 2011, PercepcionSin animo de ser demasiado troll con esto, la siguiente es una percepcion personal acerca de la famosa Feria Tecnologica que estuvo durante el jueves 1 y Viernes 2 de Diciembre en las instalaciones del Recinto Universitario Simon Bolivar e Invercasa segundo piso, en lo personal considero que fue una perdida de tiempo esperaba mas acerca del evento conferencias o empresas activamente participando en dicho vento sin embargo lo que me encontre es completamente diferente a mis expectativas y probablemente a las expectativas de muchos otros desarrolladores.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhuvaJ0mwHZaOXVKlC-SRcRJiCaHs16qaNiD7NXuqvz17WSUVbPddL3r6VklJ9mcp2bB0oEw0mc9xyDTkpCp8ltwALOQM6hArK-i0cLHcvYLuFSvtNvdt4ke99MqEQAA8DR5TcaKqTv2W8/s1600/Trollface.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhuvaJ0mwHZaOXVKlC-SRcRJiCaHs16qaNiD7NXuqvz17WSUVbPddL3r6VklJ9mcp2bB0oEw0mc9xyDTkpCp8ltwALOQM6hArK-i0cLHcvYLuFSvtNvdt4ke99MqEQAA8DR5TcaKqTv2W8/s1600/Trollface.jpg" /></a></div>
<br />
<br />
He escuchado la opiniones de muchos buenos desarrolladores que conozco y en realidad concordamos en lo siguiente, el obejtivo probable de la feria no es promover el talento nicaraguense ni las nuevas tecnologias, sino llevar a cabo un estudio previo de el nivel tecnologico que tiene Nicaragua y sus profesionales en tecnologias como .NET y Oracle. Muchos han tomado esto como un insulto particularmente por que es una medida muy especifica de medir el conocimineto de un desarrollador en torno a la tecnologias; algo que me parecio particularmente interesante es que Java estaba fuera de la feria en todo sentido (bueno y todo el resto de tecno que no tuvieran similitud con Micro$oft), simplemente me parece absurdo intentar hacer pruebas acerca de conocimientos de tecnologias cuando simplemente pones a disposicion una sola plataforma ....por favor.... ¬¬, muchas personas que han dedicado su vida como desarrollador han trabajado en PHP, Java y Python sin embargo esta suso dicha feria estaba orientada (al menos las pruebas) a desarrolladores .NET.<br />
<br />
<b>¿Que hay de las Empresas?</b><br />
<b><br /></b><br />
Se supone que empresas estarian apoyando a la Feria Tecnologica, yo fui el segundo dia y no pude tener la oportunidad de ver a Ninguna empresa publicitando u ofreciendo puestos en TI en dicha feria. Parecia mas que alguna empresa de reclutamiento estaba haciendo algun estudio para saber que tan fuerte o viable era el desarrollo de tecnologias Microsoft en Nicaragua, y el promocionar esta feria como algo mas me parecio mas un engaño publicitario que algo serio.<br />
<br />
Concluyo diciendo que me gustaria que me regresaran los 10 minutos que me tome estando en la feria y llenando un absurdo cuestionario que me pedia que evaluara mi nivel de conocimiento en tecnologias que a criterio de "¿no se quien?'" parecian las mas apropiadas. Realmente fallaron y si lo que buscan es intentar colocar fuentes de trabajo de mano de obra barata para empresas extranjeras buena suerte pero no pretendo ser parte de tal objetivo.<br />
<br />
Gracias Totales,<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdvX5hHzBA_OakiVywKl0HIUCkFsyyjJGhjnbkoFp-i4QnlRupzFVB9XlemFM9KY2UJiW8OTwzYxUvOwRKtN4Egksz18PvTULbp2Zve9Re2xzJEQ6Ixmy_03s9FJkcZgSBYNw_dJddjqKX/s1600/374776_184521458309390_180527658708770_381377_1476007661_n.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdvX5hHzBA_OakiVywKl0HIUCkFsyyjJGhjnbkoFp-i4QnlRupzFVB9XlemFM9KY2UJiW8OTwzYxUvOwRKtN4Egksz18PvTULbp2Zve9Re2xzJEQ6Ixmy_03s9FJkcZgSBYNw_dJddjqKX/s320/374776_184521458309390_180527658708770_381377_1476007661_n.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">"Feria" de talento "Tecnologico" 2011, RUSB</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Se despide necronet y hasta la proximanecronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com2tag:blogger.com,1999:blog-312313808727334146.post-74339655199745390252011-11-30T00:35:00.001-08:002011-11-30T03:40:41.441-08:00Aurora cool web inspector!It's been a long since I stopped being a firefox fan and start using Chrome as my developer tool, mainly because it seemed rather slow (subjective opinion probably my old PC could have something to do with it), but it's been a year and half, thing have change (owned a MAC and have less friends :D) so today I decided to take a peek at the new Aurora Release for 2012 particulary to the new developer tools that comes with it and from the screencast shared by Robert Nyman seems rather interesting.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8ZwRLasp72tvd2lXBshFBuIYYrV5J_shfHExHCAJAUzxbKJjAZlEcx2aXEaovh2aTx80Ze80ULJ27dmuMXOzOOYuvAaLWbq8WryILL3SCuaZ_j7CTQJdPwZSiug7lmCZuFn788tSxe80P/s1600/Screen+Shot+2011-11-30+at+2.44.28+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="156" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8ZwRLasp72tvd2lXBshFBuIYYrV5J_shfHExHCAJAUzxbKJjAZlEcx2aXEaovh2aTx80Ze80ULJ27dmuMXOzOOYuvAaLWbq8WryILL3SCuaZ_j7CTQJdPwZSiug7lmCZuFn788tSxe80P/s320/Screen+Shot+2011-11-30+at+2.44.28+AM.png" width="320" /></a></div>
<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/5TnGE3yl8dI" width="530"></iframe><br />
<br />
Yes, I do know that Aurora has not been released!, but these days who cares?!, about final releases when you can get it from the <a href="http://www.mozilla.org/en-US/firefox/channel/">Aurora Channel</a> and check the new hot developers tools.<br />
<br />
<b>Great inspector</b><br />
<b><br /></b><br />
It is really intuitive, although simpler I think it fill it's purpose just being a inspector, highlight the focused element, and have a nice bottom bar with the element hierachy<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3DghcWhMOqdY_uckS76hJC6ibQJMxGKVPfINNVjuB6F48SEMs875q4YYj5gK675kbeYAaXuP2gAzHZLP83CNzUBa7NgFeeZfIEEzQJs_V4bCXZKnt0rLKu2USPRoTbcv9yyoBSIlu1h41/s1600/Screen+Shot+2011-11-30+at+5.39.15+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="154" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3DghcWhMOqdY_uckS76hJC6ibQJMxGKVPfINNVjuB6F48SEMs875q4YYj5gK675kbeYAaXuP2gAzHZLP83CNzUBa7NgFeeZfIEEzQJs_V4bCXZKnt0rLKu2USPRoTbcv9yyoBSIlu1h41/s320/Screen+Shot+2011-11-30+at+5.39.15+AM.png" width="320" /></a></div>
<br />
Love the fact that it's easy to find elements specially those hover elements, and it does a terrific work with that.<br />
<br />
<b>Working with firebug not against</b><br />
<b><br /></b><br />
Firebug, have been a tremendous tool for developer, this is why Mozilla is probably complementing the firebug tool with the developer inspector within the browser; there is actually an article about <a href="http://blog.mozilla.com/devtools/2011/05/25/the-relationship-between-firebug-and-mozilla-developer-tools/">the relationship between firebug and mozilla developer tools</a> from Kevin Dangoor,<br />
<br />
<span class="Apple-style-span" style="color: #555555; font-family: Georgia; font-size: 18px; line-height: 27px;">"Across the board, we’re growing our investment in developer tools because there are huge opportunities to make life better for web developers."</span><br />
<br />
So my guess it's the the mozilla team is doing everything to enhance the firebug expierence to developer this will probably will help other developers tools out there and it's a good step foward.<br />
<br />
<br />
By the way, Aurora looks cleaner, nicer, and simpler, I think, she and I can work things out now.<br />
<br />
<br />necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-48239656911318104972011-11-28T00:40:00.001-08:002011-11-28T02:23:04.112-08:00Top 5 de Herramientas en AndroidEsas dichosas herramientas que te facilitan la vida en donde quiera que te desempeñes, aqui las 5 herramientas de las cuales debes de saber de su existencia, quien sabe quizas te salvan el día:<br />
<br />
<b>DDMS (Dalvik Debug Monitor Server)</b><br />
<b><br /></b><br />
Es una aplicacion en android que basicamente te facilita monitorear (daa!), muchos aspectos de tu aplicacion, si has alguna vez usado el Logcat, ó hecho un Screenshot, un profiling de tu aplicación entonces has utilizado DDMS. En eclipse el ADT lo coloca en diferentes vistas pero si ejecutas el comando "ddms" encontraras que la herramienta contiene exactamente todo lo que necesitas igual que en ADT.<br />
<i>Dentro de este paquete vamos a meter "traceview" aunque no es propio del DDMS perse, este lo usa cuando haces el profiling.</i><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxAOzKYBbMIJq1t6Dk7qlKVhnOdbQSpTrQuXU4WqCfhH7Bd6nyPeB5Nj00uKFy0BUsNPFubt7QVEYVGIzXZfGJb7SLTAYRVle5uIjZmnjfMYEdgkCBX87InXT0v0Yo5cjeLavx2_FTAWih/s1600/Screen+Shot+2011-11-28+at+2.44.20+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxAOzKYBbMIJq1t6Dk7qlKVhnOdbQSpTrQuXU4WqCfhH7Bd6nyPeB5Nj00uKFy0BUsNPFubt7QVEYVGIzXZfGJb7SLTAYRVle5uIjZmnjfMYEdgkCBX87InXT0v0Yo5cjeLavx2_FTAWih/s320/Screen+Shot+2011-11-28+at+2.44.20+AM.png" width="320" /></a></div>
<br />
<b>Draw-9-Patch</b><br />
<br />
Ojala, todos supieran de la necesidad de aprender a utilizar nine-patch de la forma correcta, es mas no te va tomar ni 20 min aprender a usarlo y en youtube hay una gran cantidad de videos con ejemplos de como usarlo. Basicamente lo que hace esta herramienta es agregar información adicional en pixeles a una imagen para que el dispositivo la interprete como padding y repeat pattern.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/KsET_GMd0kA" width="520"></iframe><br />
<br />
<b>HierarchyViewer</b><br />
<b><br /></b><br />
Alguna vez has estado en una interfaz y has dicho, ¿Algo aqui no esta bien?, ó de alguna manera consideras que la cantidad de vistas estan afectando el rendimiento de tu aplicacion. No estes divagando mas, android tiene un comando llamado hierarchyviewer que te permite ver a detalle cualquier interfaz grafica y te da un arbol grafico de la cantidad de vistas que tienes en tu aplicacion.<br />
<br />
Nota: el unico detalle es que trabaja solamente en el emulador, ó en equipos rooteados, la razon es que el hierarchy viewer te permite acceder a una cantidad de permisos que son propios del root ademas que puedes ver muchas cosas de los componentes visualez asi que podrias perfectamente ver el texto contenido en un Password.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQhzEQj2lgwquh2U1okNY_0_Cb1lUAWnLCCNNbinuqhX3Ci_JZ0nNlU3Eb2Yl5ZGvmW46Ndn6tWaWeVyD25dxPM63i-KicZ2PidEc3Qhy3CF9mEBZ8u-9uFR6MT93xavRopvTO4Wf2qM4D/s1600/hierarchyviewer-layout.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQhzEQj2lgwquh2U1okNY_0_Cb1lUAWnLCCNNbinuqhX3Ci_JZ0nNlU3Eb2Yl5ZGvmW46Ndn6tWaWeVyD25dxPM63i-KicZ2PidEc3Qhy3CF9mEBZ8u-9uFR6MT93xavRopvTO4Wf2qM4D/s320/hierarchyviewer-layout.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Android Assets Studio</b></div>
<div class="separator" style="clear: both; text-align: left;">
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: left;">
Esta es una herramienta web, para aquellos que no somos diseñadores y pasamos horas intentando seguir la guia de diseño de Android, esta herramienta es un milagro, basicamente te permite a partir de un icono crear diseño apropiado siguiendo con la guia oficial,</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic3GU01itgjPBgF5zDOI4q2R9RbngI2onoEQdxKMlxM3cfmNjyvYPK9esqVBthkmuWUPsEKMf1_IJq0cc4eXRjaNSdqOowj6KqZsYRON4cQmWAZryPP1k32cSoVhC_-LfOzEyl14pwlcYS/s1600/Screen+Shot+2011-11-28+at+3.14.45+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic3GU01itgjPBgF5zDOI4q2R9RbngI2onoEQdxKMlxM3cfmNjyvYPK9esqVBthkmuWUPsEKMf1_IJq0cc4eXRjaNSdqOowj6KqZsYRON4cQmWAZryPP1k32cSoVhC_-LfOzEyl14pwlcYS/s320/Screen+Shot+2011-11-28+at+3.14.45+AM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Link: <a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html">Android Studio</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<b>Android Icon Maker</b><br />
<br />
Similar a Assets Studio solo que esta esta orientada solamente a iconos, basicamente tomara tu imagen y te creara tres carpetas hdpi, mdpi, ldpi para distintas densidades. Es util si no tienes acceso a internet o si lo unico que necesitas es crear estos tres diferentes diseños para diferentes densidades.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyvTdPn36nM_j8a0QzCPvdepDWh2-5r_WW7hQP4sK5uE006rg0ymww4hvdPNpjvSH0y8BYYwfwUUAnOTK3bwk3flLwm6bWUKQYvjamB8yOS1HwV5WAqnl7heGYsH-gjQdgGwUKHKY1vg-K/s1600/Screen+Shot+2011-11-28+at+3.17.09+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyvTdPn36nM_j8a0QzCPvdepDWh2-5r_WW7hQP4sK5uE006rg0ymww4hvdPNpjvSH0y8BYYwfwUUAnOTK3bwk3flLwm6bWUKQYvjamB8yOS1HwV5WAqnl7heGYsH-gjQdgGwUKHKY1vg-K/s320/Screen+Shot+2011-11-28+at+3.17.09+AM.png" width="320" /></a></div>
<br />
<br />
Link: <a href="http://www.redrails.com.br/2011/09/android-icon-maker/">Android Icon Maker</a><br />
<br />
<br />
<br />
Espero que las herramientas anteriores las sepan usar con mucha sabiduria, y que este POST les haya servido, hasta la proxima.necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-44662027962671154222011-11-10T14:13:00.001-08:002011-11-10T15:40:59.546-08:00Bienvenido a la blogsferaBienvenido a la Blogsfera a mi colega y amigo <a href="http://claverisaac.wordpress.com/">Claver Isaac Acuña</a> quien actualmente disfruta desarrollando en Android, esperemos excelentes articulos de Java de su parte, El Programador Gargola te da la bienvenida!necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-12241171971209553512011-11-07T21:55:00.000-08:002011-11-10T02:00:43.202-08:00Eli-G codigo liberado<div style="text-align: justify;">
Las elecciones pasaron, y quizas el tiempo de Eli-G tambien, pero les aseguro es buen caso de estudio, para mi fue una buena experiencia el tener y saber el funcionamiento del mercado de Android y la situacion de los moviles Android en nicaragua crece pero aun son pocos; si estas interesado en hacer aplicaciones Android que coordine de buena manera metodos REST, y API's de terceros te recomiendo que le heches una ojeada. Por eso y mucho mas he decidido liberar el codigo de Eli-G.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>¿Que se libera?</b></div>
<ul>
<li style="text-align: justify;">Codigo fuente de la aplicacion Android.</li>
<li style="text-align: justify;">Documentacion del funcionamiento de la aplicacion.</li>
</ul>
<div style="text-align: justify;">
<b>¿Que no sera liberado?</b></div>
<ul>
<li style="text-align: justify;">La firma para la distribucion en el mercado, dado que es la firma que se utiliza para desplegar la aplicacion no estara como parte del codigo.</li>
<li style="text-align: justify;">Los API KEY para acceder al API de Twitter, por que esos son propios de clov3r.net</li>
</ul>
<div>
<div style="text-align: justify;">
Bien, habiendo aclarado ese detalle el codigo fuente se encuentra en <a href="https://github.com/necronet/Eli-G">github, descargalo, clonalo, pasalo, quemalo, criticalo, lo que sea con el</a>, no hay licencia de GPL, ó LGPLV3, ó Creative Commons, ó o MIT, la verdad nunca he entendido el principio del licenciamiento. Quizas si creo la proxima startup revolucionaria le voy a prestar atención hasta entonces es mas una licensia de <a href="http://en.wikipedia.org/wiki/Public_Domain">public domain</a>.<br />
<br />
<br />
<b>¿Dependencias?</b><br />
<b><br /></b><br />
Necesitas de la libreria de <a href="http://actionbarsherlock.com/">Sherlock Actionbar</a> para poder compilar la aplicacion.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<a href="http://4.bp.blogspot.com/-PhFGNW2t0II/Ti8gWeZ0fQI/AAAAAAAAAII/TzvlUcgRiYA/s1600/gnu.png" imageanchor="1" style="clear: right; display: inline !important; margin-bottom: 1em; margin-left: 1em; text-align: center;"><img border="0" height="195" src="http://4.bp.blogspot.com/-PhFGNW2t0II/Ti8gWeZ0fQI/AAAAAAAAAII/TzvlUcgRiYA/s200/gnu.png" width="200" /></a><a href="https://www.gstatic.com/android/market/net.clov3r.elig/hi-256-0-35dc3f27147fb924550fe6e7e16bcd7ca6263848" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://www.gstatic.com/android/market/net.clov3r.elig/hi-256-0-35dc3f27147fb924550fe6e7e16bcd7ca6263848" width="200" /></a></div>
</div>necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-57016171997596240832011-11-07T02:37:00.001-08:002011-11-07T02:37:41.844-08:00Dive into Android - Romain GuyThis is a great video about Android with Mr Romain Guy indeed he is one of the Android Team Star, first time I saw him was in <a href="http://www.youtube.com/watch?v=wDBM6wVEO70">The world of ListView on 2010</a>, so enjoy Dive into Android:<br />
<br />
<br />
<object height="395" width="395"></p>
<p>
<param name="movie" value="http://www.parleys.com/dist/share/parleysshare.swf"/>
</p>
<p>
<param name="allowFullScreen" value="true"/>
</p>
<p>
<param name="wmode" value="direct"/>
</p>
<p>
<param name="bgcolor" value="#222222"/>
</p>
<p>
<param name="flashVars" value="sv=true&pageId=2191"/>
</p>
<p>
<embed src="http://www.parleys.com/dist/share/parleysshare.swf" type="application/x-shockwave-flash" flashVars="sv=true&pageId=2191" allowfullscreen="true" bgcolor="#222222" width="395" height="395"/></p>
<p>
</object><br />necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-68981222640094298172011-10-29T14:50:00.000-07:002011-10-29T14:50:54.888-07:00Eli-G, Elecciones 2011<div class="separator" style="clear: both; text-align: center;">
<a href="https://market.android.com/details?id=net.clov3r.elig" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3DAYg7jWSMta242ZsTyYfHl-UT0fNDGQxGbTHhfr8gMe2cBlKh3yr4SXwkQeA6NJZE7wr78VXjCiUNo2PFbgJIKoU5ITKcs64RWu7NMC36idt4alfBFZR65zOWvdq8HdTPNEMACltuTHS/s200/web_hi_res_512.png" width="200" /></a></div>
<div style="text-align: justify;">
A escasso dias de comenzar las elecciones, y con las redes sociales en su boom, Elig-G es una aplicacion que te permite encontrar informacion facilmente acerca de los acontecimientos en estas elecciones en Nicaragua 2011. Conforme se acerque el dia de depositar el voto en las urnas se iran agregando mas funciones a la aplicacion, acerca de las tendencias e incluso resultados de la contienda.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La iniciativa es de <a href="http://clov3r.net/">Clov3r.net</a> que trabaja en la version para iPhone. Espero les guste cualquier sugerencia, comentario o bug no duden reportarla. Descarga <a href="https://market.android.com/details?id=net.clov3r.elig">Eli-G</a> en tu Android.</div>necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-40754961659166151182011-10-29T02:03:00.000-07:002011-10-29T02:03:58.346-07:00Jugando con Android + Python<div class="separator" style="clear: both; text-align: left;">
Me tomo un relax de algunas horas, para encontrar algo con que distraerme, y recorde la existencia de un proyecto que permitia usar Python para correr aplicacion Android, opte por probarlo y escribir un articulo al respecto.</div>
<br />
<b><span class="Apple-style-span" style="font-size: large;">Android Scripting</span></b><br />
<b><span class="Apple-style-span" style="font-size: large;"><br /></span></b><br />
<span class="Apple-style-span">Si no eres fanatico de Java, o si eres un amante de scripting particularmente de python o simplemente te gusta cambiar de vez en cuando lo aburrido de las llaves y los punto y comas y ademas quieres trabajar con Android, pues bien <a href="http://code.google.com/p/android-scripting/">SL4A</a> te parecera una buena opcion. (Si no la unica ¬¬). La descripcion del proyecto va asi:</span><br />
<span class="Apple-style-span"><br /></span><br />
<blockquote class="tr_bq">
<span class="Apple-style-span">Scripting Layer for Android (SL4A) lleva los lenguajes de scripting a Android, permitiendo editar y ejecutar script de manera interactiva directamente en dispositivos Android. Estos script tienen accesos a muchas APIS disponibles en el dispositivo, pero con una interfaz increiblemente simple que permite accederlos de forma sencilla.</span></blockquote>
<div style="text-align: center;">
<span class="Apple-style-span"><br /></span></div>
<span class="Apple-style-span"><br /></span><br />
<span class="Apple-style-span">Hay una guia detallada <a href="http://android-scripting.googlecode.com/files/Practical_Android_Projects_Ch05_Introducing_SL4A.pdf">Practical Android Project</a> que te guia paso a paso sobre lo que debes hacer. Pero aqui tienes mi confusa explicacion de como hacerlo.</span><br />
<span class="Apple-style-span"><br /></span><br />
<span class="Apple-style-span" style="font-size: large;"><b>Manos a la obra</b></span><br />
<span class="Apple-style-span" style="font-size: large;"><b><br /></b></span><br />
Existen dos formas de hacer esto, hacerlo directamente desde el dispositivo o bajarlo en tu ordenador y luego instalarlo con el ADB con el siguiente comando:<br />
<br />
<i>> adb install sl4a.apk</i><br />
<i><br /></i><br />
En lo personal prefiero hacerlo desde el telefono, me ahorro abrir la terminal, para hacerlo abre el navegador y <a href="http://code.google.com/p/android-scripting/downloads/detail?name=sl4a_r4.apk&can=2&q=">descargalo</a> desde el sitio del proyecto. Asi que operacion "Descarga e Instala", te dira que necesita muchas y muchos permisos, dandole el voto de confianza acepta e instala.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLaS5hUVT_VOLUmIYWgWcej_HhkRxSxdmaM8cCO7uKrz_seYwe4qxDF1bjDI2WvVx9GXSq70TXGMrbM0r-cBZWY5Z4KB1qoYw56n4AXRy5LwWIunoI1pARTwzU2HLGu9po7TiOAe7sqRuO/s1600/sl4A.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLaS5hUVT_VOLUmIYWgWcej_HhkRxSxdmaM8cCO7uKrz_seYwe4qxDF1bjDI2WvVx9GXSq70TXGMrbM0r-cBZWY5Z4KB1qoYw56n4AXRy5LwWIunoI1pARTwzU2HLGu9po7TiOAe7sqRuO/s320/sl4A.png" width="192" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_g0IUDJsFEzln5oBruOomxZ7fBGowhAkax8ZIxc7LJ_ZNzU-mCmm31TUjHWt1UgaUowYBuzYEf6jBy9djzkY_UCUj-fYAPjPIcYkKn_ECmydvg2TsNezsKT22ByjSIm-BpKoVuCrw46l_/s1600/sl4A.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_g0IUDJsFEzln5oBruOomxZ7fBGowhAkax8ZIxc7LJ_ZNzU-mCmm31TUjHWt1UgaUowYBuzYEf6jBy9djzkY_UCUj-fYAPjPIcYkKn_ECmydvg2TsNezsKT22ByjSIm-BpKoVuCrw46l_/s320/sl4A.png" width="192" /></a><br />
<br />
Ahora ya tienes SL4A, pero te hace falta algo, y no es amor es el interprete para ello necesitaras otro APK de <a href="http://code.google.com/p/android-scripting/downloads/detail?name=PythonForAndroid_r4.apk&can=2&q=">Python For Android</a>, igualmente en el sitio oficial puedes descargarlo.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZmhrEXHTRlWKCT8Bu-fJUXsKXpyJpaIVSLIolf28AXLuWkiuJ6Bu6C9A2M5vU4ZlkCO_f5PKGBnhWApYkE8QshAyJy8cAlEasmf4iLcixDJgO1OtOyMhmMsy6o_yxTEqgLNBpkDbGbVW1/s1600/sl4ainstall.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZmhrEXHTRlWKCT8Bu-fJUXsKXpyJpaIVSLIolf28AXLuWkiuJ6Bu6C9A2M5vU4ZlkCO_f5PKGBnhWApYkE8QshAyJy8cAlEasmf4iLcixDJgO1OtOyMhmMsy6o_yxTEqgLNBpkDbGbVW1/s320/sl4ainstall.png" width="192" /></a></div>
<br />
<br />
<br />
<div>
Una vez que necesitas extraer los extras para tener los script de python y curosear el codigo y como se ejecuta.</div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZmhrEXHTRlWKCT8Bu-fJUXsKXpyJpaIVSLIolf28AXLuWkiuJ6Bu6C9A2M5vU4ZlkCO_f5PKGBnhWApYkE8QshAyJy8cAlEasmf4iLcixDJgO1OtOyMhmMsy6o_yxTEqgLNBpkDbGbVW1/s1600/sl4ainstall.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"></a><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8RGYnmv4GDJIAMTzOqK5-DBVd1o6q8cCBNMqX1j54Zq0CLxJbp56on3JGEROd_GMpF-HQhe9StifOmW_12DRLni2tqPmobvFVRybh1FBtVj84t_a_EIDDYc5yvpYVjwCg3bVqKhE6JzVV/s1600/sl4ainstall2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8RGYnmv4GDJIAMTzOqK5-DBVd1o6q8cCBNMqX1j54Zq0CLxJbp56on3JGEROd_GMpF-HQhe9StifOmW_12DRLni2tqPmobvFVRybh1FBtVj84t_a_EIDDYc5yvpYVjwCg3bVqKhE6JzVV/s320/sl4ainstall2.png" width="192" /></a></div>
<br />
<br /><div>
Ahora si puedes ver la cantidad de Script en la aplicacion SL4A alli tienes para empezar a ver ejemplos basicos de SL4A.<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip7WVy_Whnd81yWXSRCm8ecEx_kSnXU4rbLZIjnCjtT5H2_MMfniPrRfXo-CXsFk09OaPLU61pDZxUJS8e1WEK8vGJq3JVTwcidnYwHQV48DxAIBG2-cCu1Y8SDCIzNT_CzG67Gw6XgGIi/s1600/pythonactionview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"> </a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSVQAyT3Yd7E-9ik0iAmkb9uL28Q7q6FuO_Dja4zp7CWKlf06317K_Ulbvg9lPefj-mKaCQpWR5cvBnZ3OzUTGcT1FDDZXie-hab0nawDC6CX4dESGWPfH0dB0OmErQ-bCH7UWhfi1igmy/s1600/sl4ascript.png" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSVQAyT3Yd7E-9ik0iAmkb9uL28Q7q6FuO_Dja4zp7CWKlf06317K_Ulbvg9lPefj-mKaCQpWR5cvBnZ3OzUTGcT1FDDZXie-hab0nawDC6CX4dESGWPfH0dB0OmErQ-bCH7UWhfi1igmy/s320/sl4ascript.png" width="192" /></a></div>
<br />
<div>
<br />Todos corren de maravilla, y todos los puedes editar "on the fly" como es costumbre con las aplicaciones python. Algo que me fascino es la simplicidad de los script, el hell_world.py se destaca, son 4 lineas de codigos en lo que en Android Java me tomaria al menos diez tan solo en la clase. Aqui el codigo</div>
<div>
<br /></div>
<div class="p1">
<br /></div>
<div>
<div class="p1">
<span class="s1">import</span><span class="s2"> android</span></div>
<div class="p1">
<span class="s2">droid = android.Android()</span></div>
<div class="p1">
<span class="s2">droid.makeToast(</span><span class="s3">'Hola Mundo'</span><span class="s2">)</span></div>
<div class="p2">
<span class="s4">print</span><span class="s5"> </span>'Hola Mundo'</div>
<div class="p2">
<br /></div>
<div class="p2">
La aplicacion tambien te permite correrlo en consola, ejecutarlo, modificarlo, renombarlo o eliminarlo.</div>
</div>
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip7WVy_Whnd81yWXSRCm8ecEx_kSnXU4rbLZIjnCjtT5H2_MMfniPrRfXo-CXsFk09OaPLU61pDZxUJS8e1WEK8vGJq3JVTwcidnYwHQV48DxAIBG2-cCu1Y8SDCIzNT_CzG67Gw6XgGIi/s1600/pythonactionview.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip7WVy_Whnd81yWXSRCm8ecEx_kSnXU4rbLZIjnCjtT5H2_MMfniPrRfXo-CXsFk09OaPLU61pDZxUJS8e1WEK8vGJq3JVTwcidnYwHQV48DxAIBG2-cCu1Y8SDCIzNT_CzG67Gw6XgGIi/s320/pythonactionview.png" width="192" /></a></div>
<div>
<br />Otra caracteristica super util es que te permite ver las trazas:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo6qAtubDXEwFeR6LhT75ea2zKKcWTbg45Gmrt6NTC2bD-C605XElLUyPjPKlSRI9lfmqH_THUePNM_O9wx4E_BUk9oYHvWSul2VmowfaJXPnXtb0dhpixNQqDzzKLA2jtCJ0PBlm1oZ6X/s1600/logcat.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo6qAtubDXEwFeR6LhT75ea2zKKcWTbg45Gmrt6NTC2bD-C605XElLUyPjPKlSRI9lfmqH_THUePNM_O9wx4E_BUk9oYHvWSul2VmowfaJXPnXtb0dhpixNQqDzzKLA2jtCJ0PBlm1oZ6X/s320/logcat.png" width="192" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<span class="Apple-style-span" style="font-size: large;"><b>Perspectivas del proyecto</b></span></div>
<div>
<span class="Apple-style-span" style="font-size: large;"><b><br /></b></span></div>
<div>
Es probable que siga jugando con SL4A, lo recomiendo ya sea si quieres empezar con Android y no te gusta java, o estas aburrido en la noche y quieres distraerte un poco, aprenderas una ó dos cosas nuevas, garantizado!</div>
<div>
<br /></div>
<div>
Si te preguntas si puedes llegar al mercado de Android con esto, pues lo creas o no, esto no es un juguete es una manera de desarrollar aplicaciones real!. La documentacion incluye la manera en como puedes crear <a href="http://code.google.com/p/android-scripting/wiki/SharingScripts#Scripts_as_APKs">Scripting as APK</a>. Y si ya existen app con esto incluido. <a href="https://market.android.com/details?id=org.androidideas.scriptlauncher">TaskBom</a> es una de ellas.</div>
<div>
<br /></div>
<div>
Existen otros proyectos similares que portan lenguajes a la plataforma Android. Dos que me llaman la atencion son:</div>
<div>
<br /></div>
<div>
<a href="http://android.xamarin.com/">MonoDroid</a></div>
<div>
<a href="http://lamp.epfl.ch/~michelou/android/">Scala 4 Android</a>(Una buena excusa para aprender scala)</div>
<div>
<br /></div>
<div>
Un detalle final, me sorprendio, sino me asusto la cantidad de <a href="http://code.google.com/p/android-scripting/wiki/Tutorials">tutoriales</a> para esta herramienta en el sitio oficial, si de algo se ha caracterizado python desde el principio es de su documentacion extrema y este proyecto no excepcion, no hay excusas par ano pasar unas horas probando y quien sabe si te gusta quizas hagas un DroidCopter:<div>
<br /></div>
<div>
<br /><div>
<br /></div>
<div>
Enlaces utiles de los cuales me <strike>copie</strike> inspire.<div>
<br /></div>
<div>
<a href="http://code.google.com/p/android-scripting/">SL4A sitio oficial</a></div>
<div>
<a href="http://stackoverflow.com/questions/3346970/starting-with-android-java-or-python-sl4a">Start with Android Java or Python</a></div>
<div>
<a href="http://stackoverflow.com/questions/5367956/can-i-sell-my-sl4a-app-on-android-market">Can i sell my APK on the Market</a><br /><br /><br /></div>
</div>
</div>
</div>
</div>necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-34893854375127055722011-10-24T21:03:00.000-07:002011-10-25T00:36:14.519-07:00No mas Switch a recursos en ICS<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHH28dBvlSgY-X2rPww6euy8d4bFbq7Nz_pWMFJae4FebE-7PM4AC6ekZitz9aylVHtPTQSrY6Wve1ABDV2XiNOrOr_Ls6Ert7_BCjHokjL4nu9E0FSGBP_5z9Qy7RA82DnzuxJ8_sHVyT/s1600/WTF.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHH28dBvlSgY-X2rPww6euy8d4bFbq7Nz_pWMFJae4FebE-7PM4AC6ekZitz9aylVHtPTQSrY6Wve1ABDV2XiNOrOr_Ls6Ert7_BCjHokjL4nu9E0FSGBP_5z9Qy7RA82DnzuxJ8_sHVyT/s320/WTF.jpg" width="320" /></a></div>
<br />
Por cierto una de las highlight mas grandes en IceCream Sandwich es que ahora no vamos a poder hacer switch a los recursos como constantes, por que veran :d ya no son constantes<br />
<br />
En otras palabras puedes irte olvidando de esto<br />
<br />
<br />
<span class="Apple-style-span" style="background-color: white; color: #444444; font-family: Arial, Verdana, sans-serif; font-size: 13px; line-height: 21px;"></span><br />
<div class="sites-codeblock sites-codesnippet-block" style="background-color: #efefef; border-bottom-color: rgb(211, 211, 211); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(211, 211, 211); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(211, 211, 211); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(211, 211, 211); border-top-style: solid; border-top-width: 1px; display: block; line-height: 1; padding-bottom: 0.5em; padding-left: 1em; padding-right: 0px; padding-top: 0.5em;">
<div>
<div>
<code style="color: #006000;"></code><br />
<div>
<code style="color: #006000;">int id = view.getId();</code></div>
<code style="color: #006000;">
</code><br />
<div>
<code style="color: #006000;">switch (id) {</code></div>
<code style="color: #006000;">
</code><span style="color: #006000; font-family: monospace;"> case R.id.button1:</span></div>
<div>
<code style="color: #006000;"> action1();</code></div>
<div>
<code style="color: #006000;"> break;</code></div>
<div>
<code style="color: #006000;"> case R.id.button2:</code></div>
<div>
<code style="color: #006000;"> action2();</code></div>
<div>
<code style="color: #006000;"> break;</code></div>
<div>
<code style="color: #006000;"> case R.id.button3:</code></div>
<div>
<code style="color: #006000;"> action3();</code></div>
<div>
<code style="color: #006000;"> break;</code></div>
<div>
<code style="color: #006000;">}</code></div>
</div>
</div>
<br />
<br />
Esto en lo personal implica una desventaja en especial para los menus donde creaba Switch creyendo que son mas legibles (y lo son ) ahora te toca migrar el codigo a else-if. No te preocupe no seamos llorones que Eclipse ADT te ayuda en esto.<br />
<br />
Mas informacion: <a href="http://tools.android.com/tips/non-constant-fields">Non-Constant-Field</a><br />
<br />
PD. Nunca comprendi por que habian dejado R.XX como constantes supongo que esta vez ya tuvieron el coraje para cambiarlo, disminuyendo el pool de recursos staticos y finales que existen en la Aplicaciones.necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-60035448953976617972011-10-18T23:31:00.000-07:002011-10-21T17:20:37.336-07:00IceCream Sandwich ya esta aqui<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/-F_ke3rxopc" width="520"></iframe><br />
<br />
Oficial Liberada la nueva version de Android, la noticia esta en el blog oficial de<a href="http://android-developers.blogspot.com/2011/10/android-40-platform-and-updated-sdk.html"> Android</a> como de costumbre lo instale lo antes posible; sin embargo por apresurado muchos de mis proyectos dieron un raro problema con el Asset Package así que tuve que actualizr 22 paquetes con el SDK Manager, en el ADT me gusta la nuevas caracteristicas:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg2WjJvOe7t0MykrV7h9MBLfPpdQfz8_dQnhyOfSd54YWItowwn1pbJgOzIB5umBXx8nxXtCCmI6gstAGKShnwHN53QF76SO_uL9fMEt6Hmy-KGO1nEnC3a_4BWVEQPQT2oxx-Vpl7NRNy/s1600/Screen+Shot+2011-10-18+at+10.17.07+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg2WjJvOe7t0MykrV7h9MBLfPpdQfz8_dQnhyOfSd54YWItowwn1pbJgOzIB5umBXx8nxXtCCmI6gstAGKShnwHN53QF76SO_uL9fMEt6Hmy-KGO1nEnC3a_4BWVEQPQT2oxx-Vpl7NRNy/s320/Screen+Shot+2011-10-18+at+10.17.07+PM.png" width="320" /></a></div>
<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Segregaron el ADV Manager y el SDK Manager</span><br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvD4bQaOBH0LducrdF_G9kpraQL7rOjYjD8PN-B4QbLTQnDQ7R8vLqNyMxMGn3-cL1JXegakVp5Vd7FdFant-LrdN4fGMNK_n8YNgRfNmHEJyPfL-__g2MOSEbI3coxxZI9cc2kOLRoxgR/s1600/Screen+Shot+2011-10-19+at+12.06.29+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvD4bQaOBH0LducrdF_G9kpraQL7rOjYjD8PN-B4QbLTQnDQ7R8vLqNyMxMGn3-cL1JXegakVp5Vd7FdFant-LrdN4fGMNK_n8YNgRfNmHEJyPfL-__g2MOSEbI3coxxZI9cc2kOLRoxgR/s320/Screen+Shot+2011-10-19+at+12.06.29+AM.png" width="223" /></a></div>
Muy bien siempre me pregunte por que lo habian colocado en el mismo lugar ahora el Android SDK Manager se ve diferente aunque el AVD Manager es el mismo.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">Mejoraron la Interfaz del Logcat</span><br />
<br />
Ahora permite filtros por aplicacion, ademas de tener un filtro automatico por sesion que aparentemetne detecta la aplicacion en la que estas y te permite filtrarla<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmlBLUjItpLggdrngzwinbPmgyvC4kkAwahPYSu4QxOTpEHUp2feesz8ltnNCQmBBBLyMagmbpDXZnTxuTon-24VSQTj_lFnw86U-ZKh8uvXVJXcAXzBb1VPbg7yrQEiJreKroggYBScc2/s1600/Screen+Shot+2011-10-19+at+12.16.45+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmlBLUjItpLggdrngzwinbPmgyvC4kkAwahPYSu4QxOTpEHUp2feesz8ltnNCQmBBBLyMagmbpDXZnTxuTon-24VSQTj_lFnw86U-ZKh8uvXVJXcAXzBb1VPbg7yrQEiJreKroggYBScc2/s320/Screen+Shot+2011-10-19+at+12.16.45+AM.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: -webkit-auto;">
<br /></div>
<div class="separator" style="clear: both; text-align: -webkit-auto;">
<span class="Apple-style-span" style="font-size: large;">Mejor editor visual</span></div>
<div class="separator" style="clear: both; text-align: -webkit-auto;">
<span class="Apple-style-span" style="font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
Agregaron muchas cosas en el ADT para mejorar el diseño de las aplicaciones, especialmente con los spinners y los layout relativos ahora se pueden apreciar de mejor manera, ademas de que que en los Popup Menu agregaron propiedades rapidas de cada elemento</div>
<div class="separator" style="clear: both; text-align: -webkit-auto;">
<br /></div>
<span class="Apple-style-span" style="font-size: large;">Otras Mejoras.</span><br />
<span class="Apple-style-span" style="font-size: large;"><br /></span><br />
Google ya publico las <a href="http://developer.android.com/sdk/android-4.0-highlights.html">mejoras</a> de esta actualizacion con su respectiva <a href="http://developer.android.com/sdk/api_diff/14/changes.html">diferencia de API</a>, en este aspecto Android Beam y Social API se ven extremadamente interesantes.<br />
<br />
<br />
<br />
<br />necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-70592115847706477372011-10-09T05:09:00.000-07:002011-10-09T05:09:04.551-07:00Aprendiendo IOS?<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;">He estado aprendiendo IOS a como muchas cosas por mi eucneta, me he topado con unos exelentes videos del Sr Mohammad Azam; los cuales me han ayudado muchisimo a empezar a desarrollar en esta maravillosa plataforma y sacarle algun provecho a Macbook Pro. Asi que esperen articulos acerca de IOS ademas de los acostumbrados de Android/Java. Hasta entonces pasenla bien:</span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"><span class="Apple-style-span" style="line-height: 18px;"><br /></span></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"><span class="Apple-style-span" style="line-height: 18px;"><br /></span></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif; line-height: 18px;"><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/c4plam8YOUU" width="520"></iframe></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif; line-height: 18px;"><br /></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif; line-height: 18px;"><br /></span><br />
<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span><br />
<span class="Apple-style-span" style="line-height: 18px;"><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: x-small;"><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/LrbOZO1LcBY" width="520"></iframe></span></span>necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0tag:blogger.com,1999:blog-312313808727334146.post-17996564556672001672011-10-09T05:05:00.000-07:002011-10-09T05:05:59.837-07:00Starting with IOS?<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;">I am starting to develope with IOS, and want to share some videos that I've found really helpful from a guy name <span class="Apple-style-span" style="line-height: 18px;">Mohammad Azam,</span><span class="Apple-style-span" style="line-height: 18px;"> I strongly recommend it if you are a begginner like me altough still need to focus more on technical language specification I do enjoy watching and learning, so expect some IOS Article real soon from my behalf, Until then have a nice day:</span></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"><span class="Apple-style-span" style="line-height: 18px;"><br /></span></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"><span class="Apple-style-span" style="line-height: 18px;"><br /></span></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif; line-height: 18px;"><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/c4plam8YOUU" width="520"></iframe></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif; line-height: 18px;"><br /></span><br />
<span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif; line-height: 18px;"><br /></span><br />
<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; line-height: 18px;"><br /></span><br />
<span class="Apple-style-span" style="line-height: 18px;"><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: x-small;"><iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/LrbOZO1LcBY" width="520"></iframe></span></span>necronethttp://www.blogger.com/profile/08889378603002663068noreply@blogger.com0