sábado, 9 de octubre de 2021

Python in shorts: how to change a str to Upper case

How to change a str to Upper case?

Today we'll do a pretty simple one, we'll make a str upper case. And to achieve this we are going to use a simple method that comes built in on str objects, "upper()".


Pretty neat right? Here we have an example:

>>> example_string = ‘This is a simple example’

>>> print(example_string)

“This is a simple example”

>>> print(example_string.upper())

“THIS IS A SIMPLE EXAMPLE”


Some useful links:

https://docs.python.org/3/library/stdtypes.html

https://www.w3schools.com/python/ref_string_upper.asp

https://www.programiz.com/python-programming/methods/string/upper


Como cambiar un str a Mayúsculas?

Ho vamos a hacer algo sencillo, pondremos un str en mayúsculas. Y para lograr esto utilizaremos un simple método que viene integrado en los objetos str, "upper()".


Muy listo, ¿verdad? Aquí tenemos un ejemplos:

>>> cadena_ejemplo = ‘Este es un ejemplo sencillo’

>>> print(cadena_ejemplo)

“Este es un ejemplo sencillo”

>>> print(cadena_ejemplo.upper())

“ESTE ES UN EJEMPLO SENCILLO”


Algunos enlaces sencillos:

https://docs.python.org/3/library/stdtypes.html

https://www.w3schools.com/python/ref_string_upper.asp

https://www.programiz.com/python-programming/methods/string/upper

jueves, 3 de septiembre de 2020

Android Recycler View and Kotlin - Loading images with Glide

English version: 

This article is meant to be a quick guide to implement Glide image loading library with Android's recycler view using Kotlin. The links to articles, Glide's github repo and more are at the end of this article.

Implementing Glide in your project is fairly simple and straight forward now a days, the first step we have to do is adding our projects dependencies as follows:

On our module build script file we'll add the following:

...
// Add this to your plug in definitions
apply plugin: 'kotlin-kapt'

...
dependencies {
...
def glideVersion = "4.4.0"
implementation "com.github.bumptech.glide:glide:$glideVersion"
kapt "com.github.bumptech.glide:compiler:$glideVersion"
...
}


This will enable the library on our project.


After adding the dependencies to the project it is quite easy to implemente, as easy as adding a couple of line in our Adapter, here is an example:

override fun onBindViewHolder(holder: FeedItemViewHolder, position: Int) {

val feedItem = getItem(position)
holder.itemView.setOnClickListener {
onClickListener.onClick(feedItem)
}
// get a reference to the image view where we'll be loading an image onto
val image =
holder.itemView.findViewById<ImageView>(R.id.image)

// pass the image view's context to the Glide's library with method to specify it's context
Glide.with(image.context)
// pass the image remote url
.load(feedItem.urlToImage)
// add the type of transition to display when loading
.transition(DrawableTransitionOptions.withCrossFade())
// and finally the reference to the image view we are going to be loading onto.
.into(image)
}


And that is about it! Going forward you would like to cache the images you've loaded to avoid making several loading request and thus, saving memory and making your app more efficient, something that is not covered in this article, but would be writing about it next time


Resources for this article:
https://bumptech.github.io/glide/int/recyclerview.html

https://www.zoftino.com/android-image-loading-using-glide-library

https://stackoverflow.com/questions/26890190/images-in-recyclerview

https://medium.com/@vlonjatgashi/using-glide-with-kotlin-5e345b557547


Versión en español:

 Este articulo tiene la intención de ser una guía rápida para implementar la librería para la carga de imágenes Glide junto con el recycler view de Android utilizando Kotlin. Los enlaces hacia los artículos, el repositorio de github de Glide's y más se encuentran al final de este artículo.


Implementar Glide en tu proyecto es bastante fácil y 
sencillo en estos días, el primer paso que tenemos que hacer es agregar las dependencias a nuestro proyecto de la siguiente maneraÑ

En archivo script de nuestro modulo agregamos lo siguiente:

...
// Agrega este plugin en tus definiciones
apply plugin: 'kotlin-kapt'
...
dependencies {
...
def glideVersion = "4.4.0"
implementation "com.github.bumptech.glide:glide:$glideVersion"
kapt "com.github.bumptech.glide:compiler:$glideVersion"
...
}


Esto habilitara la librería en nuestro proyecto.

Después de agregar las dependencias al proyecto es algo fácil de implementa, tan sencillo como agregar unas cuantas lineas en nuestro adaptador, aquí hay un ejemplo:

override fun onBindViewHolder(holder: FeedItemViewHolder, position: Int) {

val feedItem = getItem(position)
holder.itemView.setOnClickListener {
onClickListener.onClick(feedItem)
}
// obtén una referencia al image view en donde estaremos cargando la imagen
val image =
holder.itemView.findViewById<ImageView>(R.id.image)

// pasa el contexto del image view's a la librería de Glide
Glide.with(image.context)
// pasa el url remoto de la imagen
.load(feedItem.urlToImage)
// agrega el tipo de transición a desplegar cuando cargue
.transition(DrawableTransitionOptions.withCrossFade())
// y finalmente la referencia al image view en donde estaremos cargando la imagen
.into(image)
}


Y eso es todo! Más adelante sería bueno guardar cache de las imágenes ya cargadas para evitar hacer varias peticiones y así, ahorrar memoria y hacer tu app mas eficiente, algo que no esta cubierto en este artículo, pero si será algo que estaré escribiendo para la próxima vez.


Recursos para este artículo:
https://bumptech.github.io/glide/int/recyclerview.html

https://www.zoftino.com/android-image-loading-using-glide-library

https://stackoverflow.com/questions/26890190/images-in-recyclerview

https://medium.com/@vlonjatgashi/using-glide-with-kotlin-5e345b557547

sábado, 4 de abril de 2015

Magento: Godaddy virtualhost Installation - Error 500

Hello, anybody there?

    Good day and yes there it is, again a little while has passed(meaning it's been months) since the last post, but you guys will understand we all have to work(oh capitalism).

Although I didn't come empty handed, I am working on a magento installation integration(yeahp jack of all trades) and came across a particular issue when installing on a virtualhost(you guest right, godaddy).

It is a fair easy fix at the end, but quite elusive since it involves several configuration steps in order for magento to work properly on godaddy, and of course I am sharing this with you guys, since I got it from the internets(mashed up in several blogs though).

Setting up php programming language version:

This is a first, we have to setup the appropriate version of the language to match that of the magento version, in this case we are using magento 1.9.1.0 so the appropriate php vr should be 5.3(Although the tutorial -link at the end- mentions 5.4 I got to work with 5.3, so it should work with 5.4).


1)From your browser(chrome is preferible because godaddy plays better with it) click on the "more tab" and select "Programming Languages".

2)After the new page loads it will prompt you to select the desired php version.

3)Select the desired one as mentioned before and then click continue.


4)Let it do its thing usually after a minute or so depending(click on the refresh link every once on a while just to check it twice).

5)et voila! it is done.


Configure the .htaccess and php5.ini files correctly:

The following is done to insure the http server redirects and serves the correct pages and content allowing the use of apache mod_rewrite module.

1) .htaccess add rewrite base rule. This is used to specify magento where its magento base folder is(magento root folder relative to your virtualhost root folder)

2) Then add a rewrite directive to the end of the file. The following given here will rewrite any request to index.php, giving the original request as a query string argument to index.php.


3) Now we add the following directives to the php5.ini file(this file is located at the root of your virtualhost's folder, if not present create it with the exact name as specified here). This conditions ensure mod_rewrite will be enforce.


And there you go already and set to continue to a successful magento installation.

Hope you enjoyed the article and hope it was of some help for you guys/or gals, and please any comments, questions or doubts, or suggestions for the next article please leave a comment.



Hola, alguién ahí?

    Buen día y si hay alguién aquí de nuevo. Ha pasado un poco de tiempo(queriendo decir que han pasado unos meses) desde el último post, pero ustedes entenderán que todos tenemos que trabajar(oh capitalismo).

Aunque no he venido con las manos vacías, Me encuentro trabajando en una integración instalación de magento(así es juan camanei) y me encontré con una situación particular cuando estaba instalándolo en un virtualhost(adivinaron, godaddy).

De hecho la solución es bastante sencilla al final, pero es algo evasiva ya que involucra varios pasos de configuración para así magento poder funcionar apropiadamente en godaddy y por supuesto que voy a compartirlo con ustedes ya que la solución la obtuve de internets(aunque es una papilla de varios blogs).

Preparando la versión del lenguaje de programación php:

Esto es lo primero, tenemos que configurar la versión apropiada del lenguaje para igualar la de la versión de magento, en este caso utilicé magento 1.9.1.0 así que la versión apropiada de php deberá de ser la 5.3(Aunque el link del tutorial -al final de post- menciona la 5.4 tengo que trabajar con la 5.3, aunque debería de funcionar con la 5.4).


1)Desde tu navegador(chrome es preferible ya que godaddy juega mejor con este) haz click en "more tab" y selecciona "Programming Languages".

2)Después de que se haya cargado la nueva página se te solicitará que selecciones la versión de php apropiada.

3)Selecciona la deseada como mencionado anteriormente y haz click en "continue".


4)Deja que haga lo suyo y después de un minuto mas o menos dependiendo(haz click en el link de "refresh" de vez en cuando solo para verificar doblemente).

5)et voila! Esta listo.


Configura los archivos .htaccess y php5.ini correctamente:

Lo siguiente se realiza para asegurar que el servidor http redireccione y sirva las páginas y contenido correctos permitiendo el uso del modulo de mod_rewrite de apache.

1) Agrega .htaccess la regla "rewrite base". Esta es utilizada para especificar donde esta el folder base de magento(el directorio raíz de tu instalación magento relativo a el directorio raíz de tu virtualhost)

2) Ahora agrega una directiva de sobreescritura(rewrite) al final del archivo. La siguiente dada aquí va a sobreescribir cualquier request a el archivo index.php, dando el query original como un argumento string a index.php.


3) Ahora vamos a agregar las siguientes directivas a el archivo php5.ini(este archivo esta localizado en el directorio raíz de tu virtualhost's(si no esta presente crea uno ahí con el mismo nombre especificado aquí). Estas condiciones aseguran que el modulo mod_rewrite será enforzado.


Y ahí tienen listo para continuar una instalación exitosa de magento.

Espero hayan disfrutado el article y que haya sido de alguna ayuda para ustedes y porfavor cualquier  comentario, pregunta o duda, o sugerencia para un siguiente articulo porfavor dejen un comentario.



Links used / Enlaces utilizados:



Follow my links at delicious, and twitter:
@jesuislinn - delicous
@linnwar - twitter








miércoles, 21 de enero de 2015

Android Development: Android studio - Gradle DSL method not found: 'runProguard()'

Hello again people!

Happy new year to all of you(Late greetings). I am back for your misfortune with yet again a simple solution to a small headache, gradle on android studio, specifically when migration from the old stable release(0.8.11 correct me if I am not wrong.. that were stable and not on canary channel of course) from this ide to the new release(1.0.2 stable). I had a problem regading this migration(cause we all want the new cool stuff don't we - lolly pop ;)) when downloading, installing and configuring(I'll post about the process next week), and then opening a previous project to update to the new ide we have ourselves a little conundrum, when the project starts building we get the following error: "Gradle DSL method not found: 'runProguard()'"

  

 Which is sum is not cool because it would not let you build and run,  nor deploy or whatever you wanted to do(most actions depend on the ide building the app). So after using the search engine by choice google I found a neat and easy to implement solution with very small efford needed.

We just need to change a command in a line of the applications gradle build file in the app source folder file(we can do this with the current work space open for the app:
with:
This change is requiered on the new graddle version 2.1 using minifyEnable instead of on the previous ones it was "runProguard", this due to a change on the build systems inside ADT and ANT.  You can find more information about it on the official android developer site here and here.

After making this change save and then run graddle again to build your app:
Once built, then resyncronize gradle again click on the lynk named "sync now":
And you're set to go.

I really hope you this was usefull and you liked it, and please comment, share and follow.

other lynks consulted:
http://stackoverflow.com/questions/27016385/error26-0-gradle-dsl-method-not-found-runproguard
https://groups.google.com/forum/#!topic/adt-dev/4_-5NvxuFB0






Hola mi gente de nuevo!

Feliz año a todos ustedes(felicidades tardes). Estoy de regreso para su infortunio de nuevo con una mas solución simple a un pequeño dolor de cabeza, gradle en android especificamente cuando migramos de una versión estable(0.8.11 corrijanme si estoy en lo incorrect.. en que fue en esta versión estable y no en una canaria claro) de este ide a la nueva(1.0.2 estable). Tuve un problema en lo que respecta a esta migración(debido a que todos queremos la cosas nuevas chidas o no - lolly pop ;)) cuando descargamos, instalamos y configuramos(Voy a postear acerca del proceso la siguiente semana), y después abrimos un proyecto antereior para actualizarlo a el nuevo ide nos encontramos nosotros con un pequeño problema, cuando el proyecto comienza el proceso de construcción nosotros obtenemos el siguiente error: "Gradle DSL method not found: 'runProguard()'"

  

Lo cuál en resumen no esta nada chido porque no te permitirá construir y correr, ni desplegar o sea lo que sea que querías hacer(muchas acciones dependen de que el ide construya la aplicación). Entonces después de utilizar el buscador por elección encontre una manera fácil y limpia de implementer una solución con muy poco esfuerzo necesario.

Solo necesitamos cambiar un comando en una linea del archivo de construcción de gradle de la aplicación en el folder fuente app(podemos hacer esto en el espacio de trabajo actual abierto para la aplicación:
con:
Este cambio es requerido por la nueva versión de gradle 2.1 utilizando minifyEnable en lugar de lo que en la anterior "runProguard", Esto es debido a los cambio en el sistema de construcción dentro de ADT y ANT.  Puedes encontrar mas información acerca de ello en el sitio oficial de android developer site aquí y aquí.

Después de hacer estos cambios guardamos y después corremos gradle de nuevo para construir tu applicación de nuevo:
Una vez construido, entonces resincronizamos gradle de nuevo haciendo click en el enlace llamado "sync now":
Y ya estas listo para comenzar.

Realmente espero que hayan disfrutado de esto y que les haya sido útil y les haya gustado; y por favor comenten, compartan y siganme.


otros enlaces consultados:
http://stackoverflow.com/questions/27016385/error26-0-gradle-dsl-method-not-found-runproguard
https://groups.google.com/forum/#!topic/adt-dev/4_-5NvxuFB0

lunes, 15 de diciembre de 2014

Pc desktop web browser apps: Websapp

Hey people! Hello. Nice being back.
<br>
Just dropping by to let you in on an app I've found pretty usefull that I came across on a web article I saw on prodigy(yes, I sometimes read it, article reference at the bottom end of this article).
<br>
The app is intended to work on you pc, mac or linux desktop with most popular web browsers. The app is intended to work as im app to whatsapp users(although in the article is talked of as an alternative to telegram).
<br>
How it works is that you can send ims to whatsapp users although you need to specify a user name which you will like yo be identify with cause whatsapp users have no other way to know who you are.
<br>
Hope you like it, enjoy!
<br>
<br>
<br>
Que onda gente! Hola,
Es un gusto estar de vuelta.
<br>
Solo pasando a dejarles dayo de un app  que encontré muy útil que me crucé en un articulo de prodigy en la web (si, Algunas veces leo msn, la referencia al artículo esta al fondo del artículo).
<br>
El app tiene la intención de trabajar con la pc, mac o linux desktop con la mayoría de los navegadores web populares. El trabaja como un medio de im con usuarios de whatsapp users(aunque en el artículo se habla de ella como una alternativa a telegram).
<br>
Funciona mandado mensajes a usuarios de whatsapp aunque es necesario especificar un nombre de usuario ya que los usuarios de whatsapp no tienen manera de saber de quien viene.
<br>
Espero les guste, Disfruten!
<br>
Article link - link del articulo
http://www.msn.com/es-us/dinero/tecnologia/whatsapp-prepara-el-terreno-para-llegar-a-tu-escritorio-/ar-BBgPhdh?ocid=iehp
<br>
App link - link del app
http://websapp.co/whatsapp



lunes, 1 de diciembre de 2014

Mac OS - XCode: How to show line numbers in editor.

Well I'am back(not that anybody was missing me) with another short simple tip to use on your day to day coding, this time for Xcode on mac os; to be more specific XCode 6.1(Although it is mostly similar from version 4.x,5.x till 6.1).
XCode as many of you may already now, but for the ones that don't, is Apple's IDE for developing apps either safari, MacOS, iOS or ipod, and other kind of apps.
Today's well see viewing simple line numbers on the editor, this is not very difficult to achieve but if you were kind of confused like I was at the begining a little help comes in handy.
To show line numbers:
1-just open XCode(the option is accesible with or without opening a project), 2- and then go to the tool bar and click on the 'XCode' option that will be the first one from left to right, 3-Now to to 'Text editing' from the floating menu options tab, 4-and finally just check the 'Line numbers' box, et voila! this is ready.

Hope you liked it, and see you soon with something else I'll find usefull to share.
Saludos amigos!
Here are some screen shots:


domingo, 26 de octubre de 2014

Linux commands: chown

Hello people!, it's me I am back with kind of a remorse or a stroke of guilty conscience I am writing three posts today so I can break even with my goal of writing an article a week, although I had been slacking around for the past three, I won't deny it.
So For this post I will talk about directory permissions(in another one I will talk about file permissions). Directory permissions are important to the integrity of the file system and to maintain a healthy and secure environment in your computer. All directories when created are assigned an access permission that administrates the way users interact with them, so maintaining a good healthy relation will prevent from future file system headaches or nightmares, that is one user meddling with another user's directory or folder, or computer systems forbid application folders or core system one's(yiaks nooooo!).
For this in linux systems(or any other unix) all core folder's are assigned permissions only to the root user so any operation interaction by a non root user(e.g. deleting, renaming, moving, etc) will be prevented, cause we all know that message from terminal saying 'permission denied'.
So with all the previous in mind be mindful when sudoing or using as root the chown command. This command is used to change the permissions of the file system on any given directory folder or file in it. It will change the permission associated with it and if done incorrectly could backfire and leave you out of your user's directories(Major headache when sudoing in the root user's folder, danger danger!).
Usage is as follows:
$ chown user folder|file
This is an example for folders or directories:
$ chown myuser /folder-to-change-permissions/

This is an example for files:
$ chown myuser /folder/file-to-change-permissions.extension

The first one is just for folder and the later one is for files but if you want to change the folder and all of it's content permissions use the parameter 'R', which means recursive(for all of the non command line proficient user's like me):
$ chown -R myuser /folder/file-to-change-permissions.extension
And if you want to also make the permission changes available to all user's for a group in particular you do the following:
$ chown myuser:groups /folder/file-to-change-permissions.extension
Et voila! this is done and just to remind all you out there what is done in the terminal it hunts you for life! So once done it can only be undone by root user or sudoing, and really it is not undoing it is changing permissions again so be careful when dealing with core system directories and files as well as user's home directories if you have to work on these be very careful and don't do the mistake I did and change the sudoers file(long back when I started learning linux and command line, little did I know), cause there is no turning back from that one.
Well hope you've enjoyed and like the post leave your comments or suggestions below and for more references I left some links below.





Hola gente!, soy yo de regreso con un golpe de consciencia culposa o remordimiento hoy estoy escribiendo tres artículos para así ponerme al día con mi meta de escribir uno a la semana, aunque ya han sido tres semanas que he estado de flojo, no lo voy a negar.
Así que para este post voy a hablar de los permisos de directorio(en otro hablaré de los permisos de archivos). Los permisos de directorio son importante para mantener la integridad del sistema de archivos y un ambiente saludable y seguro en tu computadora(ordenador). Todos los directorios cuando son creados se les asigna permisos de acceso los cuales administran la manera en que los usuarios interactuan con ellos, entonces para mantener una relación saludable y prevenir dolores de cabeza o pesadillas con el sistema de archivos, ya sea un usuario operando sobre un directorio o folder de otros; ó que los sistemas de computación lo prohiban, con las carpetas de las aplicaciones o del núcleo del sistema(Auch Noooooo!).
Por esta razón los sistemas linux(o unix que es lo mismo casí) todas las carpetas del núcleo del sistema o escenciales son asignadas con permisos solamente para el usuario root así que cualquier interacción por cualquier usuario que no sea root (e.g. borrar, mover, renombrar, etc) será prevenidas, porque ya todos conocemos ese mensage de la terminal diciendo 'permission denied'.
Así que teniendo en mente todo lo anterior seamos conscientes cuando hagamos sudo o utilicemos el usuarios root al utilizar el comando chown. Este comando es utilizado para cambiar los permisos del sistema de archivos en cualquier carpeta o directorio dado, o los archivos contenidos en él. Este comando cambiará los permisos asociados a este y sí hecho incorrectamente podrá darnos el tiro por la culata y dejarnos fuera de los directorios del usuario(Dolor de cabeza mayor si lo hacemos con sudo en el folder del usuario, péligro péligro!).
El uso es como se muestra a continuación:
$ chown user folder|file
Este es un ejemplo para carpetas ó directoios:
$ chown myuser /folder-to-change-permissions/

Este es para archivos:
$ chown myuser /folder/file-to-change-permissions.extension

El prímero es para carpetas y el siguiente es para archivos pero si lo que queremos es cambiar los permisos de la carpeta y todo su contenido entonces agregaremos el parámetro 'R', el cual significa recursivo(para todos aquellos que como yo no son muy versados en linux):
$ chown -R myuser /folder/file-to-change-permissions.extension
Y sí lo que quieres es que los cambios de permisos esten disponibles a todos los usuarios de un grupo en particular has lo siguiente:
$ chown myuser:groups /folder/file-to-change-permissions.extension
Et voila! Esto esta hecho y solo como recordatorio para todos ustedes que lo que se hace en la terminal te perseguirá de por vida! Así que una vez hecho un cambio solo puede ser deshecho por el usuario root o haciendo sudoing, y realmente no es deshacer sino volver a cambiar permisos así que tengan mucho cuidado cuando manejes directorios y archivos del sistema así como con el directorio home de los usuarios especialmente del usuario root si tienes que trabajar en ellos y no comentas el error que yo y cambiar el archivo sudoers(hace tiempo atrás cuando recién comenzaba a aprender linux y la linea de comandos), porque de ese error no hay regreso.
Bueno espero que hayan disfrutado y gustado el post, dejen sus comentarios o sugerencias debajo y para mas referencias les dejo algunos enlaces debajo.