<?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>Pixmat Studios</title>
	<atom:link href="http://www.pixmatstudios.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pixmatstudios.com</link>
	<description>Diseño de páginas web, Diseño gráfico, Desarrollo web, Imprenta en Panamá</description>
	<lastBuildDate>Thu, 29 Apr 2010 00:32:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Panagamers v3.0</title>
		<link>http://www.pixmatstudios.com/blog/panagamers-v3-0/</link>
		<comments>http://www.pixmatstudios.com/blog/panagamers-v3-0/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 00:32:14 +0000</pubDate>
		<dc:creator>demogar</dc:creator>
				<category><![CDATA[Trabajos]]></category>

		<guid isPermaLink="false">http://www.pixmatstudios.com/?p=85</guid>
		<description><![CDATA[Entre los meses de enero a abril de 2010 nos hemos dedicado a la realización de la tercera versión del portal más grande de videojuegos y deportes electrónicos a nivel nacional en Panamá: hablamos de Panagamers.com, un sitio con características de comunidad en donde cientos de personas entran a diario para obtener noticias, reviews, artículos, [...]]]></description>
			<content:encoded><![CDATA[<p>Entre los meses de enero a abril de 2010 nos hemos dedicado a la realización de la tercera versión del portal más grande de videojuegos y <a href="http://es.wikipedia.org/wiki/Deporte_electr%C3%B3nico">deportes electrónicos</a> a nivel nacional en Panamá: hablamos de <a href="http://www.panagamers.com">Panagamers.com</a>, un sitio con características de comunidad en donde cientos de personas entran a diario para obtener noticias, reviews, artículos, temas en los foros y múltiples contenidos generados diariamente.</p>
<p>Este sitio fue hecho <strong>desde cero</strong> nuevamente, realmente ha sido un reto poder tener un preview tan rápido, y es que le hemos dedicado alma vida y corazón para poder terminar este proyecto en el tiempo pactado.</p>
<p><span id="more-85"></span></p>
<p>El proyecto fue realizado utilizando <a href="http://www.codeigniter.com">CodeIgniter</a> como Framework de PHP, <a href="http://www.jquery.com">jQuery</a> como librería de Javascript, <a href="http://www.960.gs">960</a> como Framework de CSS y tiene todo lo que un sitio de comunidad debería tener.</p>
<p>Lo más importante: Panagamers.com sigue creciendo y estamos aún desarrollando muchas características en el futuro, en donde se incluirán partidos, equipos, rankings, comentarios con cuentas de Facebook y demás cosas que sólo serán posibles en los próximos meses.</p>
<p><a href="http://www.panagamers.com">Visitar Panagamers.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixmatstudios.com/blog/panagamers-v3-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CodeIgniter + Uploadify. Subir múltiples imágenes y redimensionarlas.</title>
		<link>http://www.pixmatstudios.com/blog/codeigniter-uploadify/</link>
		<comments>http://www.pixmatstudios.com/blog/codeigniter-uploadify/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 16:52:20 +0000</pubDate>
		<dc:creator>demogar</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.pixmatstudios.com/?p=75</guid>
		<description><![CDATA[Como muchos sabrán nos encanta trabajar con CodeIgniter y jQuery, por lo que en mucho de nuestros proyectos utilizamos tanto, lo que para nuestro concepto es, el mejor Framework de PHP como la mejor librería de Javascript. En este post trataré de explicar como hicimos funcionar el CodeIgniter junto con Uploadify, un plugin en jQuery [...]]]></description>
			<content:encoded><![CDATA[<p>Como muchos sabrán nos encanta trabajar con <a href="http://www.codeigniter.com">CodeIgniter </a>y <a href="http://www.jquery.com">jQuery</a>, por lo que en mucho de nuestros proyectos utilizamos tanto, lo que para nuestro concepto es, el mejor Framework de PHP como la mejor librería de Javascript. En este post trataré de explicar como hicimos funcionar el CodeIgniter junto con <a href="http://www.uploadify.com">Uploadify</a>, un plugin en jQuery para multicargas de archivos.</p>
<p>Subir varios archivos con simple HTML, Javascript y PHP no es fácil y aunque el <strong>HTML5</strong> nos trae algunas mejoras al respecto aún no podemos utilizarlas a fondo puesto que no todos los exploradores web permiten estas funcionalidades aún (Google Chrome si, por ejemplo).</p>
<p>En este post explicaremos como hacer una aplicación muy pequeña que permitiría subir múltiples imágenes al servidor y achicarlas en 3 tamaños distintos de forma automática y por medio de <strong>jQuery + Uploadify y CodeIgniter</strong>.</p>
<p><span id="more-75"></span></p>
<h3>Cambios en el /applications/config/mimes.php</h3>
<p>El primer error que tuvimos fue que, por obligación, la librería &#8220;File Upload&#8221; necesita un parámetro llamado &#8220;allowed_types&#8221; en donde se especifican los tipos de archivos (o extensiones) que se pueden utilizar para subir archivos. Como ibamos a subir múltiples imágenes (fotografías) nuestros archivos serían del tipo <strong>*.jpg</strong> y <strong>*.jpeg</strong> primordialmente. Sin embargo, recibíamos un error donde nos decía que no podíamos subir archivos de este tipo, aún cuando eran imágenes.</p>
<p>La solución fue muy simple y la encontramos en el foro de CodeIgniter. Debemos ir a: /applications/config/mimes.php (donde se manejan los <a href="http://en.wikipedia.org/wiki/MIME">MIME</a>) y agregar a las extensiones &#8216;jpg&#8217;, &#8216;jpeg&#8217; lo siguiente:</p>
<pre class="brush: php;">
'jpeg'	=&gt;	array('image/jpeg', 'image/pjpeg', 'application/octet-stream'),
'jpg'	=&gt;	array('image/jpeg', 'image/pjpeg', 'application/octet-stream'),
'jpe'	=&gt;	array('image/jpeg', 'image/pjpeg', 'application/octet-stream'),
'png'	=&gt;	array('image/png',  'image/x-png', 'application/octet-stream'),
</pre>
<p>El <em>&#8216;application/octet-stream&#8217;</em> es el que hace la mágia en todo esto.</p>
<h3>Controller</h3>
<pre class="brush: php;">
&lt;?php

class Photos extends Controller
{

	public function __construct()
	{
		parent::__construct();

		# General Loader
		$this-&gt;load-&gt;model('photos_model');
	}

	public function index()
	{
		// Header
		$this-&gt;load-&gt;view('header');

		// Body
		$this-&gt;load-&gt;view('photos/index');

		// Footer
		$this-&gt;load-&gt;view('footer');
	}

	public function upload()
	{
		# Configuracion de la libreria
		# 'img_path' esta en /applications/config/pixmat.php
		$config['upload_path'] 		= $this-&gt;config-&gt;item('img_path');
		$config['allowed_types'] 	= 'jpg|gif|png';
		$config['encrypt_name'] 	= 'TRUE';
		$config['max_size'] 		= '71680';
		$config['max_width'] 		= '8000';
		$config['max_height'] 		= '8000';

		$this-&gt;load-&gt;library('upload', $config);

		# Uploading
		if ( ! $this-&gt;upload-&gt;do_upload('Filedata')) {
			# Error
			$errors = $this-&gt;upload-&gt;display_errors();

			# nombre de la imagen, evitando errores
			$image_name = NULL;
		} else {
			# Nombre de la foto
			$imageData	= $this-&gt;upload-&gt;data();
			$image_name	= $imageData['file_name'];
			$image_ext	= $imageData['file_ext'];

			# Achicamos la foto
			if( ! $this-&gt;resizePhoto($image_name)){
				$errors = &quot;La imagen no pudo redimensionarse correctamente&quot;;
			} else {
				# Agregamos a la base de datos
				$data = array(
					'title'			=&gt; 'Foto sin titulo',
					'image'			=&gt;	$image_name,
					'active'		=&gt; 0
				);

				# ID recien creado, verificamos
				$id = $this-&gt;photos_model-&gt;create($data);

				if ( ! $id) {
					$errors = &quot;La imagen no pudo ingresarse a la DB&quot;;
				}
			}
		}

		// Error?
		if (isset($errors)){
			# Borramos la foto (si existe)
			$id = isset($id) ? $id : NULL;
			$this-&gt;deletePhoto($id, $image_name);

			echo $errors;
		}
	}

	private function resizePhoto($name)
	{
		# Load library
		$this-&gt;load-&gt;library('image_lib');

		// Achicamos a 1024x768
		$config['image_library']		= 'gd2';
		$config['source_image']		= $this-&gt;config-&gt;item('img_path') . $name;
		$config['new_image']		= $this-&gt;config-&gt;item('thumbs_path') . '1024x768/' . $name;
		$config['maintain_ratio']		= TRUE;
		$config['width']			= 1024;
		$config['height']			= 768;

		$this-&gt;image_lib-&gt;initialize($config);
		if ( ! $this-&gt;image_lib-&gt;resize()){
			$error = TRUE;
		}

		// Le ponemos watermark, tenemos que utilizar otra configuracion, puesto que vamos a trabajar
		// con el thumbnail y vamos a ponerle watermark
		$config2['image_library']		= 'gd2';
		$config2['source_image']		= $this-&gt;config-&gt;item('thumbs_path') . '1024x768/' . $name;
		$config2['wm_type']			= 'overlay';
		$config2['wm_overlay_path']		= $this-&gt;config-&gt;item('watermark');
		$config2['wm_vrt_alignment']		= 'middle';
		$config2['wm_hor_alignment']	= 'center';

		# Watermark
		$this-&gt;image_lib-&gt;initialize($config2);
		if ( ! $this-&gt;image_lib-&gt;watermark()){
			$error = TRUE;
		}

		// Achicamos a 800x600
		$config['source_image']		= $this-&gt;config-&gt;item('thumbs_path') . '1024x768/' . $name;
		$config['new_image']		= $this-&gt;config-&gt;item('thumbs_path') . '800x600/' . $name;
		$config['width']			= 800;
		$config['height']			= 600;

		$this-&gt;image_lib-&gt;initialize($config);
		if ( ! $this-&gt;image_lib-&gt;resize()){
			$error = TRUE;
		}

		// Achicamos a 400x300
		$config['source_image']		= $this-&gt;config-&gt;item('thumbs_path') . '1024x768/' . $name;
		$config['new_image']		= $this-&gt;config-&gt;item('thumbs_path') . '400x300/' . $name;
		$config['width']			= 400;
		$config['height']			= 300;

		$this-&gt;image_lib-&gt;initialize($config);
		if ( ! $this-&gt;image_lib-&gt;resize()){
			$error = TRUE;
		}

		# Error ?
		if (isset($error) and $error === TRUE) {
			return FALSE;
		} else {
			return TRUE;
		}
	}

	private function deletePhoto($id, $image)
	{
		# Delete from the DB
		if ($id !== NULL) {
			$this-&gt;photos_model-&gt;delete($id);
		}

		if ($image !== NULL) {
			# Borramos todas las imagenes (si existen). Evitamos warnings con el @ adelante
			@unlink($this-&gt;config-&gt;item(&quot;img_path&quot;) . $image);
			@unlink($this-&gt;config-&gt;item('thumbs_path') . '1024x768/' . $image);
			@unlink($this-&gt;config-&gt;item('thumbs_path') . '800x600/' . $image);
			@unlink($this-&gt;config-&gt;item('thumbs_path') . '400x300/' . $image);
		}
	}

}

/* End of file photos.php  */
/* Location: ./application/modules/photos/controllers/photos.php */
</pre>
<p>Hay que tomar en cuenta algunas cosas en el código:</p>
<ol>
<li>El nombre del <strong>$_FILE</strong> que envía el Uploadify se llama <strong>&#8220;Filedata&#8221;</strong>.</li>
<li>El código es básico, no estamos haciendo muchas comprobaciones pero es para tener una idea. Igualmente el verifica si se subió bien y si no se elimina el archivo y el record de la DB.</li>
<li>No pondremos las operacionse del <strong>Model</strong> porque son sencillas.</li>
<li>La librería &#8220;image_lib&#8221; no es necesaria hacerle el <strong>$this->image_lib->clear()</strong>.</li>
<li>Usamos los PATH donde están las fotografías en archivos dentro de la configuración para que sea más fácil a la hora de cambiar de servidores.</li>
</ol>
<h3>View</h3>
<pre class="brush: xml;">
&lt;p&gt;
	&lt;input id=&quot;files&quot; name=&quot;files&quot; type=&quot;file&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
	&lt;button class=&quot;button&quot; id=&quot;subirFotos&quot;&gt;&lt;span&gt;Subir fotograf&amp;iacute;as&lt;/span&gt;&lt;/button&gt;
&lt;/p&gt;

&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;
	// &lt;![CDATA[
	$(document).ready(function() {
		$(&quot;button#subirFotos&quot;).click(function() {
			// Hay archivos por subir?
			if ($('#files').uploadifySettings('queueSize') &gt; 0) {
				$('#files').uploadifyUpload();
			}

			// Return false para evitar cualquier accion en el boton
			return false;
		});

		$('#files').uploadify({
			'uploader'			: '/assets/uploadify/uploadify.swf',
			'script'			: '&lt;?php echo base_url(); ?&gt;/photos/upload',
			'cancelImg'			: '/assets/uploadify/cancel.png',
			'auto'				: true,
			'folder'			: '/assets/uploadify/uploads',
			'queueSizeLimit'	: '10',
			'multi'				: true,
			'fileDesc'			: '.jpg, .png, .gif, .jpeg',
			'fileExt'			: '*.jpg;*.jpeg;*.png;*gif',
			'auto'				: false,
			'buttonText'		: 'SELECCIONAR'
		});
	});
	// ]]&gt;
&lt;/script&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.pixmatstudios.com/blog/codeigniter-uploadify/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuevo proyecto: GuiaPTY.com</title>
		<link>http://www.pixmatstudios.com/blog/guiapty-com/</link>
		<comments>http://www.pixmatstudios.com/blog/guiapty-com/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 22:09:34 +0000</pubDate>
		<dc:creator>demogar</dc:creator>
				<category><![CDATA[Desarrollo]]></category>

		<guid isPermaLink="false">http://www.pixmatstudios.com/?p=60</guid>
		<description><![CDATA[Entre los meses de octubre y noviembre de este 2009 hemos trabajado duro en un nuevo sitio (que se encuentra en fase experimental) llamado GuiaPTY.com. Es un proyecto de un par de jóvenes emprendedores panameños que quieren hacerle la vida más fácil tanto a los turistas que visitan nuestro país como a los mismos panameños [...]]]></description>
			<content:encoded><![CDATA[<p>Entre los meses de octubre y noviembre de este 2009 hemos trabajado duro en un nuevo sitio <em>(que se encuentra en fase experimental)</em> llamado <strong>GuiaPTY.com</strong>. Es un proyecto de un par de jóvenes emprendedores panameños que quieren hacerle la vida más fácil tanto a los turistas que visitan nuestro país como a los mismos panameños en darle ideas para donde comer, donde hospedarse o hasta para que hacer en la vida noctura panameña.</p>
<p><span id="more-60"></span></p>
<p>Es un sitio <strong>muy sencillo</strong> (ya que era la idea principal del proyecto) y hemos trabajado junto con <a href="http://www.twitter.com/gottico">Juan Gotti</a> para realizar un sitio fácil de usar y entender para cualquier usuario. La plataforma entera del sitio la hemos desarrollado nosotros bajo un CMS personal llamado <strong>Pixmat CMS</strong> desarrollado en PHP (utilizando <a href="http://www.codeigniter.com">CodeIgniter</a> como framework).</p>
<p>El sitio es bastante nuevo por lo que puede que no se encuentre mucha información dentro del mismo, pero sabemos que bajo una buena administración será un sitio muy interesante y útil para cualquier persona que necesite algún tipo de información como esta.</p>
<p>A todos ustedes nos pueden decir que opinan del mismo y si quieren pueden <a href="http://www.guiapty.com">visitar el proyecto</a> o <a href="http://twitter.com/guiapty">seguirlo por Twitter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixmatstudios.com/blog/guiapty-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presentramos DISUPP.com</title>
		<link>http://www.pixmatstudios.com/blog/presentramos-disuppcom/</link>
		<comments>http://www.pixmatstudios.com/blog/presentramos-disuppcom/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 01:25:25 +0000</pubDate>
		<dc:creator>demogar</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.pixmatstudios.com/?p=53</guid>
		<description><![CDATA[El pasado mes estuvimos realizando el sitio web para la empresa de importación, exportación y distribución de supplies de oficina: DISUPP (Distribuidora de Supplies S.A.) y hasta hoy hemos tenido la oportunidad de hacer el sitio público a todos. El sitio es méramente informativo de la empresa, lo hicimos utilizando XHTML, CSS, Javascript (jQuery para [...]]]></description>
			<content:encoded><![CDATA[<p>El pasado mes estuvimos realizando el sitio web para la empresa de importación, exportación y distribución de supplies de oficina: DISUPP (Distribuidora de Supplies S.A.) y hasta hoy hemos tenido la oportunidad de hacer el sitio <strong>público a todos</strong>.</p>
<p>El sitio es méramente informativo de la empresa, lo hicimos utilizando XHTML, CSS, Javascript <em>(jQuery para ciertas cositas)</em> y PHP básico, ya que el sitio no debía ser muy complicado, fácil de usar y muy útil para saber de que trataba la empresa desde la primera visita.</p>
<p><span id="more-53"></span>Demoramos haciendo el proyecto un par de semanas y nos sentimos muy felices de haber trabajado con esta empresa, ya que fue una experiencia nueva y diferente.</p>
<p>Esperemos que el sitio les sea de su completo agrado, les invitamos a visitar el sitio de DISUPP y comentarnos que les pareció su diseño y desarrollo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixmatstudios.com/blog/presentramos-disuppcom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bienvenidos a Pixmat v2.0</title>
		<link>http://www.pixmatstudios.com/blog/bienvenidos-a-pixmat/</link>
		<comments>http://www.pixmatstudios.com/blog/bienvenidos-a-pixmat/#comments</comments>
		<pubDate>Sun, 17 May 2009 21:37:47 +0000</pubDate>
		<dc:creator>demogar</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://localhost/pixmat/?p=1</guid>
		<description><![CDATA[Durante estos días que me he encontrado un poco más libre me he tomado el trabajo de realizar nuevamente el diseño de este sitio, con un poco más de tiempo y una mejor organización decidí darle una probadita al WordPress como CMS para este nuevo sitio, además de de agregar la sección de portafolio que [...]]]></description>
			<content:encoded><![CDATA[<p>Durante estos días que me he encontrado un poco más libre me he tomado el trabajo de realizar nuevamente el diseño de este sitio, con un poco más de tiempo y una mejor organización decidí darle una probadita al <a href="http://www.wordpress.org" target="_blank">WordPress</a> como <abbr title="Content Management System">CMS</abbr> para este nuevo sitio, además de de agregar la sección de portafolio que en el sitio anterior estaba totalmente vacío (por falta de tiempo, jeje).</p>
<p><span id="more-1"></span></p>
<p>En esta nueva versión también tenemos un <strong>&#8220;Blog&#8221;</strong>, que será un espacio para poner estas cosas interesantes que con cada trabajo aprendemos y hablaremos de cada proyecto o trabajo que conseguimos nuevo.</p>
<p>Con este nuevo sitio esperamos tener una casa en donde nosotros, nuestros visitantes y nuestros clientes puedan aprender un poco sobre nosotros, lo que hacemos y como lo hacemos.</p>
<p>A todos ustedes, bienvenidos al nuevo <strong>Pixmat Studios</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pixmatstudios.com/blog/bienvenidos-a-pixmat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
