<?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>Saúl Solórzano</title>
	<atom:link href="http://www.saulsolorzano.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.saulsolorzano.com</link>
	<description>Diseñado web,  Wordpress y Consultoría</description>
	<lastBuildDate>Tue, 09 Dec 2014 19:00:47 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1.1</generator>
	<item>
		<title>Lista de plugins de Sublime Text que uso</title>
		<link>http://www.saulsolorzano.com/lista-de-plugins-de-sublime-text-que-uso/</link>
		<comments>http://www.saulsolorzano.com/lista-de-plugins-de-sublime-text-que-uso/#comments</comments>
		<pubDate>Tue, 09 Dec 2014 19:00:47 +0000</pubDate>
		<dc:creator><![CDATA[saul]]></dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[flujo de trabajo]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[sublime]]></category>
		<category><![CDATA[utilidad]]></category>

		<guid isPermaLink="false">http://www.saulsolorzano.com/?p=1424</guid>
		<description><![CDATA[<p>Sublime text es uno de los mejores editores de texto con los que se puede programar y razón por la cual es tan potente es su gran cantidad de plugins. Hace unos días expliqué como usar los proyectos de Sublime, aquí colocaré los plugins que yo uso casi a diario, los plugins que tengas instalados [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/lista-de-plugins-de-sublime-text-que-uso/">Lista de plugins de Sublime Text que uso</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Sublime text es uno de los mejores editores de texto con los que se puede programar y razón por la cual es tan potente es su gran cantidad de plugins.</p>
<p>Hace unos días expliqué como usar los proyectos de Sublime, aquí colocaré los plugins que yo uso casi a diario, los plugins que tengas instalados dependen mucho de tu flujo de trabajo y que tecnología más usas.<br />
<span id="more-1424"></span></p>
<h2>Package Control</h2>
<p>Antes de instalar algún plugin necesitamos primero <em>Package Control</em>. Esta herramienta nos sirve para instalar, desintalar, actualizar y en general controlar los plugins.</p>
<p>Los pasos para instalar están <a href="https://sublime.wbond.net/installation">aquí</a> cambian un poco si usas Sublime text 2 o 3. Las instrucciónes son bastante sencillas.</p>
<p>Una vez que tengamos esto podemos buscar cualquiera de los plugins de esta lista usando <code>command+shift+P</code> en OS X o <code>ctrl+shift+P</code> en windows que nos abre el menú &#8220;goto Anything&#8221; de Sublime, copiamos &#8220;install&#8221; y veremos la opción que dice <code>Packake Control: Install Package</code></p>
<p>Si le damos click podemos copiar el nombre del paquete que estamos buscando y una vez lo encontremos le damos click y se descarga e instala, algunos requieren que reiniciemos sublime, otros no, yo tengo como costumbre cada vez que instalo algo reiniciar sublime para estar seguro igual.</p>
<p>Casi todos los plugins están en github pero se recomienda instalarlos por el <em>package control</em></p>
<h3>1. <a href="https://github.com/skuroda/Sublime-AdvancedNewFile">AdvancedNewFile</a></h3>
<p>Este plugin nos sirve para crear archivos usando un comando del teclado. Cuando estamos trabajando en un proyecto nuevo normalmente creamos una buena cantidad de archivos, usando este plugin no perdemos tiempo creandolos con el mouse, simplemente copiamos <code>command+alt+N</code> en OS X o <code>ctrl+alt+N</code> en Windows y nos abre abajo una opción donde colocamos el nombre y extensión del archivo y listo.</p>
<p>Lo bueno es que nos abre relativo a nuestra carpeta raíz de proyecto entonces si quieres crear un nuevo script puedes copiar <code>js/nombre.js</code> y se creará en la carpeta correspondiente.</p>
<h3>2. <a href="http://wbond.net/sublime_packages/alignment">Alignment</a></h3>
<p>Este plugin sirve para alinear multiples selectores. Es útil para alinear todas las variables en un bloque de código</p>
<h3>3. <a href="https://github.com/facelessuser/BracketHighlighter">BracketHighlighter</a></h3>
<p>Muy util, cuando estamos viendo un bloque de código y nos paramos sobre un selector es de mucha ayuda ver de una vez el que lo acompaña.</p>
<h3>4. <a href="https://github.com/Monnoroch/ColorHighlighter">Color Hightligher</a></h3>
<p>Usado para <code>CSS</code>, como el nombre lo dice, nos coloca el color del código que tenemos en el css, entonces si tenemos <code>FFFFFF</code>, <code>rgb(255,255,255)</code> o <code>white</code> nos coloca el color blanco</p>
<h3>5. <a href="https://github.com/joshnh/CSS-Snippets">CSS Snippets</a></h3>
<p>Una colección de snippets muy util para trabajar con <code>CSS</code>.</p>
<h3>6. <a href="http://emmet.io/">Emmet</a></h3>
<p>Emmet es uno de los plugins mas útiles que existe, no es exclusivo de Sublime, se puede usar en una gran cantidad de programas. Emmet nos permite mejorar nuestro flujo de trabajo en CSS y HTML de gran manera. En HTML nos permite usar abreviaciónes para expandir código. Es decir, podemos escribir</p>
<pre><code class="language-markup">header.header&gt;.logo&gt;a[src="img/logo.svg"]
</code></pre>
<p>y emmet generará el HTML correspondiente</p>
<pre><code class="language-markup">&lt;header class="header"&gt;
    &lt;div class="logo"&gt;&lt;a href="" src="img/logo.svg"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/header&gt;
</code></pre>
<h3>7. <a href="https://github.com/jisaacks/GitGutter">GitGutter</a></h3>
<p>Si trabajas con git (deberías) este plugin es muy util. Te indica cuando hay nuevas lineas, lineas eliminadas y modificadas.</p>
<h3>8. <a href="https://github.com/titoBouzout/SideBarEnhancements">SideBarEnhancements</a></h3>
<p>El sidebar que trae Sublime por defecto es bastante pobre, tiene como 4 opciones solamente. Son este plugin tenemos muchas más opciones.</p>
<h3>9. <a href="https://sublime.wbond.net/packages/TodoReview">TodoReview</a></h3>
<p>Extremadamente útil. Te permite crear una lista de pendiente en el mismo código. Puedes tener distintas listas, como <code>TODO</code>, <code>FIX</code>, <code>BUG</code> incluso puedes colocar las tuyas, puedo tener una lista llamada <code>SAUL</code>. Después con un simple comando el plugin revisa todos los archivos y nos generá la lista.</p>
<h3>10. <a href="https://github.com/spadgos/sublime-jsdocs">DocBlockr</a></h3>
<p>Nos permite generar una documentación sencilla para nuestras funciones de JavaScript, PHP y otros lenguajes de programación.</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/lista-de-plugins-de-sublime-text-que-uso/">Lista de plugins de Sublime Text que uso</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saulsolorzano.com/lista-de-plugins-de-sublime-text-que-uso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manejar proyectos con Sublime Text</title>
		<link>http://www.saulsolorzano.com/manejar-proyectos-con-sublime-text/</link>
		<comments>http://www.saulsolorzano.com/manejar-proyectos-con-sublime-text/#comments</comments>
		<pubDate>Tue, 02 Dec 2014 01:56:42 +0000</pubDate>
		<dc:creator><![CDATA[saul]]></dc:creator>
				<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[productividad]]></category>
		<category><![CDATA[proyectos]]></category>
		<category><![CDATA[sublime]]></category>

		<guid isPermaLink="false">http://www.saulsolorzano.com/?p=1415</guid>
		<description><![CDATA[<p>Sublime es uno de los mejores editores de texto para programar, es uno de los más usados por toda la comunidad y la razón es que es extremadamente personalizable, una de las que considero más útiles es la habilidad de crear Proyectos de sublime. ¿Qué es un proyecto? Un proyecto de sublime en definición es [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/manejar-proyectos-con-sublime-text/">Manejar proyectos con Sublime Text</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Sublime es uno de los mejores editores de texto para programar, es uno de los más usados por toda la comunidad y la razón es que es extremadamente personalizable, una de las que considero más útiles es la habilidad de crear Proyectos de sublime.<br />
<span id="more-1415"></span></p>
<h2>¿Qué es un proyecto?</h2>
<p>Un proyecto de sublime en definición es lo mismo que un proyecto para nosotros, si estoy trabajando en una página web para una Librería el proyecto de sublime sería la carpeta de la página web.</p>
<h2>Cómo crear</h2>
<p>Para crear un proyecto simplemente abrimos la carpeta de nuestro proyecto en sublime y seleccionamos en el menú superior &#8220;Proyecto -> Salvar proyecto como..&#8221; donde nos va a abrir la ventana tradicional para salvar. Importante aquí, navegar hasta la carpeta de nuestro proyecto en caso de que la ventana haya abierto en otro lado y una vez que estemos en la carpeta de nuestro proyecto le damos a salvar, la razón es por que donde salvemos el proyecto considerará como la raíz del mismo.</p>
<p>Una vez que hayamos salvado vamos a ver dos archivos nuevos en nuestra carpeta. <code>libreria.sublime-project</code> <code>libreria.sublime-workspace</code></p>
<h2>Ventajas</h2>
<p>Los proyectos, para mi, tienen dos grandes ventajas, la primera es la habilidad de cambiar entre proyectos desde la misma interfaz de Sublime y la segunda es la habilidad de seleccionar que carpetas estamos viendo en un momento específico.</p>
<h3>Cambiar entre proyectos</h3>
<p>Una vez que hayamos salvado nuestro proyecto podemos cambiar entre ellos con la combinación de teclas <code>Ctrl+Command+P</code> en OS X o <code>Ctrl+Alt+P</code> en Windows esto nos permite estar trabajando en un proyecto y cambiar a otro de manera rápida, o un caso más frecuente sería que estás trabajando en el código de una página y quieres hacer algo específico y sabes que ya lo hiciste anteriormente, simplemente abres una ventana nueva de Sublime (<code>Command+Shift+N</code> o <code>Ctrl+shift+N</code>) y seguido buscamos el proyecto que necesitamos y listo, no perdimos tiempo buscando la carpeta en Finder o Windows y arrastrándola a Sublime.</p>
<h3>Ocultar carpetas y archivos</h3>
<p>Esta habilidad es mucho más util que la anterior, una vez hayamos creado nuestro proyecto y abrimos de nuevo el menú de &#8220;Proyecto&#8221; vamos a ver la opción de &#8220;Editar proyecto&#8221; disponible, si le damos click vamos a ver un archivo con opciones. Si alguna vez has editado alguna opción de sublime vas a reconocer la sintaxis, como casi todo en sublime, es un archivo <code>JSON</code> de opciones.</p>
<p>Este archivo debe tener la siguiente estructura</p>
<pre><code class="language-javascript">{
    "folders":
    [
        {
            "follow_symlinks": true,
            "path": "."
        }
    ]
}

</code></pre>
<p>Supongamos que nuestro sitio de librería es una página de WordPress y la raíz de nuestro proyecto es la de WordPress, cuando abrimos el proyecto en sublime vemos la siguiente estructura:</p>
<p><img src="//www.saulsolorzano.com/wp-content/uploads/ColorSnapper_and__Users_saulsolorzano_Code_personal_saulsolorzano.png" title="Usando Sublime para manejar proyectos" alt="Usando Sublime para manejar proyectos" class="aligncenter wp-image-1416" /></p>
<p>Pero lo que realmente nos interesa es trabajar dentro del tema, una posibilidad sería salvar el proyecto directamente en el tema pero si queremos también trabajar en algún plugin tendríamos que tener dos proyectos de sublime para el mismo sitio. Si queremos ver sólo nuestro tema nos vamos a la opción de <code>path</code> y copiamos la ruta relativa al proyecto, en nuestro caso sería</p>
<pre><code class="language-javascript">{
    "folders":
    [
        {
            "follow_symlinks": true,
            "path": "./wp-content/themes/libreria"
        }
    ]
}

</code></pre>
<p>Una vez que copiamos esto y salvamos vamos a ver que sublime &#8220;oculta&#8221; todas las carpetas que no sean directamente nuestro tema. Pero aquí no acaba la magia de los proyectos aún, supongamos que una vez dentro de nuestro tema de WordPress, en el que estamos trabajando, tenemos la siguiente estructura de archivos:</p>
<p><img src="//www.saulsolorzano.com/wp-content/uploads/Users_saulsolorzano_Desktop_libreria.png" title="Proyectos de Grunt para trabajar más eficientemente" alt="Proyectos de Grunt para trabajar más eficientemente" class="aligncenter wp-image-1417" /></p>
<p>De aquí no nos interesa ver la carpeta <code>bower_components</code>, <code>node_modules</code> y <code>css</code>, esta última porque si estamos trabajando en <code>SASS</code> no nos interesa por los momentos ver el <code>css</code>. Así como también <code>.sass-cache</code> que no vemos aquí porque es una carpeta oculta. Estas carpetas son increíblemente molestas si estamos usando la opción de Sublime para abrir archivos que es <code>Command+P</code> en OS X o Ctrl+P en Windows. Si no ocultamos estas carpetas y voy a buscar por ejemplo un archivo <code>JS</code> aparte de los que están en mi carpeta <code>js/</code> voy a ver los cientos que deben de haber entre las carpetas <code>bower_components</code> y <code>node_modules</code>. Podemos usar la opción <code>folder_exclude_patterns</code> como un array para colocar todos los nombres ahí, nuestro archivo quedaría así.</p>
<pre><code class="language-javascript">{
    "folders":
    [
        {
            "follow_symlinks": true,
            "path": "./wp-content/themes/libreria",
            "folder_exclude_patterns": ["css", ".sass-cache", "node_modules", "bower_components"]
        }
    ]
}
</code></pre>
<p>Una vez que coloquemos esto y salvamos el archivo vamos a ver que las carpetas desaparecen de nuestra barra lateral, y si buscamos archivos con <code>command+p</code> solo aparecen los de las carpetas que si vemos.</p>
<p>La última opción es <code>file_exclude_patterns</code> que como se pueden imaginar, es lo mismo de <code>folder_exclude_patterns</code> pero para archivos, por ejemplo, aquí podemos ocultar los archivos minimizados de <code>javascript</code>, el archivo <code>Gruntfile.js</code>, el <code>.htaccess</code> y otros archivos que no necesitamos ver mientras estamos trabajando. Así va el archivo</p>
<pre><code class="language-javascript">{
    "folders":
    [
        {
            "follow_symlinks": true,
            "path": "./wp-content/themes/libreria",
            "folder_exclude_patterns": ["css", ".sass-cache", "node_modules", "bower_components"],
            "file_exclude_patterns":
            [
                ".htaccess",
                "*-min.js",
                "Gruntfile.js"
            ]
        }
    ]
}
</code></pre>
<p>Y eso es todo. Se pueden agregar tantas carpetas como queramos, si por ejemplo queremos agregar aquí también nuestro plugin simplemente hacemos esto</p>
<pre><code class="language-javascript">{
    "folders":
    [
        {
            "follow_symlinks": true,
            "path": "./wp-content/themes/libreria",
            "folder_exclude_patterns": ["css", ".sass-cache", "node_modules", "bower_components"],
            "file_exclude_patterns":
            [
                ".htaccess",
                "*-min.js",
                "Gruntfile.js"
            ]
        },
        {
            "path": ".wp-content/plugins/nuestro-plugin"
        }
    ]
}
</code></pre>
<h3>Conclusión</h3>
<p>Como pueden ver, trabajar con proyectos en Sublime puede ser increíblemente util y eficiente. Además de estas opciones que coloco, hay algunas adicionales que pueden ver en la (documentación)[https://www.sublimetext.com/docs/3/projects.html] pero las que resalto aquí son las que he usado y me han ayudado enormemente.</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/manejar-proyectos-con-sublime-text/">Manejar proyectos con Sublime Text</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saulsolorzano.com/manejar-proyectos-con-sublime-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sublime Text Tips</title>
		<link>http://www.saulsolorzano.com/sublime-text-tips/</link>
		<comments>http://www.saulsolorzano.com/sublime-text-tips/#comments</comments>
		<pubDate>Thu, 27 Nov 2014 19:00:33 +0000</pubDate>
		<dc:creator><![CDATA[saul]]></dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.saulsolorzano.com/?p=1408</guid>
		<description><![CDATA[<p>Sublimetexttips.com es un excelente recurso para todos los que usamos Sublime Text para programar, es un newsletters en el cual el curador recopila algunos tips, plugins y temas de Sublime y los comparte semanalmente. 100% Recomendado.</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/sublime-text-tips/">Sublime Text Tips</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Sublimetexttips.com es un excelente recurso para todos los que usamos Sublime Text para programar, es un newsletters en el cual el curador recopila algunos tips, plugins y temas de Sublime y los comparte semanalmente. 100% Recomendado.</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/sublime-text-tips/">Sublime Text Tips</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saulsolorzano.com/sublime-text-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grunt: Usando templates para iniciar proyectos</title>
		<link>http://www.saulsolorzano.com/grunt-usando-templates-para-iniciar-proyectos/</link>
		<comments>http://www.saulsolorzano.com/grunt-usando-templates-para-iniciar-proyectos/#comments</comments>
		<pubDate>Sun, 23 Nov 2014 19:44:45 +0000</pubDate>
		<dc:creator><![CDATA[saul]]></dc:creator>
				<category><![CDATA[Grunt]]></category>
		<category><![CDATA[automatización]]></category>
		<category><![CDATA[grunt]]></category>
		<category><![CDATA[herramientas]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.saulsolorzano.com/?p=1394</guid>
		<description><![CDATA[<p>En el último post hablé de Grunt y los primeros pasos que debemos tomar para empezar a usar esta poderosa herramienta en nuestros proyectos. Una de las mejores funciones de Grunt es la habilidad de automatizar la creación de proyectos. Nos copia nuestros archivos base y nos hace algunas preguntas que podemos configurar para llenar [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/grunt-usando-templates-para-iniciar-proyectos/">Grunt: Usando templates para iniciar proyectos</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>En el <a href="http://www.saulsolorzano.com/grunt-el-corredor-de-tareas-en-javascript/" title="Grunt: El Corredor de Tareas en JavaScript" target="_blank">último post hablé de Grunt</a> y los primeros pasos que debemos tomar para empezar a usar esta poderosa herramienta en nuestros proyectos. Una de las mejores funciones de Grunt es la habilidad de automatizar la creación de proyectos. Nos copia nuestros archivos base y nos hace algunas preguntas que podemos configurar para llenar los datos de nuestro proyecto.<br />
<span id="more-1394"></span></p>
<h2>Instalación</h2>
<p>Necesitamos instalar una utilidad global para poder usarla desde la terminal</p>
<pre><code class="language-bash">npm install -g grunt-init
</code></pre>
<p>De esta manera podremos usar <code>grunt-init</code> desde cualquier lado. Dado que es una instalación global probablemente de error, así que debemos correrlo como administrador usando <code>sudo</code></p>
<h2>Templates</h2>
<p>Los templates deben estar en una carpeta llamada <code>.grunt-init</code> <em>Importante el punto delante del nombre</em> en nuestro directorio raíz, es decir<br />
<code>~/.grunt-init/</code> en OS X y Linux y <code>%USERPROFILE%\.grunt-init\</code> en Windows</p>
<p><em>Nota: A pesar de que no necesariamente los templates deben estar en esta carpeta, ya que realmente pueden estar en cualquier carpeta, es mucho más cómodo tenerlos ahí, si los decido colocar en la carpeta ~/Documents/templates/grunt debo copiar esa ruta cada vez que desee usar grunt-init</em></p>
<p>Es importante usar un nombre que podamos recordar dado que el nombre de la carpeta donde se encuentre el tema es el que usaremos para correr el código. Si mi template se llama <code>tema</code> y esta creado en <code>~/.grunt-init/tema</code> debo correr</p>
<pre><code class="language-bash">grunt-init tema
</code></pre>
<p>Los temas pueden ser una colección completa de archivos o un solo archivo, por ejemplo, <a href="https://github.com/gruntjs/grunt-init-gruntfile">uno de los templates mantenidos oficialmente</a> es sólo para crear el archivo Gruntfile, que como sabemos es necesario para correr grunt en cada proyecto.</p>
<h2>Estructura de un template</h2>
<p>El template debe tener la siguiente estructura<br />
* <code>tema/template.js</code> Este es el archivo principal del template<br />
* <code>tema/rename.json</code> Para renombrar archivos según el template<br />
* <code>tema/root/</code> Los archivos que copiaremos al lugar donde queramos usar el template</p>
<p>Si copiamos este template en <code>~/.grunt-init</code> lo podemos usar simplemente <code>grunt-init tema</code></p>
<h3>Archivo template.js</h3>
<p>Ahora vamos a ver la estructura básica de un archivo <code>template.js</code>, las preguntas pueden cambiarse, así como las dependencias, pero cosas como <code>init.filesToCopy</code> y <code>init.copyAndProcess</code> que son necesarias, estos dos métodos se encargan de copiar los archivos que tenemos en la carpeta <code>root/</code> al directorio que los queremos usar.</p>
<pre><code class="language-javascript">// Una descripción sencilla del proyecto (Opcional)
exports.description = 'Descripción de nuestro template.';

// Aquí comienza lo importante. No es necesario entender 100% que hace cada linea de código dado que como dije anteriormente, son iguales para cada proyecto
exports.template = function( grunt, init, done ) {

    // Aquí comenzamos el proceso de las preguntas
    init.process({}, [
        // Aquí podemos especificar cuantas preguntas queramos
        // estas preguntas se pueden usar para colocar estos
        // valores dentro de nuestro archivo, más de esto adelante.
        init.prompt('name'),
        init.prompt('title'),
        init.prompt('description', 'Descripción del proyecto'),
        init.prompt('homepage'),
        init.prompt('version'),
        init.prompt('licenses', 'MIT'),
        init.prompt('author_name', 'Saúl Solórzano'),
        init.prompt('author_email'),
        init.prompt('author_twitter', '@saulsolorzano'),
        init.prompt('author_url', 'http://saulsolorzano.com/')

    ], function(err, props){

        // Aquí copiamos los archivos

        var files = init.filesToCopy(props);
        // Esta es la función que agrega automáticamente la licencia especificada
        init.addLicenseFiles(files, props.licenses);

        init.copyAndProcess(files, props);
        // Aquí creamos el archivo *package.json*
        init.writePackageJSON('package.json', {
            // Usamos los valores definidos arriba
            name: props.name,
            version: props.version,
            description: props.description,
            author: {
                name: props.author_name,
                url: props.author_url
            },
            // Lista de dependencias que queremos usar
            devDependencies: {
                "grunt": "~0.4.2",
                "grunt-contrib-compass": "~0.7.0",
                "grunt-contrib-clean": "~0.4.0",
                "grunt-contrib-watch": "~0.5.3",
                "grunt-contrib-concat": "~0.3.0",
                "grunt-autoprefixer": "~0.6.4",
            }
        });

        done();

    });

};
</code></pre>
<h3>Preguntas</h3>
<p>Como vemos algunas preguntas tienen dos parámetros. Veamos el ejemplo de Autor</p>
<pre><code class="language-javascript">init.prompt('author_name', 'Saúl Solórzano'),
</code></pre>
<p>El primer valor <code>author_name</code> es la pregunta, la segunda es un valor que nosotros le podemos dar por defecto, igual nos va a hacer la pregunta pero como ya tiene una por defecto podemos no contestarla y el valor se llenará de todas maneras.</p>
<h3>rename.json</h3>
<p>Supongamos que nos gusta llamar nuestro archivo de JS por el nombre del proyecto en lugar de un nombre genérico como <code>main.js</code> o <code>scripts.js</code> entonces en lugar de tener que renombrar ese archivo cada vez que creemos un proyecto podemos usar <code>rename.json</code> para lograr exactamente ese propósito.</p>
<pre><code class="language-javascript">{
  "js/name_test.js": "js/{%= name %}_test.js",
}
</code></pre>
<p>De esta manera nuestro archivo tomaría el nombre del proyecto.</p>
<h3>root/</h3>
<p>En esta carpeta están todos los archivos que queremos copiar, es importante destacar que los archivos dentro de esta carpeta se copiarán a la carpeta final que queremos usar, es decir, si la carpeta de nuestro proyecto es <code>proyecto/</code> los archivos se copiarán ahí, no a <code>proyecto/root</code></p>
<p>Los archivos se copiarán con la misma estructura, incluyendo sub-carpetas. Como comenté anteriormente, podemos usar todas las variables, si es que así podemos llamarlas, que declaramos como preguntas dentro de nuestros archivos. Por ejemplo, para un tema de WordPress necesitamos tener un archivo <code>style.css</code> donde se define un bloque de comentarios que WordPress usa para tener información del mismo. Este bloque tiene la siguiente estructura</p>
<pre><code class="language-css">/*!
Theme Name:
Description:
Author:
Author URI:
Version:
Tags:

License:
*/
</code></pre>
<p>Podemos usar los valores que declaramos aquí. Simplemente debemos usarlos dentro de <code>{%= %}</code> De la siguiente manera</p>
<pre><code class="language-css">/*!
Theme Name: {%= title %}
Description: {%= description %}
Author: {%= author_name %}
Author URI: {%= author_url %}
Version: {%= version %}

License:    {%= licenses %}
*/
</code></pre>
<p>Así podemos hacer con cualquier archivo, aquí está la cabecera del archivo <code>header.php</code></p>
<pre><code class="language-php">/**
 * Cabecera de la Página
 *
 * Nuestra todo el contenido hasta &lt;body&gt;
 *
 * @package     {%= name %}
 * @author      {%= author_name %} &lt;{%= author_email %}&gt;
 * @version     {%= version %}
 */
</code></pre>
<h2>Usando nuestro tema</h2>
<p>Una vez que hayamos configurado todo simplemente debemos ir a la carpeta que queramos usarlo y correr <code>grunt-init</code> desde la terminal con el nombre de nuestro template. Si vamos con nuestro ejemplo de un template llamado <code>tema</code> debo escribir</p>
<pre><code class="language-bash">grunt-init tema
</code></pre>
<p><img src="//www.saulsolorzano.com/wp-content/uploads/grunt-init.gif" alt="grunt-init" class="aligncenter size-full wp-image-1401" /></p>
<p>Como vemos, incluso a las preguntas a las que no les tenemos una respuesta por defecto, grunt mira el ambiente donde se encuentra y trata de dar respuestas, la carpeta donde usé el comando se llama <code>templates-grunt</code> entonces nos da ambas respuestas de <code>name</code> y <code>title</code> basado en esta información.</p>
<h2>Conclusión</h2>
<p>Usar los templates de <code>grunt</code> nos salva bastante tiempo cada vez que queremos comenzar un proyecto, grunt tiene algunos temas que soporta oficialmente pero todos tenemos una estructura de trabajo bastante estándar así que recomiendo mucho crear tu propio template para los diversos proyectos que hagas.</p>
<p>Cualquier duda me puedes preguntar en los comentarios.</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/grunt-usando-templates-para-iniciar-proyectos/">Grunt: Usando templates para iniciar proyectos</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saulsolorzano.com/grunt-usando-templates-para-iniciar-proyectos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grunt: El Corredor de Tareas en JavaScript</title>
		<link>http://www.saulsolorzano.com/grunt-el-corredor-de-tareas-en-javascript/</link>
		<comments>http://www.saulsolorzano.com/grunt-el-corredor-de-tareas-en-javascript/#comments</comments>
		<pubDate>Sun, 26 Oct 2014 00:46:33 +0000</pubDate>
		<dc:creator><![CDATA[saul]]></dc:creator>
				<category><![CDATA[Grunt]]></category>
		<category><![CDATA[automatización]]></category>
		<category><![CDATA[flujo de trabajo]]></category>
		<category><![CDATA[grunt]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[runner]]></category>
		<category><![CDATA[tareas]]></category>
		<category><![CDATA[task]]></category>

		<guid isPermaLink="false">http://www.saulsolorzano.com/?p=1385</guid>
		<description><![CDATA[<p>Grunt es un corredor de tareas de JavaScript. Si eres un desarrollador web front-end seguramente has visto Grunt más de una vez, pero muy probablemente nunca quisiste aprender porque pensaste que tu no necesitabas eso. Es una herramienta que se trabaja por la consola que es algo que el 95% de los programadores front-end evitan. [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/grunt-el-corredor-de-tareas-en-javascript/">Grunt: El Corredor de Tareas en JavaScript</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Grunt es un corredor de tareas de JavaScript. Si eres un desarrollador web front-end seguramente has visto Grunt más de una vez, pero muy probablemente nunca quisiste aprender porque pensaste que tu no necesitabas eso. Es una herramienta que se trabaja por la <code>consola</code> que es algo que el 95% de los programadores front-end evitan. Yo lo evité mucho tiempo pero una vez que me adapté al flujo de trabajo se me hace imposible desarrollar un proyecto sin Grunt integrado.<br />
<span id="more-1385"></span></p>
<h3>Automatización</h3>
<p>La idea de grunt es automatizar tareas, aquí una lista de algunas cosas que posiblemente hagas regularmente:<br />
* Compilar sass, less o stylus,<br />
* Concadenar y minimizar tu JavaScript,<br />
* Generar Sprites de SVG o convertirlos en DATA URI,<br />
* Templates básicos de Proyectos</p>
<p>Así como muchas otras, prácticamente cualquier cosa que hagas regularmente se puede automatizar con Grunt. Configurar Grunt no es complicado, es un proceso sencillo y la cantidad de comandos de la consola son muy pocos.</p>
<p>Para usar <code>Grunt</code> necesitas tener <code>NodeJS</code> instalado, NodeJS sirve para correr JavaScript a nivel de servidor, pero no dejes que esto te intimide, necesitamos NodeJS porque NodeJS viene con NPM que es un Manejador de Paquetes y aunque no uses Grunt NPM se usa para muchas cosas web así que siempre es bueno tenerlo. Así que no te preocupes que nunca necesitarás saber NodeJS para correr grunt.</p>
<h2>node.js</h2>
<p>Como dije antes para correr grunt necesitamos tener node.js instalado, hacerlo es súper sencillo, es como cualquier otra app, se descarga un paquete y se instala. Entra a la página de <a href="http://nodejs.org/">node.js</a> y dale al botón gigante de <strong>Instalar</strong>.</p>
<h2>grunt-cli</h2>
<p>Ahora necesitamos instalar Grunt-CLI, CLI (Command Line Interface) es lo que usamos para correr grunt desde el consola. Esto es lo que nos permitirá correr las tareas una vez las definamos.</p>
<p>Como lo dice en la <a href="http://gruntjs.com/getting-started#installing-the-cli">página oficial de grunt</a> lo único que necesitamos hacer es correr</p>
<pre><code class="language-bash">npm install -g grunt-cli
</code></pre>
<p>Si da error probablemente debamos correrlo usando <code>sudo</code> para darle permiso de administrador.</p>
<h2>packaje.json</h2>
<p>Todos los proyectos de Grunt necesitan un archivo llamado package.json. Es obviamente un archivo jSON donde se definen algunas cosas del proyecto y las dependencias que necesitamos, las dependencias son las tareas que vamos a correr, si necesitamos compilar <code>compass</code> instalamos la dependencia de <code>compass</code> y así vamos.</p>
<pre><code class="language-javascript">{
  "name": "nombre-de-proyecto",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.5",
  }
}
</code></pre>
<p>Una vez que tengamos <code>package.json</code> vamos a la carpeta del proyecto en la terminal y corremos este comando:</p>
<pre><code class="language-bash">npm install
</code></pre>
<p>Fíjate que aquí no usamos la bandera <code>-g</code> que es <strong>global</strong> porque grunt funciona por cada proyecto, las dependencias que instalamos las instalamos por proyecto.</p>
<p><img src="//www.saulsolorzano.com/wp-content/uploads/npm.gif" alt="Instalando dependencias de Grunt" class="alignright size-full wp-image-1386" /></p>
<p>Una vez que hayamos corrido el comando vamos a ver que se creó una carpeta llamada <strong>node_modules</strong> donde están las dependencias, si abrimos la carpeta vamos a que hay una carpeta llamada <strong>grunt</strong> porque es la dependencia que instalamos.</p>
<h2>Usando grunt</h2>
<p>Ahora que sabemos la configuración básica de grunt vamos a ver como funciona realmente. Necesitamos crear una tarea e instalar las dependencias que la harán funcionar. Vamos a usar como ejemplo hacer un sprite de SVGs.</p>
<p>Existen tareas de Grunt para casi cualquier cosa que te puedas imaginar, simplemente haz una busqueda en google y la tarea saldrá. El &#8220;plug-in&#8221; que necesitamos es <a href="https://github.com/FWeinb/grunt-svgstore">svgstore</a></p>
<p>Para instalarla corremos el siguiente comando en la terminal</p>
<pre><code class="language-bash">npm install grunt-svgstore --save-dev
</code></pre>
<p>Este comando instala svgstore y esta parte <code>--save-dev</code> se escribe para salvar la dependencia en nuestro archivo <code>package.json</code> indicando además que es una dependencia de <em>Desarrollo</em>. Una vez que el comando corra entramos en <code>package.json</code> y vamos a ver agregado de último</p>
<pre><code class="language-javascript">"grunt-svgstore": "^0.3.6"
</code></pre>
<h2>Gruntfile.js</h2>
<p>El siguiente paso es crear un archivo <code>Gruntfile.js</code>. Este es el archivo donde vamos a especificar todas nuestras tareas, el formato del archivo debe ser igual siempre, lo único que cambia entre proyectos son las tareas específicas de cada uno.</p>
<pre><code class="language-javascript">module.exports = function(grunt) {

    // Configuración
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        // Aquí especificamos la tarea
        svgstore: {

        }
    });

    //Le decimos a Grunt que vamos a usar este "plug-in"
    grunt.loadNpmTasks('grunt-svgstore');

    //Estas son realmente las tareas que vamos a correr.
    grunt.registerTask('default', ['svgstore']);

};
</code></pre>
<p>No es importante entender que hace cada función dado que es poco probable que lo escribamos desde cero cada vez que lo vayamos a usar, este es un archivo que una vez que lo configuras como quieres lo colocas en tu carpeta de templates para usarlo en diferentes proyectos.</p>
<p>Por los momentos vemos que agarra los datos de <code>package.json</code> y así sabe que tareas tenemos creada, si llegamos a crear una tarea y no tenemos instalado el plug-in nos dará error una vez corramos <code>grunt</code> en la terminal.</p>
<p>Ahora vamos a modificar la tarea correspondiente a <strong>svgstore</strong>. Si nunca antes hemos usado un plug-in y no tenemos idea de como es la configuración básica podemos ir a la página del plug-in que siempre están en <a href="https://github.com/">github</a> y habrá un ejemplo explicando los pasos a seguir.</p>
<p><img src="//www.saulsolorzano.com/wp-content/uploads/github.gif" alt="SVGstore en Github" class="alignright size-full wp-image-1387" /></p>
<p>Lo ideal es tener una carpeta para los SVGs, y ahí colocamos todos los que necesitemos colocar en el sprite</p>
<p><img src="//www.saulsolorzano.com/wp-content/uploads/Users_saulsolorzano_Desktop_proyecto.png" alt="Grunt: Entendiendo como funciona" class="aligncenter wp-image-1388" /></p>
<p>Ahora vamos a crear como tal la función. Siguiendo el ejemplo que vimos en github vamos a adaptarlo un poco más a nuestras necesidades</p>
<pre><code class="language-javascript">svgstore: {
    options: {
        prefix : "icon-",
        cleanup: true,
        svg: {
            style: "display: none;"
        }
    },
    default: {
        files: {
            "svg-sprite.svg": ["svgs/*.svg"]
        }
    }
}
</code></pre>
<p>Primero vemos las opciones y después colocamos nuestros archivos. El plug-in tiene más opciones y todas están detalladas en la documentación pero estas son las que uso siempre. Veamos una por una que significan:</p>
<ul>
<li><strong>Prefix: &#8220;icon-&#8220;</strong> Como el nombre lo indica, a cada icono le coloca un prefijo, en este caso &#8220;icon-&#8220;, el nombre que usaremos es el nombre del archivo de svg, es decir, si el icono se llama facebook.svg lo usaremos en nuestro código como icon-facebook, esto es bastante util por si en un futuro queremos usar css para agarrar todos los &#8220;icon-&#8221; y colocarles un estilo en específico.</li>
<li><strong>cleanup: true</strong> Esa opción elimina los estilos <em>inline</em> que tenga el SVG, como <code>fill</code> que evitarán que podamos darle estilo directo en nuestra hoja de estilo.</li>
<li><strong>svg: { style: &#8220;display: none;&#8221; }</strong> Esta opción nos permite colocarle un estilo <em>inline</em> al sprite, en este caso le coloco <code>display: none</code> porque el sprite debe ir incluido en todas las páginas que queramos usarlo, así evitamos que nos aparezcan muchos iconos sin estilo encima de la página.</li>
</ul>
<p>Despues llegamos a la parte de <strong>default</strong> este es el nombre de la tarea dentro de la tarea, me explico: en estos momentos sólo hay una &#8220;tarea&#8221; dentro de svgstore, si usamos en la terminal <code>grunt svgstore</code> el automáticamente correrá en los archivos de la carpeta svgs, pero supongamos que por alguna razón tenemos dos carpetas separadas de svg y queremos que se exporten a dos archivos diferentes, podemos hacer esto:</p>
<pre><code class="language-javascript">svgstore: {
    options: {
        prefix : "icon-",
        cleanup: true,
        svg: {
            style: "display: none;"
        }
    },
    social: {
        files: {
            "svg-sprite.svg": ["svgs/*.svg"]
        }
    }
    aplicacion: {
        files: {
            "svg-sprite.svg": ["svgs/*.svg"]
        }
    }
}
</code></pre>
<p>Entonces podemos correr <code>grunt svgstore:social</code> y <code>grunt svgstore:aplicacion</code> y grunt los trata diferentes, esta separación normalmente se usa es para tareas de desarrollo y tareas de producción.</p>
<p>Si nos fijamos en la linea de <strong>files</strong> vemos el formato, que se mantiene en casi todos los plugins de grunt. Primero colocamos el archivo final y después colocamos la fuente, grunt lo lee de esta manera: <em>Busca todos los SVG que están dentro de la carpeta svgs y haz un sprites con ellos que se llama svg-sprite</em></p>
<p>Ahora podemos correr</p>
<pre><code class="language-bash">grunt
</code></pre>
<p><img src="//www.saulsolorzano.com/wp-content/uploads/grunt.gif" alt="Corriendo Grunt" class="alignright size-full wp-image-1389" /></p>
<p>Y como ya habíamos definido que la tarea por defecto era svgstore no necesitamos especificarlo de nuevo en la terminal. Una vez que el comando haya corrido sin error vamos a ver el archivo creado en la raíz del proyecto.</p>
<p><img src="//www.saulsolorzano.com/wp-content/uploads/Users_saulsolorzano_Desktop_proyecto2.png" alt="Creando sprites de SVG con Grunt" class="alignright wp-image-1390" /></p>
<h2>Siguientes pasos</h2>
<p>Grunt es extremadamente poderoso y util una vez que lo hemos configurado como lo queremos. Recomiendo ahora revisar tu flujo de trabajo y ver que tareas estás haciendo constantemente que puedan ser automatizadas con Grunt (probablemente todas) y así te salvarás mucho tiempo.</p>
<p>Cualquier duda o comentario que tengas no dudes en escribir un comentario.</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/grunt-el-corredor-de-tareas-en-javascript/">Grunt: El Corredor de Tareas en JavaScript</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saulsolorzano.com/grunt-el-corredor-de-tareas-en-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Configurando ambiente de desarrollo para Mac sin MAMP</title>
		<link>http://www.saulsolorzano.com/configurando-ambiente-de-desarrollo-para-mac-sin-mamp/</link>
		<comments>http://www.saulsolorzano.com/configurando-ambiente-de-desarrollo-para-mac-sin-mamp/#comments</comments>
		<pubDate>Sun, 21 Sep 2014 23:12:01 +0000</pubDate>
		<dc:creator><![CDATA[Saúl Solórzano]]></dc:creator>
				<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[configuración]]></category>
		<category><![CDATA[MAMP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[utilidades]]></category>

		<guid isPermaLink="false">http://www.saulsolorzano.com/?p=1380</guid>
		<description><![CDATA[<p>Hace unas semanas decidí formatear mi computadora (iMac) dado que ya estaba muy cargada y se estaba estaba colocando muy lenta. Cuando me la compré nunca antes había tenido una Mac así que no estaba configurada de la mejor manera posible, una de las primeras cosas que hice fue instalar MAMP, la ventaja de MAMP [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/configurando-ambiente-de-desarrollo-para-mac-sin-mamp/">Configurando ambiente de desarrollo para Mac sin MAMP</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Hace unas semanas decidí formatear mi computadora (iMac) dado que ya estaba muy cargada y se estaba estaba colocando muy lenta. Cuando me la compré nunca antes había tenido una Mac así que no estaba configurada de la mejor manera posible, una de las primeras cosas que hice fue instalar MAMP, la ventaja de MAMP es que no tienes que hacer nada de configuración, en un solo paquete trae PHP, MySQL así como PhpMyAdmin para poder administrar las bases de datos y te tiene el ambiente de desarrollo por separado, deja las herramientas del sistema sin tocar.<br />
<span id="more-1380"></span></p>
<p>Pero igual para configurar el ambiente como a mi me gusta, con hosts virtuales tenía que configurar archivos de sistema, además de esta manera puedo tener siempre mi ambiente de desarrollo activo sin depender de una aplicación. Pero creo que la razón por la cual decidí hacerlo es que muchas herramientas funcionan más fácilmente, yo uso mucho <code>wp-cli</code> para WordPress y configurarlo con MAMP es muy laborioso muchas veces, homebrew también me dio problema una vez, porque siempre buscaban las copias del sistema entonces tenía que vivir cambiando el PATH de mis directorios. Así que cuando formatee decidí probar y usar los de sistema, aquí la explicación de como lo hice.</p>
<p>Mac trae por defecto instalado <code>PHP</code> y aunque ya no trae <code>MySQL</code> instalado es <em>súper fácil</em> instalarlo.</p>
<h3>Aclaratoria</h3>
<p><strong>Si no te sientes cómodo modificando archivos de sistema y apenas estás aprendiendo te recomiendo usar <a href="http://www.mamp.info/en/">MAMP</a>.</strong></p>
<h3>Preparación</h3>
<p>Antes de comenzar vamos a necesitar un par de aplicaciones, la primera es un editor de texto, yo subo para programar <em>Sublime Text</em> que es un excelente editor de texto y funciona a la perfección para lo que vamos a necesitar, sin embargo se puede usar VIM o nano o realmente cualquier otro programa de edición de texto que se use para programar. También vamos a necesitar la Terminal, recomiendo no usar la terminal.app que trae el sistema, en lugar instalar <a href="http://iterm2.com/">iterm2</a> que es mucho más completo.</p>
<h2>PHP</h2>
<p>Vamos a comenzar con PHP. Como dije arriba, ya una versión de PHP viene instalada en el sistema por defecto. Podemos revisar que efectivamente esté instalada corriendo el siguiente código para ver donde se encuentra</p>
<pre><code class="language-bash">which php
</code></pre>
<p>Y para confirmar que versión tenemos instalada usamos</p>
<pre><code class="language-bash">php --version
</code></pre>
<p>Casi siempre la versión que viene instalada es una versión más antigua a la actual, pero funciona igual perfectamente. Después copiamos el archivo php.ini que trae por defecto el sistema.</p>
<pre><code class="language-bash">sudo cp /etc/php.ini.default /etc/php.ini
</code></pre>
<p>Aquí puedes configurar cosas de PHP, como por ejemplo, aumentar la memoria que trae por defecto.</p>
<h2>Apache</h2>
<p>Apache también viene instalado con el sistema, la raiz de nuestro servidor local está por defecto en la siguiente dirección:</p>
<pre><code class="language-bash">/Library/WebServer/
</code></pre>
<p>La raiz se puede modificar si quieres, más adelante también explico como se hace en caso de que quieras hacerlo. Los tres comandos de Apache que necesitas saber son</p>
<h6>Iniciar Apache</h6>
<pre><code class="language-bash">sudo apachectl start
</code></pre>
<h6>Reiniciar Apache</h6>
<pre><code class="language-bash">sudo apachectl restart
</code></pre>
<h6>Detener apache</h6>
<pre><code class="language-bash">sudo apachectl stop
</code></pre>
<p>Si iniciamos apache y entramos desde nuestro navegador a <code>http://localhost</code> deberíamos ver <em>It works!</em> o <em>Funciona</em> dependiendo del idioma del sistema.</p>
<p>Debemos hacer algunas configuraciones extras de Apache, debemos editar este archivo, yo uso Sublime para editar estos archivos</p>
<pre><code class="language-bash">/private/etc/apache2/httpd.conf
</code></pre>
<p>Y ahí buscamos la linea</p>
<pre><code class="language-bash">LoadModule php5_module        libexec/apache2/libphp5.so
</code></pre>
<p>Y le quitamos el # que tiene delante para descomentarla. Con esto ya tenemos PHP corriendo.</p>
<h2>Homebrew</h2>
<p>Homebrew es una herramienta excelente que nos ayuda a instalar muchas cosas con unos simples comandos, como lo dice la misma página web es <strong>El gestor de paquetes para OS X que faltaba</strong></p>
<p>Para instalarlo copia el siguiente código en la terminal</p>
<pre><code class="language-bash">ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
</code></pre>
<p>Esta linea instala homebrew, dependiendo de tu conexión puede tardar un poco , una vez que termine corre <code>Brew Doctor</code> para verificar que todo esté bien, si es así te dirá</p>
<pre><code class="language-bash">$ brew doctor
Your system is ready to brew.
</code></pre>
<h2>MySQL</h2>
<p>Ahora que ya tenemos homebrew instalar MySQL es tan simple como copiar</p>
<pre><code class="language-bash">brew install mysql
</code></pre>
<p>Y empezará a instalar MySQL, una vez que termine verificamos con</p>
<pre><code class="language-bash">mysql --version
</code></pre>
<p>Ahora algunos comandos de MySQL que necesitas:</p>
<h6>Iniciar MySQL, este es el comando que debes usar cada vez que quieras usar MySQL, sino te dará error.</h6>
<pre><code class="language-bash">mysql.server start
</code></pre>
<h6>Reiniciar MySQL</h6>
<pre><code class="language-bash">mysql.server restart
</code></pre>
<h6>Detener MySQL</h6>
<pre><code class="language-bash">mysql.server stop
</code></pre>
<p>Como vemos son los mismos que usamos en PHP, así que no hay perdida. Ahora vamos a configurar algunas cosas, MySQL no trae clave por defecto pero es recomendado colocarle una clave. Cambiando <em>CLAVE</em> por la clave que deseas colocar</p>
<pre><code class="language-bash">cd /usr/local/share/mysql
mysqladmin -u root password 'CLAVE'
</code></pre>
<p>Por último vamos a mover el archivo mysql.sock dado que algunos programas esperan encontrarlo en /var y no está ahí por defecto, entre ellos wp-cli. Primero creamos la carpeta</p>
<pre><code class="language-bash">sudo mkdir /var/mysql
</code></pre>
<p>Y después copiamos el archivo</p>
<pre><code class="language-bash">sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
</code></pre>
<h2>Administrar la Base de datos</h2>
<p>Usando homebrew se puede instalar PHPMyAdmin para administrar la base de datos, sin embargo recomiendo fuertemente descargar <a href="http://www.sequelpro.com/">Sequel Pro</a>, es un administrador para Mac de base de datos y es, por mucho, la mejor aplicación para el trabajo. Ademas tiene la habilidad de conectarse a base de datos remotas lo que lo hace una herramienta muy poderosa. Como es el que uso y no tengo instalado PHPMyAdmin no daré las instrucciones.</p>
<h2>Conclusión</h2>
<p>Eso es todo lo que necesitamos para tener un ambiente de desarrollo local sin la necesidad de instalar MAMP, ya tengo varias semanas usándolo y no he tenido ningún problema, si, es un poco más de trabajo que instalar MAMP pero tampoco es mucho.</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/configurando-ambiente-de-desarrollo-para-mac-sin-mamp/">Configurando ambiente de desarrollo para Mac sin MAMP</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saulsolorzano.com/configurando-ambiente-de-desarrollo-para-mac-sin-mamp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google actualiza PageSpeed con recomendaciones móviles</title>
		<link>http://www.saulsolorzano.com/google-actualiza-pagespeed-con-recomendaciones-moviles/</link>
		<comments>http://www.saulsolorzano.com/google-actualiza-pagespeed-con-recomendaciones-moviles/#comments</comments>
		<pubDate>Tue, 24 Jun 2014 23:00:21 +0000</pubDate>
		<dc:creator><![CDATA[Saúl Solórzano]]></dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.saulsolorzano.com/?p=1362</guid>
		<description><![CDATA[<p>Google actualizó pageSpeed para incluir la versión móvil de un sitio y dar recomendaciones sobre el mismo. Bastante útil</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/google-actualiza-pagespeed-con-recomendaciones-moviles/">Google actualiza PageSpeed con recomendaciones móviles</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Google actualizó <a href="https://developers.google.com/speed/pagespeed/insights/?utm_source=blogspot&amp;utm_campaign=mobile_ux">pageSpeed</a> para incluir la versión móvil de un sitio y dar recomendaciones sobre el mismo. Bastante útil</p>
<p>The post <a rel="nofollow" href="http://www.saulsolorzano.com/google-actualiza-pagespeed-con-recomendaciones-moviles/">Google actualiza PageSpeed con recomendaciones móviles</a> appeared first on <a rel="nofollow" href="http://www.saulsolorzano.com">Saúl Solórzano</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saulsolorzano.com/google-actualiza-pagespeed-con-recomendaciones-moviles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

 Served from: www.saulsolorzano.com @ 2015-02-20 21:06:35 by W3 Total Cache -->