Optimización de SVGs y Procesador de datos JSON

SVGO

Es una herramienta útil para la optimización de archivos gráficos vectoriales SVG.

SVG

¿Por qué?

Los archivos SVG, especialmente los exportados por los diversos editores, por lo general contienen una gran cantidad de información redundante e inútil como: metadatos, comentarios, elementos ocultos, valores por defecto no óptimizados y otras cosas que se pueden quitar sin afectar el resultado o renderizado adecuado del SVG.

Por ejemplo, para optimizar múltiples carpetas de manera recursiva podemos usar:

find . -type d -print0 | xargs -0 -n 1 svgo -f

jq

JQ es como sed para datos JSON – se puede utilizar para cortar, filtrar, mapear y transformar datos estructurados con la misma facilidad que sed, awk, grep y amigos.

JSON

brew install jq

curl 'http://reqr.es/api/users' | jq '. | {id: .data[0].id}'

{
  "id": 1
}

curl 'http://reqr.es/api/users' | jq '. | {id: .data[].id}'

{
  "id": 1
}
{
  "id": 2
}
{
  "id": 3
}

curl 'http://reqr.es/api/users' | jq '[. | {id: .data[].id}]'

[
  {
    "id": 1
  },
  {
    "id": 2
  },
  {
    "id": 3
  }
]

curl 'http://reqr.es/api/users' | jq '. | {ids: [.data[].id]}'

{
  "ids": [
    1,
    2,
    3
  ]
}

Después de instalar Yosemite

Sobre Python

Como no voy a desarrollar en Python por el momento voy a optar por dejar la instalación de Python tal y como se encuentra, más que todo para evitar problemas con el sistema.

which python

/usr/bin/python
python --version

Python 2.7.6
python

Python 2.7.6 (default, Sep  9 2014, 15:04:36) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin

Sobre Bash

También voy a optar por dejar la instalación de Bash tal y como se encuentra:

which bash

/bin/bash
bash --version

GNU bash, version 3.2.53(1)-release (x86_64-apple-darwin14)

bash-it

bash-it es un mashup varios comandos y scripts de bash, también incluye otras cosas interesantes en bash (Se inspira en oh-my-zsh :).

Permite configurar autocompletado, temas, alias, funciones personalizadas y más.

Más información: bash-it

cd

git clone https://github.com/revans/bash-it.git ~/.bash_it

Cloning into '/Users/God/.bash_it'…

Aliases

atom ~/.bash_it/aliases/custom.aliases.bash

Por ejemplo

cite 'about-alias'
about-alias 'josoroma'

alias updatedb='sudo /usr/libexec/locate.updatedb'

alias confhosts='sudo atom /etc/hosts'
alias confvhosts='sudo atom /etc/apache2/extra/httpd-vhosts.conf'
alias confapache='sudo atom /etc/apache2/httpd.conf'
alias confphp='atom /usr/local/etc/php/5.6/php.ini'
alias confmongo='atom /usr/local/etc/mongod.conf'

alias restartapache='sudo apachectl restart'
alias restartmysql='mysql.server restart'
alias restartsshagent='~/bin/ssh-agent'

alias www='cd /Library/WebServer/Documents'

alias gitcompare="git diff --stat master develop"

alias gitcompare1="git log --pretty=format:'%h' -2 master && git log --pretty=format:'%h' -2 develop"

alias gitcompare2="git log --pretty=format:'%h - %an, %ar : %s' -2 master && git log --pretty=format:'%h - %an, %ar : %s' -2 develop"

alias atompackages="ls -l ~/ .atom/packages | awk '{print $8}'"

alias aliases='atom ~/.bash_it/aliases/custom.aliases.bash'

Instalar PIP

Una herramienta para la instalación y gestión de paquetes de Python:

sudo easy_install pip

Installing pip script to /usr/local/bin
Installing pip2.7 script to /usr/local/bin
Installing pip2 script to /usr/local/bin

HTTPie

HTTPie es un cliente de línea de comandos HTTP. Su objetivo es hacer la interacción CLI con los servicios web tan fácil y humano como sea posible.

Proporciona un comando http que permite el envío de peticiones HTTP utilizando una sintaxis simple y natural, y muestra las respuestas coloreadas.

HTTPie se puede utilizar para la prueba, depuración y, en general para interactuar con servidores HTTP.

Más información: HTTPie

sudo easy_install httpie

Searching for httpie
Reading https://pypi.python.org/simple/httpie/
Best match: httpie 0.8.0

Installing http script to /usr/local/bin

Por ejemplo

http -v httpie.org

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: httpie.org
User-Agent: HTTPie/0.8.0

HTTP/1.1 302 Found
Cache-Control: max-age=1800
Connection: Keep-Alive
Content-Length: 223
Content-Type: text/html; charset=iso-8859-1
Date: Sun, 30 Nov 2014 17:53:00 GMT
Expires: Sun, 30 Nov 2014 18:23:00 GMT
Keep-Alive: timeout=5, max=250
Location: https://github.com/jakubroztocil/httpie
Server: Apache
X-Awesome: Thanks for trying HTTPie :)

Instalar Xcode desde el App Store

Para construir aplicaciones para OS X de Yosemite, asegúrese de que ha instalado OS X Yosemite y Xcode. Actualmente es posible enviar aplicaciones de Mac escritas con Swift a la Mac App Store.

Xcode Command Line Tools

xcode-select -p
ls -la /Applications/Xcode.app/Contents/Developer

Homebrew

El gestor de paquetes de lo que le hizo falta a OS X. Instala esas “cosas” que necesitamos y que Apple no instaló.

Más información: brew.sh

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

This script will install:

/usr/local/bin/brew

Verificar el estado de Brew

brew doctor

Actualizar

brew update && brew upgrade `brew outdated`

Un flujo de trabajo que mediante CLI permite la administración de aplicaciones de Mac que son distribuidas en binario:

brew install caskroom/cask/brew-cask

El proyecto XQuartz es un esfuerzo para desorollar una versión “open source” X.Org del X Window System que corra en OS X:

brew cask install xquartz
brew help

brew –config

HOMEBREW_VERSION: 0.9.5
ORIGIN: https://github.com/Homebrew/homebrew
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CELLAR: /usr/local/Cellar
CPU: quad-core 64-bit haswell
OS X: 10.10.1-x86_64
Xcode: 6.1
CLT: 6.1.0.0.1.1413057044
Clang: 6.0 build 600
X11: N/A
System Ruby: 2.0.0-481
Perl: /usr/bin/perl
Python: /usr/bin/python
Ruby: /usr/bin/ruby

Network Tools

brew install wget mtr nmap iftop lynx fping arp-scan htop pgrep

Considere la posibilidad de establecer la siguiente ruta en PATH:

echo export PATH='/usr/local/sbin:$PATH' >> ~/.bash_profile

Image Magick

Para convertir, editar y componer imágenes.

Más información: Image Magick – Command line tools

brew install ImageMagick --with-ghostscript

ACK

Es una herramienta como grep pero optimizada para desarrolladores.

Más información: beyondgrep.com

brew install ack

MySQL

La Base de Datos de código abierto más popular del mundo:

brew install mysql
mysql.server restart
mysql_secure_installation
unset TMPDIR
mysql_install_db --verbose --user=`whoami` \\
--basedir="$(brew --prefix mysql)" \\
--datadir=/usr/local/var/mysql --tmpdir=/tmp
mysql.server restart
mysql -u root -p

Git

Potente herramienta para la colaboración, revisión y la gestión de código de proyectos.

brew install git

brew install node

Actualizar node:

npm install -g npm@latest
node --version

v0.10.33

SSH para Git

brew install ssh-copy-id
ssh-keygen -b 2048 -C "username@example.com" -f ~/.ssh/id_username_domain_rsa
ssh-add ~/.ssh/id_username_domain_rsa
ssh-add -l
git config --global user.name "username"
git config --global user.email "username@example.com"
git config --global push.default upstream
git config --global branch.autosetuprebase always
git config --global color.ui true
ssh-copy-id -i ~/.ssh/id_username_domain_rsa.pub username@remote.example.com

Aseguramiento de la calidad del código

npm install -g jshint

npm install -g csslint

Herramienta basada en nodejs que srive para optimizar archivos de gráficos vectoriales SVG:

npm install -g svgo

Sails

sudo npm install sails -g
brew install mongodb

Mongo

brew install mongodb

Para levantar Mongo al iniciar el sistema:

ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents

o para levantar el servicio Mongo en este el momento:

mongod --config /usr/local/etc/mongod.conf

Genghis

Una aplicación para la adminsitración de MongoDB.

Más información: GenghisApp.com

sudo gem install genghisapp
sudo gem install bson_ext -v 1.9.2
genghisapp --kill
genghisap

Antes de instalar PHP

brew tap homebrew/dupes

Cloning into '/usr/local/Library/Taps/homebrew/homebrew-dupes'...
brew tap homebrew/versions

Cloning into '/usr/local/Library/Taps/homebrew/homebrew-versions'...
brew tap homebrew/homebrew-php

Cloning into '/usr/local/Library/Taps/homebrew/homebrew-php'...

Instalar PHP

Más información: Homebrew PHP

brew install php56 php56-crypto php56-imagick php56-mcrypt php56-mongo php56-pspell php56-xdebug php56-oauth
 ./configure --prefix=/usr/local/Cellar/php56/5.6.3

 --localstatedir=/usr/local/var

 --sysconfdir=/usr/local/etc/php/5.6

 --with-config-file-path=/usr/local/etc

Para habilitar PHP en Apache hay que agregar la siguiente línea al httpd.conf y luego reiniciar Apache:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

php.ini

sudo atom /usr/local/etc/php/5.6/php.ini

Para levantar PHP al iniciar el sistema:

ln -sfv /usr/local/opt/php56/*.plist ~/Library/LaunchAgents

Para levantar PHP en este momento:

launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist

Apache

sudo apachectl configtest
sudo chown -R josoroma:staff /Library/WebServer/Documents
tail -f /private/var/log/apache2/error_log
ls -la /usr/local/etc/php/5.6/conf.d/
php -i

Composer

Gestor de dependencias para PHP.

Más información: Composer

brew install composer

Aseguramiento de la calidad del código PHP

Para detectar violaciones sobre las normas de codificación:

brew install php-code-sniffer php-cs-fixer

sudo atom /etc/apache2/httpd.conf

Descomentar los siguientes módulos

LoadModule include_module libexec/apache2/mod_include.so
LoadModule log_debug_module libexec/apache2/mod_log_debug.so
LoadModule session_module libexec/apache2/mod_session.so
LoadModule session_cookie_module libexec/apache2/mod_session_cookie.so
LoadModule session_dbd_module libexec/apache2/mod_session_dbd.so
LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so

Modificar la ubicación del módulo PHP5

LoadModule php5_module /usr/local/opt/php56/libexec/apache2/libphp5.so

Modificar en “unixd_module”

User josoroma
Group staff

Modificar “ServerAdmin” y “ServerName”

ServerAdmin username@example.com
ServerName 127.0.0.1

En Directory “/Library/WebServer/Documents” modificar

AllowOverride All

Permitir Virtual Hosts descomentando la siguiente línea

Include /private/etc/apache2/extra/httpd-vhosts.conf

Virtual Hosts

sudo atom /etc/apache2/extra/httpd-vhosts.conf
<VirtualHost *:80>
 DocumentRoot "/Library/WebServer/Documents/example.com/www/"
 ServerName example.com
 ErrorLog "/private/var/log/apache2/example.com_error_log"
 CustomLog "/private/var/log/apache2/example.com_access_log" common
</VirtualHost>

hosts

sudo atom /etc/hosts
127.0.0.1	localhost scorpion.local
127.0.0.1	example.com
#
255.255.255.255	broadcasthost
::1             localhost
sudo apachectl restart

Cosas que necesito tatuarme sobre PHP y OOP

¿Cuándo debo usar require o include?

La función require() es idéntica a include(), excepto que controla los errores de manera diferente. Si se produce un error, la función include() genera una advertencia, pero el script seguirá con su ejecución. Por otro lado, El require() genera un error fatal, por lo que el script se detendrá.

¿Cuándo debo usar require_once o require?

La declaración require_once () es idéntica a require(), pero PHP comprobará si el archivo ya se ha incluido, y si es así, no lo incluye otra vez.

Interfaces

Las clases abstractas son una característica mal entendida de la programación en PHP orientada a objetos (OOP) y la fuente de confusión surge cuando se considera frente a una interfaz.

¿Cuándo debo usar interfaces?

La razón obvia para usar una interfaz es que una clase hija puede implementar varias interfaces, pero sólo puede extender una única clase abstracta.

¿Cuándo debo usar clases abstractas?

Cuando no se requiere hacer uso de herencia múltiple se recomienda usar clases abstractas, simplemente porque permiten más tarde añadir funcionalidad básica dentro de la clase abstracta. Sin embargo las razones de la creación de clases abstractas debe ser más que eso.

“Abstract” sólo indica que algo fue declarado pero no definido, por lo que antes de usarlo, es necesario definirlo.

¿Por qué debo utilizar clases abstractas?

Una clase abstracta proporciona funciones base concretas, así como funciones abstractas que deben ser implementadas por clases concretas hijas que se vinculan por algo que llamaremos: un contrato.

El brillo sutil de las clases abstractas

Pueden llamar a funciones abstractas dentro de las funciones de la base concreta. Por ejemplo:

abstract class Vehicle { 
  function start() { 
    $ready = $this->drive();      // Existe en la clase hija por contrato.
    return strtoupper($ready); 
  } 
  abstract function drive();      // Este es el contrato.
} 
 
class Car extends Vehicle { 
  function drive() {              // Esta implementación concreta es obligatoria.
    return "Please accelarate your car."; 
  } 
} 

class Motorcycle extends Vehicle {
  // Actually you ride a motorcycle.
  function drive() {              // Esta implementación concreta es obligatoria.
    return "Please accelarate your motorcycle."; 
  } 
} 
 
$car = new Car(); 
echo $car->start();

$motorcycle = new Motorcycle(); 
echo $motorcycle->start();

Para comprender mejor las clases abstractas:

  • Herencia simple. Las clases hijas sólo pueden extender sólo una clase a la vez.
  • Las clases abstractas no pueden ser instanciadas – no se usa new Vehicle();
  • Las clases abstractas sólo pueden definir variables de clase del tipo const.
  • La clase abstracta A puede ser extendida por otra clase abstracta B. La clase B puede implementar alguna o ninguna de las funciones abstractas en A.
  • En el caso anterior, una clase hija C que extiende a la clase abstracta B debe implementar todas las funciones abstractas de B, así como las funciones abstractas en A que no se hayan implementado en la clase abstracta B.
  • Los parámetros de las funciones concretas y las funciones abstractas deben coincidir. Sin embargo, si una función abstracta se define como función abstracta turnOff($message); entonces está bien implementarla como turnOff($message, $lock = TRUE), pero no como turnOff($message, $lock).
  • La visibilidad de las funciones en las clases hijas debe ser la mismo o menos restrictiva que las de la clase madre. Por lo tanto protected abstract function puede ser implementada como protected o public pero no como private.
  • Arriba de PHP 5.3 si es permitido declarar funciones como static abstract.

A diferencia de las interfaces, las clases abstractas si son clases. Estas son otras características:

  • Las clases abstractas pueden tener “consts”, “members”, “method stubs” y “defined methods”, mientras que las interfaces sólo pueden tener “consts” y  “method stubs“.
  • Los métodos y los miembros de una clase abstracta se pueden definir con cualquier visibilidad, mientras que todos los métodos de una interfaz se deben definir como públicos.
  • Al heredar una clase abstracta, la clase hija debe definir los métodos abstractos, mientras que una interfaz puede extender otra interfaz y no es necesario que los métodos deban ser definidos.
  • Una clase hija sólo puede extender una sola clase abstracta (o cualquier otra), mientras que una interfaz se puede extender, también una clase puede implementar otras múltiples interfaces.
  • Una clase hija puede definir métodos abstractos con la misma o visibilidad menor restrictiva, mientras que una clase que implementa una interfaz debe definir los métodos con la misma visibilidad exacta.

Abstract Class vs Final Class/”Class Constant”

  • Una clase abstracta no puede ser instanciada. En otras palabras, no podemos crear directamente el objeto de la clase abstracta. Pero con las clases final sí podemos crear una instancia.
  • Una clase abstracta debe ser extendida mientras una clase final no lo puede ser.
  • Una clase final no puede contener métodos abstractos, pero una clase abstracta sí puede contener métodos final.

Traits

Arriba de PHP 5.4, las clases abstractas son antigüedades y no deben utilizarse. La clara separación de las interfaces y los traits proporciona los mismos beneficios DRY y son menos restrictivos para el desarrollador.

Los traits no implican una relación. Son puramente reutilización de código. En tiempo de ejecución, los traits no existen. No dicen nada acerca de un objeto que los utiliza, cómo se comportan, lo que puede hacer con ellos, o cualquier otra cosa. Los traits son puramente reutilización de código. En ese sentido, son completamente ortogonales a las interfaces; mientras que una interfaz es la reutilización puramente de la interfaz, un trait es puramente reutilización de código.

Las clases abstractas existen para apoyar a los desarrolladores de PHP 5.3, que aún no tienen acceso a los traits.

Promesas en JavaScript

En esencia, una Promesa es el resultado de una tarea, que puede o no haber terminado. El único requisito de interfaz de una promesa es tener una función llamada “then”, que puede hacer un “callback” cuando la promesa se cumple o cuando falla.

Listings.getAll("ID").then(function(listing) {
  return query.find();
}).then(function(results) {
  return results[0].update({ key: value });
}).then(function(result) {
  console.log('Ok').
}, function(error) {
  console.log('Error').
});

La ventaja “cuántica” de una Promesa

JavaScript es “single threaded”, lo que significa que dos bits de un Script no se pueden ejecutar al mismo tiempo, se van corriendo uno tras otro. Además en un navegador Web, JavaScript comparte un hilo con muchas otras cosas que suceden.

https://www.youtube.com/watch?v=o84ryzNp36Q

AngularJS Promises

Las promesas son muy útiles cuando se está trabajando con “Async: Success/Error” porque el interés se centra ​​en reaccionar ante el resultado y no en el momento exacto en que algo se vuelve disponible.

Una promesa puede ser:

  • Fulfilled – La acción en relación con la promesa se logró.
  • Rejected – La acción en relación con la promesa falló.
  • Pending – Pendiente, no se ha cumplido o rechazado aún.
  • Settled – Reiterada, se ha cumplido o se ha rechazado.

La diferencia es sutil, pero muy útil. Los fallos o rechazos de Promesas saltan hacia adelante al siguiente “then”, con un “callback” de rechazo (o “catch”, que es equivalente). Por ejemplo, con then(func1, func2), func1 o func2 pueden ser llamados, pero nunca ambos. Pero con then(func1).catch(func2), ambos serán llamados aún si func1 falla, ya que son pasos separados en la cadena.

ECMAScript 6 (ES6)

Para ampliar información sobre Excepciones, Paralelismo, Secuencias y Generadores:

Código PHP elegante con Sublime Text

Aunque ahora me considero un fiel usuario del editor Atom y todas sus bondades:

La fórmula es simple, para crear código limpio y consistente hay que seguir y aplicar las normas o estándares que cualquier proyecto o “framework” necesite.

PHPCS

PHP_CodeSniffer tokeniza PHP, JavaScript y CSS para detectar posibles violaciónes a un conjunto definido de normas de codificación.

Para más información: PHP_CodeSniffer

PHP_CodeSniffer es un script en PHP5 que tokeniza PHP, JavaScript y CSS para detectar posibles violaciónes de acuerdo a un estándar de codificación definido. Es una herramienta de desarrollo fundamental que garantiza que el código permanece limpio y consistente. También puede ayudar a prevenir algunos errores de semántica que son muy comunes por parte de los desarrolladores.

cat ~/.composer/composer.json

{
    "require": {
        "drush/drush": "dev-master"
    }
}

Instalación de PHP_CodeSniffer:

composer global require 'squizlabs/php_codesniffer=*'

phpcs --version

phpcs --help

cat ~/.composer/composer.json

{
    "require": {
        "drush/drush": "dev-master",
        "squizlabs/php_codesniffer": "*"
    }
}

Para conocer los estándares de codificación disponibles:

phpcs -i

“The installed coding standards are PEAR, PHPCS, PSR1, Zend, Squiz, PSR2 and MySource”

PHP-CS-FIXER

Optmizador de estándares de codificación:

Esta herramienta mejora la mayoría de los problemas que surgen del código, en especial cuando se quiere seguir los estándares de codificación de PHP tal y como los define los documentos PSR-1 y PSR-2.

De manera general, para minizar el caos, se recomienda realizar las mejoras de manera manual.

Instalación de PHP-CS-Fixer:

composer global require 'fabpot/php-cs-fixer=*'

php-cs-fixer self-update

cat ~/.composer/composer.json

{
    "require": {
        "drush/drush": "dev-master",
        "squizlabs/php_codesniffer": "*",
        "fabpot/php-cs-fixer": "*"
    }
}

PHPMD

PHPMD es un proyecto derivado de PHP Depend y pretende ser una herramienta equivalente a la herramienta de Java conocida PMD.

PHPMD puede verse como una aplicación frontend de uso fácil que permite ver el flujo de las métricas medidas por PHP Depend.

Instalación de PHPMD:

composer global require 'phpmd/phpmd=*'

cat ~/.composer/composer.json

{
    "require": {
        "drush/drush": "dev-master",
        "squizlabs/php_codesniffer": "*",
        "fabpot/php-cs-fixer": "*",
        "phpmd/phpmd": "*"
    }
}

phpmd

Instalación de Sublime Text

sudo add-apt-repository ppa:webupd8team/sublime-text-2

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install sublime-text

Instalación del gestor de paquetes de Sublime Text

Se recomienda instalar el gestor de paquetes de Sublime: Package Manager.

Algunos paquetes interesantes para empezar:

  • AdvancedNewFile.
  • Auto Semi-Colon.
  • BracketHighlighter.
  • DocBlockr.
  • Drupal Project Autocomplete.
  • Drupal Snippets.
  • Git.
  • GitGutter.
  • Goto Documentation.
  • Goto Drupal API.
  • Phpcs.
  • Sass.
  • SublimeCodeIntel.
  • Terminal.
  • Theme – Soda.
  • TrailingSpaces.

Seguidamente, instale desde Sublime Text el paquete: Phpcs.

Agregar estándar de codificación Drupal

Por ejemplo, si se ocupa agregar el estándar de codificación de Drupal:

composer global require drupal/coder:\>7

cd ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards

ln -s /home/USERNAME/.composer/vendor/drupal/coder/coder_sniffer/Drupal Drupal

Nota: Sustituir USERNAME por el nombre de usuario adecuado.

cat ~/.composer/composer.json

{
    "require": {
        "drush/drush": "dev-master",
        "squizlabs/php_codesniffer": "*",
        "fabpot/php-cs-fixer": "*",
        "phpmd/phpmd": "*",
        "drupal/coder": ">7"
    }
}
phpcs -i

“The installed coding standards are PEAR, PHPCS, PSR1, Drupal, Zend, Squiz, PSR2 and MySource”

Instalación del plugin PHPCS para Sublime Text

Por último configure el plugin PHPCS también desde Sublime Text. Por favor navegar a:

'Preferences' > 'Package Settings' > 'PHP Code Sniffer' > 'Settings - User'

y colocar el siguiente trozo de código de configuración:

{
    "extensions_to_execute": ["php","module","inc","install","test","profile","theme"],
    "phpcs_additional_args": {
        "--standard": "Drupal",
        "-n": ""
    },
    "phpcs_executable_path": "/home/USERNAME/.composer/vendor/bin/phpcs",
    "phpmd_executable_path": "/home/USERNAME/.composer/vendor/bin/phpmd",
    "php_cs_fixer_executable_path": "/home/USERNAME/.composer/vendor/bin/php-cs-fixer"
}

Se puede notar en la configuración:

"--standard": "PSR2"

que puede ser fácilmente configurable a algo como:

"--standard": "Drupal"

Nota: Recuerde sustituir USERNAME por el nombre de usuario adecuado.

'Preferences' > 'Package Settings' > 'PHP Code Sniffer' > 'Settings - User'

y colocar el siguiente trozo de código de configuración:


Configuración base para desarrollar para Drupal

'Preferences' > 'Settings - User'

y colocar el siguiente trozo de código de configuración:

{
	"color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme",
	"default_line_ending": "unix",
	"ensure_newline_at_eof_on_save": true,
	"fallback_encoding": "UTF-8",
	"font_size": 11.0,
	"ignored_packages":
	[
		"Vintage"
	],
	"rulers":
	[
		80
	],
	"shift_tab_unindent": true,
	"soda_classic_tabs": true,
	"soda_folder_icons": true,
	"tab_size": 2,
	"theme": "Soda Dark.sublime-theme",
	"translate_tabs_to_spaces": true,
	"trim_automatic_white_space": true,
	"trim_trailing_white_space_on_save": true,
	"use_tab_stops": true
}

Bash it mash up

Por favor consulte: “Bash it mash up

Clonar en nuestro “home”

git clone https://github.com/revans/bash-it.git ~/.bash_it

Correr la instalación

~/.bash_it/install.sh

Editar al gusto

vim ~/.bash_profile

Se puede deshabilitar “plugins”

bash-it disable plugin chruby-auto
bash-it disable plugin chruby
bash-it disable plugin java
bash-it disable plugin jekyll
bash-it disable plugin latex
bash-it disable plugin nginx
bash-it disable plugin osx
bash-it disable plugin z_autoenv
bash-it disable plugin z

Se puede deshabilitar “aliases”

bash-it disable alias bundler
bash-it disable alias emacs
bash-it disable alias heroku
bash-it disable alias hg
bash-it disable alias homebrew
bash-it disable alias jitsu
bash-it disable alias maven
bash-it disable alias osx
bash-it disable alias rails
bash-it disable alias textmate

Linux – Encontrando lo recién modificado

Ordenados en orden inverso al tiempo de actualización (es decir, los archivos recientes de primero):

find /etc -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | more
find /etc -type f -exec stat --format '%Y :%y %n' {} \; | sort -nr | cut -d: -f2- | head -n50

Uso de -print0 para soportar espacios y también “linefeeds” en los nombres de archivo:

find /etc -type f -print0 | xargs -0 stat --format '%Y :%y %n' | sort -nr | cut -d: -f2- | head -n50

Utilizando stat estando en el directorio actual:

stat --printf="%y %n\n" $(ls -tr $(find * -type f)) | sort -k1 -k2 -r | head -n50

Para buscar archivos dentro de /etc y todos sus sub-directorios, los archivos que hayan sido modificado en los últimos 45 minutos:

find /etc -type f -mmin -45

Para buscar archivos dentro de /etc y todos sus sub-directorios, los archivos que hayan sido modificado en los últimos 7 días:

find /etc -type f -mtime -7
for f in `find /etc -type f -mtime -7`; do ls -l $f; done

Por favor consulte:

perl: warning: Setting locale failed

En caso de conseguir el siguiente error al instalar o ejecutar ciertos comandos en perl:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = "en_US:en",
	LC_ALL = (unset),
	LC_PAPER = "es_CR.UTF-8",
	LC_ADDRESS = "es_CR.UTF-8",
	LC_MONETARY = "es_CR.UTF-8",
	LC_NUMERIC = "es_CR.UTF-8",
	LC_TELEPHONE = "es_CR.UTF-8",
	LC_IDENTIFICATION = "es_CR.UTF-8",
	LC_MEASUREMENT = "es_CR.UTF-8",
	LC_TIME = "es_CR.UTF-8",
	LC_NAME = "es_CR.UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Se puede solucionar ejecutando los dos siguientes comandos:

locale-gen en_US en_US.UTF-8 es_CR.UTF-8

dpkg-reconfigure locales

Nota: Hay que sustituir “es_CR” por el lenguaje que imprime el error.