<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archivos de Programación &#187; Endless Manifesto</title>
	<atom:link href="https://kadai.com.mx/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Un blog personal sobre muchas cosas, en especial videojuegos, descubrimientos y escritos al azar.</description>
	<lastBuildDate>Sat, 25 Jan 2020 16:26:40 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://kadai.com.mx/wp-content/uploads/2017/08/new-favicon-88x88.png</url>
	<title>Archivos de Programación &#187; Endless Manifesto</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">126519727</site>	<item>
		<title>Filtros y acciones: Como extender WordPress</title>
		<link>https://kadai.com.mx/como-extender-wordpress-filtros-acciones/</link>
					<comments>https://kadai.com.mx/como-extender-wordpress-filtros-acciones/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Thu, 28 Feb 2019 16:57:56 +0000</pubDate>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[actions]]></category>
		<category><![CDATA[extender]]></category>
		<category><![CDATA[filters]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=1489</guid>

					<description><![CDATA[<p>Extender WordPress usando filtros y acciones es muy fácil. En esta entrada te muestro algunas de las formas de como hacerlo.</p>
<p>The post <a href="https://kadai.com.mx/como-extender-wordpress-filtros-acciones/">Filtros y acciones: Como extender WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p style="text-align:center"><em>(Después de un par de años de estar probando y desarrollando para WordPress, he decidido el volver a <a rel="noreferrer noopener" aria-label="re-escribir el tema de una entrada anterior (opens in a new tab)" href="https://kadai.com.mx/2017/07/01/hooks-y-transients-en-wordpress/" target="_blank">re-escribir sobre un tema de una entrada anterior</a>.)</em></p>



<p>Ampliar las funcionalidades de WordPress es realmente sencillo. Como todo framework, aprender como extenderlo puede ser intimidante. Pero una vez que se entiende su funcionamiento, todo se abre paso.</p>



<p>Entonces, desarrollar plugins o extender temas en WordPress se vuelve mucho más fácil.</p>



<span id="more-1489"></span>



<h3 class="wp-block-heading">Extender WordPress: Los filtros y acciones son tus amigos</h3>



<p>La forma en la cual nosotros podemos agregar nuevas funcionalidades a WordPress es, normalmente, usando los llamados <em>filtros y acciones</em>.</p>



<p>Estos también son llamados <em>hooks</em>, o ganchos en español.</p>



<p>Los filtros y las acciones son, en esencia, lo mismo. Pero cambian en un aspecto fundamental: <em>Que los filtros regresan datos y que las acciones nos permiten alterar el comportamiento.</em></p>



<p>Cada uno de estos <em>hooks</em> posee un nombre único, el cual describe de forma general en donde se encuentra, en que momento se ejecuta o el tipo de datos los cuales puedes cambiar.</p>



<p>Para poder usar un filtro o acción, nosotros debemos primero <em>pegarnos</em> a dicho hook. Esto se logra usando las funciones <em><a rel="noreferrer noopener" aria-label=" (opens in a new tab)" href="https://developer.wordpress.org/reference/functions/add_filter/" target="_blank">add_filter</a></em> o <em><a rel="noreferrer noopener" aria-label="add_action (opens in a new tab)" href="https://developer.wordpress.org/reference/functions/add_action/" target="_blank">add_action</a></em> de WordPress.</p>



<p>Debemos usar <em>add_filter</em> si nos vamos a adjuntar a un filtro y <em>add_action</em> si se trata de una acción.</p>



<p>Con esas funciones, nosotros podemos declarar a cual hook queremos unirnos y cual será el código que queremos que se ejecute.</p>



<p>Esta es la forma en la cual lo hacemos:</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=filtro-001.php"></script>
			</div>
		


<p>En este ejemplo, adjuntamos una función a los filtros <em>script_loader_src</em> y <em>style_loader_src</em>. Cuando estos filtros se ejecuten, van a pasar un valor que tomará la función como la variable <em>$cadena</em>. La cual a su vez regresará un valor ya modificado.</p>



<p>De esta forma, podemos hacer prácticamente cualquier cosa con los datos que reciba nuestro código.</p>



<p>Hay que recordar que un filtro normalmente espera que se regrese algún dato. Por lo cual, de no hacerlo, es posible que suceda un comportamiento no esperado.</p>



<h3 class="wp-block-heading">¿Que hay de las acciones?</h3>



<p>En el caso de las acciones, las cosas son un poco diferentes.</p>



<p>Normalmente, las acciones se usan para agregar un comportamiento dentro de WordPress o un plugin.</p>



<p>Las acciones normalmente las usamos para imprimir HTML, agregar estilos o javascript, agregar páginas administrativas, entre otras tareas que no requieran regresar datos.</p>



<p>Un ejemplo de esto es la acción <em>wp_enqueue_scripts</em>, con la cual normalmente se agrega todo el Javascript y el CSS que se usará en el Front-end.</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=accion-001.php"></script>
			</div>
		


<p>Pero incluso podemos ir más allá al extender WordPress.</p>



<p>Por ejemplo, podemos usar la acción <em>admin_menu</em> para crear páginas nuevas dentro del back-end de WordPress con la función <em>add_submenu_page</em>.</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=accion-002.php"></script>
			</div>
		


<h3 class="wp-block-heading">¿Qué hay de las funciones anonimas y clases?</h3>



<p>Normalmente el código que nosotros adjuntaremos a los filtros o acciones, para extender WordPress, estarán dentro de una función.</p>



<p>Lo que normalmente implica que se deberá de crear una función dedicada totalmente a dicho filtro o acción. Misma que estará disponible para el resto de la aplicación.</p>



<p>Una forma de solucionar esto es <em>declarando</em> la función de callback de manera anónima al momento de pegarnos al filtro o acción.</p>



<p>Por ejemplo, podemos hacer lo siguiente:</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=annon-001.php"></script>
			</div>
		


<p>De esta forma, la función estará solamente disponible para el filtro la cual la invocó.</p>



<p>Sin embargo, esto también implica que nuestro código se vuelve poco flexible.</p>



<p>Por ejemplo, una ventaja de usar el método tradicional, es que podemos usar <a rel="noreferrer noopener" aria-label="remove_filter (opens in a new tab)" href="https://developer.wordpress.org/reference/functions/remove_filter/" target="_blank"><em>remove_filter</em></a> para quitar código que ya este adjuntado. Algo que no es posible con las funciones anónimas.</p>



<p>En el caso de las <em>clases</em>, nosotros debemos de <em>dedicar</em> el método <em>__construct</em> para definir las acciones y filtros que usaremos.</p>



<p>Recordando que, al momento de agregar los filtros o acciones, deberemos referenciar la propia clase:</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=class-001.php"></script>
			</div>
		


<h3 class="wp-block-heading">Extiende tus temas o plugins con filtros y acciones</h3>



<p>Los filtros y las acciones no son exclusivas del núcleo principal de WordPress, si no que estos pueden ser implementados tanto en temas como en plugins.</p>



<p>Con esas definiciones, nosotros podemos saber que datos podemos cambiar de otro software desarrollado para WordPress.</p>



<p>Incluso podemos indicarle a otros programadores donde pueden adjuntar funciones para extender la funcionalidad de nuestro software.</p>



<p>Por ejemplo, para agregar un filtro a un tema o plugin, solo hace falta agregar algo como esto:</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=applyfilters-001.php"></script>
			</div>
		


<p>En este caso se creo un filtro de nombre <em>filtrar_valor</em> con <a rel="noreferrer noopener" aria-label="apply_filters (opens in a new tab)" href="https://developer.wordpress.org/reference/functions/apply_filters/" target="_blank"><em>apply_filters</em></a> al cual se pueden adjuntar otras piezas de software usando la función <em>add_filter</em>.</p>



<p>Debido a que se trata de un filtro, debemos asegurarnos de que el resultado sea asignado a una variable. Preferentemente la propia variable filtrada.</p>



<p>Pero eso cambia cuando se usa la función <em><a rel="noreferrer noopener" aria-label="do_action (opens in a new tab)" href="https://developer.wordpress.org/reference/functions/do_action/" target="_blank">do_action</a></em>, con la cual definimos acciones. En ese caso no hace falta asignar ningún valor.</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=actions-001.php"></script>
			</div>
		


<h3 class="wp-block-heading">Extender WordPress y plugins: Encuentra esos filtros y acciones</h3>



<p>Otra de las cosas que puedes hacer con las funciones <em>apply_filters</em> y <em>do_action</em> es el encontrar donde podemos extender el software.</p>



<p><em>¿Quieres cambiar algo de un plugin pero no sabes donde se puede? ¿Quieres hacer algo pero solo se te ocurre el modificar el original?</em></p>



<p>La solución está en buscar por las funciones <em>apply_filters</em> y <em>do_action</em> en el código fuente.</p>



<p>Muchos desarrolladores agregan filtros y acciones a sus plugins o temas para permitirle a otros hacer más. Un buen ejemplo de esto es el caso que tuve con <a rel="noreferrer noopener" aria-label="Swift Performance (opens in a new tab)" href="https://kadai.com.mx/2018/10/31/swift-performance-lite-acelera-tu-sitio-web/" target="_blank">Swift Performance</a>.</p>



<p>No siempre encontrarás documentación sobre estos hooks, pero ver la función en el contexto de la aplicación te ayudará a entender que es lo que sucede.</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=swift-context.php"></script>
			</div>
		


<p>A veces, solo hace falta encontrar el hook correcto en el código para hacer las cosas.</p>



<h3 class="wp-block-heading">Aprende a usar las prioridades y argumentos</h3>



<p>Otra de las claves para extender WordPress correctamente es el saber en que momento debemos de ejecutar nuestro código.</p>



<p>Tanto <em>add_filter</em> como <em>add_action</em> tienen un parámetro de prioridad, el cual es muy importante para definir correctamente el orden de ejecución.</p>



<p>La prioridad está representada en un número, el cual mientras sea más bajo, más tarde se ejecutará el código que queremos. El default es 10.</p>



<p>Esta prioridad es de gran ayuda en casos en los cuales queremos hacer algo antes que los demás plugins, por ejemplo.</p>



<p>Con una prioridad de 5, podríamos entonces cargar nuestros scripts con la acción <em>wp_enqueue_scripts</em> antes de que otras librerías lo hagan.</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=earlier-001.php"></script>
			</div>
		


<p>Pero con una prioridad de 999, nos aseguramos de que todo lo demás ya haya terminado. Por si queremos filtrar los datos que otro plugin cambió, o asegurarnos de que una dependencia ya exista.</p>



<p>Finalmente, el último parametro de <em>add_filter</em> o <em>add_action</em> nos permite definir hasta cuantos parametros de entrada vamos a aceptar desde el filtro o acción.</p>



<p>Normalmente solo se pasa un parametro. Pero en algunas ocaciones, se pasan más datos desde las funciones <em>apply_filters</em> o <em>do_action</em>.</p>



<p>Cuando es así, y queremos usar esos datos, podemos indicarle a WordPress que queremos esos datos:</p>



			<div class="github-gist-container">
				<script type="text/javascript" class="script-github-gist" src="https://gist.github.com/kadai/2499ddc6bff7e0907051b4eff19267c1.js?file=arguments-001.php"></script>
			</div>
		


<h3 class="wp-block-heading">Para cerrar</h3>



<p>Como se puede apreciar, el extender WordPress es ralmente sencillo. En especial cuando aprendes a usar y encontrar los puntos en los cuales puedes adjuntar tu propio código.</p>



<p>Personalmente, las acciones son las que más oportunidades ofrecen a la hora de personalizar las funciones. En especial por que se disparan en momentos clave.</p>



<p>Sin embargo, nosotros podemos personalizar practicamente todo. Solo hace falta ver la <a rel="noreferrer noopener" aria-label="lista de acciones (opens in a new tab)" href="https://codex.wordpress.org/Plugin_API/Action_Reference" target="_blank">lista de acciones</a> y de <a rel="noreferrer noopener" aria-label="filtros (opens in a new tab)" href="https://codex.wordpress.org/Plugin_API/Filter_Reference" target="_blank">filtros</a> disponibles en WordPress.</p>



<p>Solo es cuestión de invertir suficiente tiempo en leer el suficiente código e ir probando cual filtro o acción se ajusta  alo que necesitamos.</p>
<p>The post <a href="https://kadai.com.mx/como-extender-wordpress-filtros-acciones/">Filtros y acciones: Como extender WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/como-extender-wordpress-filtros-acciones/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1489</post-id>	</item>
		<item>
		<title>Modificando Top Posts de Jetpack</title>
		<link>https://kadai.com.mx/modificando-top-posts-de-jetpack/</link>
					<comments>https://kadai.com.mx/modificando-top-posts-de-jetpack/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Mon, 26 Jun 2017 06:22:12 +0000</pubDate>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jetpack]]></category>
		<category><![CDATA[personalización]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=563</guid>

					<description><![CDATA[<p>Modificar el widget de Top Posts de Jetpack es algo realmente sencillo. En especial por lo fácil que es hacer muchas modificaciones a WordPress gracias a sus hooks. Para quienes no lo sepan, un hook es básicamente un punto en el cual nos podemos colgar para realizar una acción. Normalmente una función. En mi caso, [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/modificando-top-posts-de-jetpack/">Modificando Top Posts de Jetpack</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Modificar el widget de Top Posts de Jetpack es algo realmente sencillo. En especial por lo fácil que es hacer muchas modificaciones a WordPress gracias a sus hooks.</p>
<p style="text-align: justify;">Para quienes no lo sepan, un hook es básicamente un punto en el cual nos podemos colgar para realizar una acción. Normalmente una función.</p>
<p style="text-align: justify;">En mi caso, yo necesitaba cambiar la apariencia de widget “Top Posts” de Jetpack.</p>
<p><span id="more-563"></span></p>
<p style="text-align: justify;">Ya que el mismo no tiene forma de cambiar la forma en el cual se muestran las entradas. Y menos para cambiar el tiempo a considerar.</p>
<p style="text-align: justify;">El objetivo es que se pareciera lo más posible al de “Entradas Recientes”.</p>
<h3>Primero, investigamos</h3>
<p style="text-align: justify;">Después de estar revisando durante un buen rato, <a href="https://jetpack.com/2016/01/12/hooks-customize-top-posts-pages-widget/" target="_blank" rel="noopener">encuentre parte de mi solución</a> en el sitio oficial de Jetpack.</p>
<p style="text-align: justify;">En ella, simplemente debo de adjuntar dos funciones al archivo “functions.php” de mi tema. Una vez hecho el tema hijo, agrego los segmentos y ya tengo la primera parte del problema resuelto.</p>
<p style="text-align: justify;">Con el hook “<em>jetpack_top_posts_days</em>” nosotros podemos modificar el número de días que se han de considerar para generar las entradas más populares.</p>
<p style="text-align: justify;">Mientras que con “<em>jetpack_widget_top_posts_after_post</em>” podemos agregar cualquier dato que queramos. En este, igualmente aprovecho para agregar la fecha, aunque descubro que no puedo cambiar los tags del nombre de la entrada. Lastima, eso significa que una parte de la solución va a tener que ser puro CSS.</p>
<p>Termine agregando las siguientes funciones:</p>
<p>View the code on <a href="https://gist.github.com/kadai/014357ee5bbc8f0bf0607378d677374c">Gist</a>.</p>
<p>Le agregue la clase «widgets-list-layout-links» al «Div» para que pudiéramos cambiar su apariencia vía CSS.</p>
<h3>Escarbamos más dentro de Top Posts de Jetpack</h3>
<p style="text-align: justify;">Una de las grandes ventajas del Open Source es que podemos mirar el código fuente de las aplicaciones que queramos. En mi caso, encontré el <a href="https://github.com/Automattic/jetpack/blob/3.8.2/modules/widgets/top-posts.php" target="_blank" rel="noopener">código fuente del widget</a> que quería. Pero, no encontré una forma de como cambiar el tamaño de las imágenes mostradas. Ni tampoco de como evitar que use el servicio Phonon.</p>
<p style="text-align: justify;">Posiblemente hay alguna forma de evitar lo último, pero por ahora ese no era un tema de alta prioridad.</p>
<p style="text-align: justify;">Por fortuna, veo que “<em>jetpack_top_posts_widget_image_options</em>” es lo que necesito para solucionar mi problema con los tamaños de la imagen.</p>
<p style="text-align: justify;">Las imágenes aparecían con un tamaño de 40px, pero las necesitaba en al menos 150px para que se vieran “decentes”.</p>
<p style="text-align: justify;">Tras escarbar un poco en que datos le pasaba a mi función, simplemente hago lo siguiente:</p>
<p>View the code on <a href="https://gist.github.com/kadai/b3def575604211b9e93cb926566bd8c4">Gist</a>.</p>
<p>Así es, simplemente sobre-escribo lo que tenga el array y ya estamos. Al menos con PHP.</p>
<h3>Estilizando Top Posts de Jetpack con CSS</h3>
<p style="text-align: justify;">Imitar la apariencia en el widget Top Posts de Jetpack fue un tanto especial.</p>
<p style="text-align: justify;">Tuve que usar mucho el Inspector de código de Google Chrome para darme una idea de donde se estaban estilizando las cosas.</p>
<p style="text-align: justify;">El primer gran problema era que Top Posts usa “divs” internos. Por lo cual ordenar el contenido podía ser un poco difícil. Esto por que el tema original lo hacia diferente.</p>
<p style="text-align: justify;">Pero con esto lo logré:</p>
<p>View the code on <a href="https://gist.github.com/kadai/0d68fef74055ef7b494a7e2295106bc5">Gist</a>.</p>
<p>Con este segmento, cambio la apariencia del icono mostrado para los Top Posts.</p>
<p style="text-align: justify;">Mientras que no soy fan del <em>!important</em>, parece ser la única manera en la cual se aplicaba el cambio en su tamaño. Todavía tenia que mover el texto adjunto un poco y darle mejor apariencia.</p>
<p>View the code on <a href="https://gist.github.com/kadai/c64bdf1b23db148e62746e191387f71f">Gist</a>.</p>
<p style="text-align: justify;">Con estos ya estamos casi listos. Esto cambia la apariencia de los enlaces en el interior del espacio del widget de Top Posts. Cambiamos la fuente, así como el espacio, el color y el comportamiento cuando pasamos el ratón sobre ellos.</p>
<p style="text-align: justify;">Incluso pegamos un poco más el texto a la imagen, para darle una mejor consistencia.</p>
<p>View the code on <a href="https://gist.github.com/kadai/477d643614a586527c85bb4eed469fc7">Gist</a>.</p>
<p style="text-align: justify;">Y con esto cambiamos la apariencia de la fecha mostrada. La hacemos más pequeña y cambiamos su color. Para que se parezca lo más posible al original.</p>
<h3>Conclusión</h3>
<p style="text-align: justify;">Los cambios en el CSS mostrados aplican solamente al tema que uso actualmente, “Lovecraft”. Diferentes temas tendrán diferentes aspectos que deberás de cambiar para que se vean de la forma en la cual necesitas.</p>
<p style="text-align: justify;">En mi caso, solo era emular. Y aun así tuve que meter mano para realizar varios cambios.</p>
<p style="text-align: justify;">Lo que si me quedo claro, es que siempre será mejor el crear un tema hijo. Aun cuando no juguemos con el código HTML o PHP del tema.</p>
<p style="text-align: justify;">¿Esto por qué? Ya que no sabemos en que momento vamos a necesitar hacer cambios a la apariencia que requieran de hacer uso de un tema hijo. De esa forma ya estamos preparados de antemano.</p>
<p style="text-align: justify;">Si bien existen formas de agregar el código mediante plugins, para mi es mejor hacerlo directamente en el tema.</p>
<p style="text-align: justify;">Aunque bueno… los cambios hechos igual podrían agregarse como un plugin, eventualmente. Esa es la gran flexibilidad que WordPress da.</p>
<p>The post <a href="https://kadai.com.mx/modificando-top-posts-de-jetpack/">Modificando Top Posts de Jetpack</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/modificando-top-posts-de-jetpack/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">563</post-id>	</item>
		<item>
		<title>[Función] Código PHP: imagecreatefrombmp</title>
		<link>https://kadai.com.mx/codigo-php-imagecreatefrombmp/</link>
					<comments>https://kadai.com.mx/codigo-php-imagecreatefrombmp/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Tue, 20 Jun 2017 19:22:43 +0000</pubDate>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[spanish]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=492</guid>

					<description><![CDATA[<p>Escribir código siempre tiene sus pros y contras. Entre las cosas que se aprenden es a mirar a otros lados a ver si ya existe alguien que haya solucionado un problema similar al que tengas. Revisando código «viejo», es que me encontré con una pequeña función que ciertamente me ayudó a sacarme de apuros en algún [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/codigo-php-imagecreatefrombmp/">[Función] Código PHP: imagecreatefrombmp</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Escribir código siempre tiene sus pros y contras. Entre las cosas que se aprenden es a mirar a otros lados a ver si ya existe alguien que haya solucionado un problema similar al que tengas.</p>
<p style="text-align: justify;">Revisando código «viejo», es que me encontré con una pequeña función que ciertamente me ayudó a sacarme de apuros en algún momento. Se trata de la función <em>imagecreatefrombmp</em>.</p>
<p><span id="more-492"></span></p>
<p style="text-align: justify;">Para quienes hayan manejado imágenes en PHP 5, ya sabrán lo horrible que es lidiar con archivos BMP.</p>
<p style="text-align: justify;">La necesidad de usarla nace debido a los propios usuarios del sistema. No les interesaba guardar las imágenes en un formato diferente al BMP o simplemente no sabían como hacerlo.</p>
<p style="text-align: justify;">¿Qué es más fácil entonces? ¿Amansar al burro o adaptarte al burro?</p>
<h3>El código de la función imagecreatefrombmp</h3>
<p style="text-align: justify;">Ciertamente tome el camino de adaptarme, probé muchas cosas hasta que encontré <a href="https://stackoverflow.com/questions/1586094/convert-bitmap-files-into-jpeg-using-the-gd-library-in-php" target="_blank" rel="noopener noreferrer">esta solución</a> bastante creativa:</p>
<p>View the code on <a href="https://gist.github.com/kadai/f105525043426e23fd351a1506cd33bd">Gist</a>.</p>
<p style="text-align: justify;">En pocas palabras: Esa función abre la imagen, la «descomprime» y luego lee los datos para crear un lienzo en PHP que se pueda usar.</p>
<p style="text-align: justify;">¿Pero por qué se necesita tanto? Sencillo, PHP no soporta las imágenes BMP. Al menos no hasta que<a href="http://php.net/manual/en/function.imagecreatefrombmp.php" target="_blank" rel="noopener noreferrer"> PHP 7.2 esté disponible</a>.</p>
<h3>Cerrando sobre función imagecreatefrombmp</h3>
<p style="text-align: justify;">Si bien esta solución no es perfecta, ya que cada imagen toma mucho tiempo en ser procesada, si ayuda mucho en lograr el objetivo.</p>
<p style="text-align: justify;">Ya hay versiones más «modernas» con mejor código, pero la que compartí es la que implementé en su momento.</p>
<p style="text-align: justify;">Y es algo que se ha de tener bajo la manga ya que no siempre todos distinguen entre las diferencias de los archivos BMP, JPEG, GIF, TIFF o PNG. Cada formato, un reino diferente.</p>
<p>The post <a href="https://kadai.com.mx/codigo-php-imagecreatefrombmp/">[Función] Código PHP: imagecreatefrombmp</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/codigo-php-imagecreatefrombmp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">492</post-id>	</item>
		<item>
		<title>Self history with: Joomla, Drupal and WordPress</title>
		<link>https://kadai.com.mx/self-history-with-joomla-drupal-and-wordpress/</link>
					<comments>https://kadai.com.mx/self-history-with-joomla-drupal-and-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[Kadai Crosshansen]]></dc:creator>
		<pubDate>Thu, 04 May 2017 21:31:15 +0000</pubDate>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[developing]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[ease of use]]></category>
		<category><![CDATA[history]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://kadai.com.mx/?p=414</guid>

					<description><![CDATA[<p>Back in 1999, we did not have access to stuff like WordPress or any CMS. Doing websites was some short of a challenge and persistence. I have been doing them since mid-2000 if I remember well, with my first big attempt at 2003. During such time, I have learned PHP, MySQL, some Javascript and whatever [&#8230;]</p>
<p>The post <a href="https://kadai.com.mx/self-history-with-joomla-drupal-and-wordpress/">Self history with: Joomla, Drupal and WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Back in 1999, we did not have access to stuff like WordPress or any CMS. Doing websites was some short of a challenge and persistence. I have been doing them since mid-2000 if I remember well, with my first big attempt at 2003.</p>
<p style="text-align: justify;">During such time, I have learned PHP, MySQL, some Javascript and whatever I have come across with it. Of course, back in the day, you did not have anything named «Joomla», «Drupal» or «WordPress». If you wanted a CMS, you either spend a bunch of bucks or ended making one by yourself. I mostly did stuff with my bare hands.</p>
<p><span id="more-414"></span></p>
<p style="text-align: justify;">While doing stuff yourself seems nice, there is a moment where you eventually grow tired. You just want to add content and have everything work without issues.</p>
<p style="text-align: justify;">While adding stuff was not hard&#8230; it was not really efficient, in the way I did stuff&#8230; so, with the time you simply stopped to do so.</p>
<h3>Retaking the network</h3>
<p style="text-align: justify;">Somewhere in 2010, I started to be serious about retaking and having a much more professional site and so on. I had a bunch of experience with a website from back 2004, but I was more than sure that did not want to go all the same road all once again.</p>
<p style="text-align: justify;">Gathered then some of my pieces around: Plain HTML is a big NO NO. It is going to be a pain to keep such things. Have you tried to edit 10 HTML files? When you are at the 5th one, you already want to do something else.</p>
<p style="text-align: justify;">The second way to go was PHP again with some tricks, but NO. It was very unprofessional. While I for sure were able to make it look nice and such&#8230; in the long run, it was falling into the same pitfall than before&#8230; or worst&#8230; maybe open a random bug can.</p>
<p style="text-align: justify;">What was the solution then? At that time, there were now some names and the CMS started to take everything around.</p>
<p style="text-align: justify;">One of the first considerations I had was the PHP-Nuke CMS, that I remembered seeing from somewhere, but do not remember what exactly made me not to give it a try.After some extra search eventually had a few names to give it a try: Joomla,</p>
<p style="text-align: justify;">After some extra search eventually had a few names to give it a try: Joomla, Drupal and WordPress.</p>
<h3>Joomla</h3>
<p style="text-align: justify;">I am not going to be fair with this engine as I do not remember giving it enough chances.</p>
<p style="text-align: justify;">When I installed and give it a test run, I felt like that Joomla was quite fitting to what I needed back in the day: A simple blogging platform.</p>
<p style="text-align: justify;">Played with it a few hours until I went ahead to try and customize it. There is where I found the very first problem with it.</p>
<p><div id="attachment_415" style="width: 310px" class="wp-caption alignright"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-415" class="wp-image-415 size-medium" src="https://kadai.com.mx/wp-content/uploads/2017/05/herp-derp-300x200.jpg" alt="Kitty being Derp" width="300" height="200" /><p id="caption-attachment-415" class="wp-caption-text">Maybe my reaction if I did it today</p></div></p>
<p>I ended having no idea how to modify the themes I had downloaded for it.</p>
<p>&nbsp;</p>
<p style="text-align: justify;">Maybe if I see the code today, I would be like «why I was so derp?». But back at that day, I spend a fair amount of hours trying to make it look nice and other stuff&#8230; just to give up eventually.</p>
<p style="text-align: justify;">So, moved on.</p>
<h3>Drupal</h3>
<p style="text-align: justify;">I did not give WordPress a try during the 2010-2011 because&#8230; well&#8230; a bunch of people was like «It is really bloated, avoid it at all costs». Since the CPU use and memory was a concern for me, back at that day, I decided not to question that, so moved to the next one in the line: Drupal.</p>
<p style="text-align: justify;">At that moment, Drupal was in its version 6. Installing was&#8230; easy&#8230; configuration was not all that bad. Adding and editing a theme was relatively easy after a few hacks here and there&#8230; urg&#8230; really bad habit from that day.</p>
<p style="text-align: justify;">While for sure getting used to the administration and blocks was&#8230; hard&#8230; I felt like that it had a lot of potential. Of course, if you did not mind to get messy with the code.</p>
<p style="text-align: justify;">One thing that I do remember is that a bunch of pluggings did not work on it. So setting up the installation was like a trial and error process&#8230; because you never had any indication from the Drupal website if the plugin you downloaded might work on your site or version.</p>
<h5 style="text-align: justify;">Struggles with it</h5>
<p style="text-align: justify;">And as the days went on, stuff started to surface and become more and more annoying.</p>
<p style="text-align: justify;">For example, keeping Drupal updated was a struggle on itself&#8230; as I needed to re-do some of my changes into it&#8230; or something random did broke&#8230; you never knew. The experience was not really pleasurable after a couple of years&#8230; and that is what you earn when you mess with the code.</p>
<p style="text-align: justify;">Also, it did not help, I think, that I had a multisite install on it. Heck, even doing that multisite install was rough and messy. Create databases, re-do installs, move files and hope for the best.</p>
<p style="text-align: justify;">Eventually, my installation did fall to the hands of hackers given that I was unable to keep it updated and was avoiding to move to Drupal 7 the most I could because&#8230; it was going to break many things.</p>
<p style="text-align: justify;">I for sure will give the new Drupal 8 a try sometime soon, but it is clear that it needs full-time attention. Something that I can&#8217;t afford most of the time until a good change happens here.</p>
<h3 style="text-align: justify;">WordPress</h3>
<p style="text-align: justify;">Like mentioned before, back in 2010-2011, I simply discarded this one because&#8230; well&#8230; people said it was boatled. But now in 2016, computing power is better suitable than what it was at 2010. And of course, had now access to better hardware at this host too.</p>
<p style="text-align: justify;">My first «official» contact came during the set-up of a website that is hosted alongside this one. that person insisted on making a WordPress install, so it happened.</p>
<p style="text-align: justify;">After being moving it for a few minutes, it was clear that it was like nothing else that I had tested before. Was so surprised that I ended doing an install on my own space too.</p>
<p style="text-align: justify;">It was clear why it is used on <a href="https://w3techs.com/technologies/overview/content_management/all" target="_blank" rel="noopener noreferrer">1 of every 4</a> websites on the internet.</p>
<p style="text-align: justify;">Remember, not everyone knows PHP, HTML, CSS and such to be able to modify a website. Most people just can have a bad day and a very steep learning curve ahead with CMS.</p>
<p style="text-align: justify;">And even if you do know such things, then you can modify themes and what not quite easily. I have been having a lot of fun doing that recently. It is enjoyable like never before. Still, I want to someday design my own theme rather than modify one.</p>
<p style="text-align: justify;">Maybe someday.</p>
<h3 style="text-align: justify;">Just my experience</h3>
<p style="text-align: justify;">While there are a <a href="https://websitesetup.org/cms-comparison-wordpress-vs-joomla-drupal/" target="_blank" rel="noopener noreferrer">bunch of articles</a> there out <a href="https://www.elegantthemes.com/blog/resources/wordpress-vs-drupal" target="_blank" rel="noopener noreferrer">talking about</a> what system is <a href="https://thoughts.duoconsulting.com/blog/5-reasons-to-use-drupal-vs.-wordpress" target="_blank" rel="noopener noreferrer">better</a>, I really can only say that is better just to give it a try to any of them.</p>
<p style="text-align: justify;">But one thing is sure: WordPress is really way too easy to use and maintain, while Drupal is just really more powerful, but requires a lot more of dedication.</p>
<p style="text-align: justify;">I am sure of a few things: I&#8217;ll keep using WordPress, but will try and tame Drupal eventually.</p>
<p>The post <a href="https://kadai.com.mx/self-history-with-joomla-drupal-and-wordpress/">Self history with: Joomla, Drupal and WordPress</a> appeared first on <a href="https://kadai.com.mx">Endless Manifesto</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kadai.com.mx/self-history-with-joomla-drupal-and-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">414</post-id>	</item>
	</channel>
</rss>
