Etiqueta: chuleta
Clip/Manga Studio
De momento, no se pueden alinear objetos (al estilo Inkscape o similares)
Para crear una “rejilla democrática”, crear un “Panel” con las dimensiones del borde exterior de la rejilla, seleccionar su capa principal y luego subdividirlo con Layer / Ruler – Frame / Divide frame border equally
Para dibujar curvas paralelas, crear una regla especial de tipo curvas
Los ajustes detallados de la herramienta actual pueden estar ocultos, mira si Window/Subtool Detail está activado.
Enlazar / conectar bocadillos: crea los 2 bocadillos como capas diferentes, añade el rabillo que los conecta y combina ambas capas.
Se puede gestionar fácilmente la superposición de figura y fondo usando una capa para cada uno, y máscara de capa en el fondo (al pinchar en la máscara, puedes borrar lo que se ve, sin borrar el contenido en sí)
Si no te convence la sensibilidad de tu lápiz, prueba a refinarla en el propio Clip Studio.
Con la regla especial, es bastante fáćil dibujar líneas cinéticas (curva paralela, radial, lineas paralelas…)
Se pueden conseguir efectos bastante interesantes con las opciones de superposición de capa (Multiply, Substract…) Hay que tener cuidado al seleccionar colores con esa opción, ya que se captura el color que se ve, no el que hay realmente en la capa actual.
Si no controlas mucho el lápiz (lo cual es fácil, si usas tableta sin pantalla), suele ser más interesante hacer un dibujo a “lápiz” en una capa, y usarla como referencia (azul) para dibujar en otra capa la “tinta” más despacio y prestando atención al flujo.
Crear plumas personalizadas / materiales a partir de dibujo
Estupendo Tutorial sobre reglas de perspectiva en Clip Studio
Instalar Linux en Alienware R3
Desactivar “Secure Boot” en la BIOS (F2)
Arrancar UEFI desde pendrive Ubuntu (F12)
Instalar Ubuntu 18.04 (añadir opción kernel nomodeset a /boot/grub/grub.cfg)
Arrancar Ubuntu
Actualizar
sudo apt-get update
sudo apt-get upgrade
Instalar driver Nvidia y Optimus (prime)
apt-get install linux-headers-$(uname -r)
add-apt-repository ppa:graphics-drivers
apt-get update
apt-get install nvidia-driver-396
# quitar nomodeset en grub
reboot
# nvidia-prime
prime-select query
prime-select {intel|nvidia}
# Bumblebee (para controlador propietario)
apt-get install bumblebee-nvidia
Comprobar que en /etc/bumblebee/xorg.conf.nvidia, el BusID se correponde con el de la tarjeta NVidia (por ejemplo, PCI:01:00.0)
El brillo de la pantalla se puede ajustar con el siguiente comando (X representa el porcentaje, por ejemplo .8 equivale 80%)
xrandr --output eDP-1-1 --brightness X
Si el trackpad no funciona, probar a no usar el modulo i2c_hid
# Prueba OpenGL
LIBGL_DEBUG=verbose glxgears
Instalar CUDA
wget https://developer.nvidia.com/compute/cuda/9.2/Prod/local_installers/cuda_9.2.88_396.26_linux
bash cuda_9.2.88_396.26_linux
# parche recomendado
wget https://developer.nvidia.com/compute/cuda/9.2/Prod/patches/1/cuda_9.2.88.1_linux
bash cuda_9.2.88.1_linux
cat > /etc/profile.d/cuda.sh <
Suspender equipo
En la mayoría de los modelos, con la siguiente configuración de Grub se consigue que la suspensión del equipo funcione correctamente:
# Añadir en /etc/default/grub
GRUB_CMD_LINUX_DEFAULT += nogpumanager acpi_osi=! acpi_osi="Windows 2009"
# luego, ejecutar...
update-grub
Más información:
Driver Nvidia y CUDA
Ubuntu
# Comprobar qué paquetes hay disponibles:
ubuntu-drivers devices
# Instalar
apt-get install nvidia-390
# Reiniciar
reboot
# comprobar
nvidia-smi
# https://developer.nvidia.com/cuda-downloads
# https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1604&target_type=debnetwork
# Descargar definición repositorio
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
dpkg -i cuda-repo-ubuntu1604_9.1.85-1_amd64.deb
apt-key adv –fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
apt-get update
apt-get install cuda
Referencias rápidas Javascript
SSL Reverse proxy con Apache
Un ejemplo que sirve para Meteor:
SSLProxyEngine On
# snake oil certs in proxyied service -> skip checks
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /websocket ws://localhost:3000/websocket
ProxyPassMatch ^/sockjs/(.*)/websocket ws://localhost:3000/sockjs/$1/websocket
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
ProxyPassReverseCookiePath / /
ProxyPassReverseCookieDomain 127.0.0.1 52.211.154.50
RequestHeader set X-Forwarded-Proto "https"
Parece que en nginx la configuración análoga es trivial. Quizá sea un buen argumento para convertirse…
Arranque USB en Virtualbox
Habilitar EFI en Configuración / Sistema, entrar en el menú de arranque con F12 y elegir el dispositivo USB
OpenMPI
Para detectar problemas con OpenMPI, resulta útil contar con la información adicional que proporcionan estos parámetros:
mpirun –mca btl_base_verbose 100 -mca btl_openib_verbose 1 -mca mpi_show_mca_params enviro
Para excluir un interfaz de red:
# Ethernet
-mca btl_tcp_if_exclude = lo,eth0
# Infiniband
-mca btl_openib_if_exclude
Para desactivar temporalmente el uso de Infiniband
-mca btl tcp,self
Los parámetros MCA también se pueden pasar mediante variables de entorno, por ejemplo
export OMPI_MCA_btl=tcp,self
HTML
Etiquetas básicas
# Estructura: <body>, <section>, <article>, <nav>, <aside>, <header>, <footer>, <h1>..<h6>, <details>, <summary> # aside se aconseja para barras lateras, textos explicativos, bloques destacados... # Semántica: <a>, <p>, <form>, <img>, <table>, <ol>, <ul>, <dl>, <code>, <small>, <cite>, <quote>, <abbr>, <mark>, <dfn>, <data>, <time>, <var>, <address>, <figure>, <figcaption> # Estilo: # Ojo que tanto <div> como <span> no siguen una estructura jerárquica (aún cuando se aniden) <div>, <span> <!-- Comentario -->
Etiquetas obsoletas
<b> -> font-style:bold / <strong> <i> -> font-style:italic / <em> <u> -> text-decoration:underline <acronym> -> <abbr> <tt>, <xmp> <applet> -> <object> <center>, <font>, <big> <frame> # atributos: align, background, bgcolor
Caracteres referenciados
Lista completa (W3C)
Los más habituales:
# espacio en blanco # acentos -> acute Á ó # acentos invertidos -> grave è # tilde, ñ ã ñ # ampersand, copyright, grado & © ° # dolar, euro $ € # flechas -> arrow ← ↑ → ↓
Ejemplo de página básica
<!DOCTYPE html> <head> <meta charset="UTF-8" /> <title>Título de la página</title> <style>...</style> </head> <body> <header> <h1>Título cabecera (Nombre del sitio web)</h1> </header> <nav> <header> <h2>Título navegación</h2> </header> <ul>... </ul> </nav> <article> <header> <h1>Título del artículo</h1> <h2>Subtítulo del artículo</h2> </header> <section> <h3>Título de la sección</h3> </section> <footer> <h4>Título del pie del artículo</h4> </footer> </article> <aside> <h2>Título del texto explicativo</h2> <section> </section> </aside> <footer> Pie de página </footer> </body>
Referencias
“Dive into HTML5”, por Mark Pilgrim.
Smashing Magazine:
HTML5 semantics
Designing a HTML5 layout from scratch
MDN HTML Developer Guide:
Using HTML sections & outlines
HTML5Doctor:
Analizar datos estructurados desde la línea de comandos
Para texto plano basta con herramientas clásicas como awk, pero para datos dentro de páginas HTML o en Json hay alternativas más cómodas:
- jq: JSON
- scrape: HTML (XPath)
Además de los filtros clásicos más populares como sort y uniq, también disponemos de shuf, que devuelve una permutación aleatoria de las líneas que recibe como entrada.
Patrones
# extraer las URL de un JSON jq '.data.children[] |.data.url' < input.json
Extraer las celdas de una tabla
# -a permite seleccionar sólo uno de los atributos de los elementos encontrados # la expresion Xpath puede contener "|" para elegir varios elementos según diferentes criterios # para quedarse sólo con el texto debería bastar /text() , pero en scrape no funciona... scrape -a id -e '//td[@class="temperature"]' < fichero
# cada - une una nueva linea paste - - sed 'N'
Eliminar etiquetas HTML
sed 's_<[^>]*>__g'
Cambiar de separador
# de : a espacio tr ":" " "
Pasar de hora a época
# actualizar base a la época correspondiente al dia # en el ejemplo, se añaden 16 días extra # el fichero de entrada tiene tres columnas: hora, minuto, dato awk 'BEGIN{base=1465596000+(16*24*3600)}{print ($1*3600 + $2*60 + base) " " $3}'
Gráfica de dos series de tiempos
gnuplot plot "serie1.txt" using 1:2, "serie2.txt" using 1:2
Más info:
Maquetar con Scribus
Para variar el tamaño de una imagen, cambiar el tamaño del marco con la opción Imagen/”Escalar al tamaño del marco” seleccionada. Para “recortarla”, cambiar a Imagen/”Escalado libre” y cambiar el tamaño del marco.
Para cambios rápidos, se pueden usar los comandos “ajustar marco a imagen” y “ajustar imagen a marco”
Para rotar una imagen, XYZ/Rotar.
Para numerar las páginas, entrar en Editar/Páginas maestras, añadir un marco de texto y dentro de él insertar Caracter/Número de página
Para que el fondo blanco de la imagen sea “transparente”, en la pestaña “Transparencia”, seleccionar el modo “Multiplicar” (para que se preserve al exportar, requiere escoger compatibilidad “PDF/X4” o posterior)
Exportación
Para exportar a CMYK, activar la gestión de color en las preferencias del documento. En las opciones de “Exportar como PDF”, elegir compatibilidad “PDF/X3” (o posterior) y en la pestaña color, “salida dirigida a impresora”.
Para reducir el tamaño del PDF, elegir “compresión JPEG con pérdidas”, limitar la resolución (por ejemplo, a 300 ppp) y seleccionar una calidad de compresión media.
Para incluir el sangrado, Preprensa / Configuración sangría / Usar sangría del documento
Dracut
Dracut es una herramienta para construir initramfs en base a eventos. Está más presente en el universo RedHat y derivados que en el Debian (aunque la mayoría de las distribuciones lo ofrecen como paquete)
Cuando falla el arranque, se puede forzar la consola de dracut añadiendo a los parámetros del kernel “rd.shell”. Dependiendo del fallo, podemos detener la secuencia de dracut con el parámetro “rd.break” (secuencia: cmdline,pre-udev,pre-trigger,initqueue,pre-mount,mount,pre-pivot,cleanup)
Por ejemplo, “rd.shell rd.break=initqueue”
Una vez en la shell de dracut, podemos activar los software RAID con
mdadm –assemble –scan
Detectar volúmenes LVM
lvm_scan
Listar dispositivos
blkid
Información detallada del RAID
mdadm -Q –detail /dev/mdNUM_RAID
Referencia rápida de Bootstrap
firewall-cmd CentOS
firewall-cmd --state firewall-cmd --get-default-zone firewall-cmd --get-active-zones firewall-cmd --zone=Z --list-all firewall-cmd --permanent --zone=Z --add-source=127.0.0.1/8 firewall-cmd --zone=public --add-masquerade --permanent firewall-cmd --direct --passthrough ipv4 -t nat -I POSTROUTING -o IFACE -j MASQUERADE -s PRIVATE_NET firewall-cmd --list-services firewall-cmd --zone=public --add-service=https firewall-cmd --zone=public --add-service=https --permanent firewall-cmd --list-ports firewall-cmd --zone=public --add-port=N/tcp firewall-cmd --zone=public --add-port=N/tcp --permanent firewall-cmd --list-rich-rules
Interfaces X11 tradicionales en la nube
No todas las herramientas que uno quiere utilizar en la nube se han desarrollado en base a las APIs específicas, con lo cual puede ser necesario montar capas intermedias de adaptación para que al usuario final le resulte igual de cómodo.
Una de las opciones más interesantes es Guacamole, un paquete que encapsula de forma eficiente el acceso a un servicio X11. Una vez instalado, el usuario se autentica y puede disponer de un escritorio remoto como si fuese local. Eso sí, conviene delimitar sus posibilidades para que no lo utilice con fines ajenos a la aplicación.
La instalación de guacamole en Ubuntu es relativamente sencilla:
# instalar servidor VNC apt-get install tightvncserver # instalar dependencias del servidor Guacamole apt-get install libjpeg-turbo8-dev libcairo2-dev libossp-uuid-dev libpng12-dev libvncserver-dev tomcat6 # "compilar" el servidor cd guacamole-server-0.9.9/ ./configure --with-init-dir=/etc/init.d make -j 4 make install # añadir a /etc/bash.bashrc export LD_LIBRARY_PATH=/usr/local/lib export GUACAMOLE_HOME=/etc/guacamole # instalar dependencias del cliente Guacamole apt-get install maven2 # instalar cliente cd guacamole-client-0.9.9/ mvn package cp guacamole/target/guacamole-0.9.9.war /var/lib/tomcat6/webapps/ # configuración básica guacamole # guacamole.properties guacd-hostname: localhost guacd-port: 4822 ## Auth provider class (authenticates user/pass combination, needed if using the provided login screen) auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider basic-user-mapping: /etc/guacamole/user-mapping.xml # user-mapping.xml - cambiar USERNAME, PASSWORD y VNCPASS 😉 <user-mapping> <authorize username="USERNAME" password="PASSWORD"> <protocol>vnc</protocol> <param name="hostname">localhost</param> <param name="port">5900</param> <param name="password">VNCPASS</param> </authorize> </user-mapping> # configurar el conector de Tomcat en /etc/tomcat6/server.xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="UTF-8" address="127.0.0.1" redirectPort="8443" /> # arrancar demonio guacamole y reiniciar Tomcat /etc/init.d/guacd restart /etc/init.d/tomcat6 restart # instalar "escritorio ligero" apt-get install lxde # arrancar servidor VNC vncserver -localhost # configurar el proxy en apache ProxyPass /guacamole/ http://localhost:8080/guacamole-0.9.9/ flushpackets=on ProxyPassReverse /guacamole/ http://localhost:8080/guacamole-0.9.9/
En caso de problemas, puede obtenerse información adicional en los ficheros /var/log/tomcat6/catalina.out, /var/log/syslog, ~/.vnc/HOSTNAME.log
En “create a Guacamole appliance” vienen cómo configurar la autenticación contra una base de datos MySQL.
La guía de usuario de Guacamole está bastante completa.
Otras opciones son novnc (que parece menos maduro) y x2go (bastante potente, pero de momento require modificar el equipo cliente, aunque sólo sea para instalar el plugin para el navegador…) Dentro del software commercial: Remote visualization, de Adaptive Computing.
Distribución de programas en Linux. Construcción estática
La comodidad de instalar la mayoría de los programas “localmente” (con herramientas tipo apt, yum, zypper…) nos hace olvidar uno de los puntos débiles de Linux: la distribución de programas.
Cuando el código fuente está disponible y las dependencias son pocas, lo normal es que el programa se compile sin demasiados dolores de cabeza.
En otro caso, la cosa se complica. Lo habitual es compilar el programa para las distribuciones más comunes, y ofrecerlo para descarga en el formato de paquete correspondiente (.deb, .rpm…) O bien, montar un repositorio público que se pueda añadir a la lista de orígenes de paquetes.
En estos tiempos de tiendas de aplicaciones para todos, comienza a sonar raro lo de querer instalar un programa “a mano”, pero es algo que al menos en Linux sigue siendo necesario. Por ejemplo, cuando careces de privilegios en un servidor remoto. Si el servidor tiene un entorno más o menos propicio a la compilación, suele bastar con bajarse el código y crear los binarios.
En este sentido, hay que reconocerle a Windows el mérito de soportar binarios de versiones antiguas (incluyendo bastante de la época MS-DOS). Siempre que no se recurriese a enlace dinámico (que lleva al famoso “dll hell”)
Algunas referencias para los valientes que quieran penetrar el mundillo de los binarios Linux portables:
- Creating portable Linux binaries (Insane Coding): integrar libstdc++, enlazar selectivamente de forma dinámica y estática, convivir con versiones diferentes de glibc
- On building portable Linux binaries (Sagar’s blog): Adding $ORIGIN to the rpath is an alternative
- Harmful : dynamic linking (cat -v)
- libc.so.6: version GLIBC_2.16 not found (Ask Ubuntu): convivir con varias versiones de glibc
# Origen: http://insanecoding.blogspot.in/2012/07/creating-portable-linux-binaries.html ldd app objdump -T app | grep GLIBC_ # enlace estático curl, ssl, crypto; dinámico zlib, dl, threads, rt gcc -o app *.o -static-libgcc -Wl,-Bstatic -lcurl -lssl -lcrypto -Wl,-Bdynamic -lz -ldl -lpthread -lrt # Origen: http://askubuntu.com/questions/315907/libc-so-6-version-glibc-2-16-not-found /catbed/ld-linux.so.3 --library-path=/catbed:/whatever-else /usr/bin/python -python-args
# como especificar parametros enlace estático en cmake # origen: http://cmake.3232098.n2.nabble.com/Howto-compile-static-executable-td5580269.html set(CMAKE_EXE_LINKER_FLAGS -static) set(CMAKE_FIND_LIBRARY_SUFFIXES .a) set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS) # remove -Wl,-Bdynamic set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS) set(CMAKE_SHARED_LIBRARY_C_FLAGS) # remove -fPIC set(CMAKE_SHARED_LIBRARY_CXX_FLAGS) set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS) # remove -rdynamic set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
Awesome
Win+[1-9]: cambiar de “escritorio”
Mays+Win+[1-9]: mover ventana actual a escritorio
Win+espacio: cambiar organización de ventanas
Win+o: mover la ventana al otro monitor
Mays+Win+C: cerrar ventana
Mays+Win+Q: salir
Win+r: ejecutar
Comandos útiles Linux
# simple way to make propagate "execute" permissions (X sets execute if x is already set in some of the classes) chmod -R a+X start_dir # caducidad cuenta chage -l USER # disable bell / beep in terminal xset b off # túnel SSH # basic: VNC tunnel for display :4 ssh -L 5904:localhost:5904 usr23@remote-desktop.atwork.com # Scenario 1: final is behind NAT, firewall at work, gateway host # at final, create a "reverse tunnel" T1 from gateway to final. You will connect to port 22 of final (standard SSH) through port 8022 at gateway ssh -R 8022:final.atwork.com:22 usr2@gateway.atwork.com # at L, create a tunnel T2 from your laptop L port 8122 to port 8022 of gateway ssh -L 8122:gateway.atwork.com:8022 usr2@gateway.atwork.com # at L, connect to final through T2 ssh -p 8122 usr3@localhost # Scenario 2: "only" problem is that final is behind work firewall # at final ssh -R 8022:final.atwork.com:22 usr2@laptop.athome.com # at L ssh -p 8022 usr3@localhost # nc # enviar fichero a SERVIDOR (sin -q 0, nc aguarda por datos extra) cat file | nc SERVIDOR 8765 -q 0
AUDIO
# extract audio from video as 44.1KHz,320Kb/s MP3 file ffmpeg -i input.wmv -ar 44100 -b:a 320k output.mp3 # Reduce audio volume sox input.wav output.wav gain -n -24 # change sample frequency sox input.wav -r 44.1k output.wav # Convert audio (m4a to ogg) ffmpeg -i Gimme_Gimme.m4a -map 0:0 -c:a libvorbis Gimme_Gimme.m4a.ogg # flac to MP3 320 kbps ffmpeg -i input.flac -b:a 320k output.mp3 # Rip CD audio abcde -o vorbis # Grabar CD audio # 1: convertir a formato red book (stereo, 44.1KHz, 16 bits) for f in $(ls *.mp3); do ffmpeg -i "$f" -map 0:0 -ar 44100 "$f.wav" ; done # 2: renombrar segun orden deseado # 3: tostar (cdrtools) wodim -v -pad dev=/dev/sr0 -dao -swab *.wav
VIDEO
# convertir video a formato compatible con Windows Media Player (ideal para incrustar videos en Powerpoint) # @see https://trac.ffmpeg.org/wiki/Encode/WindowsMediaPlayer ffmpeg -r 30 -i foo.flv -codec:v mpeg4 -flags:v +qscale -global_quality:v 0 -codec:a libmp3lame foo.avi # superponer una imagen (con título, por ejemplo) a un video # overlay=X:Y:enable='between(t,I,F)' # - (X,Y) -> Posición imagen (0,0 es esquina superior izquierda) # - I,F -> inicio y fin de la superposición (en segundos desde inicio video) # https://video.stackexchange.com/a/12111 ffmpeg -i input.mp4 -i image.png -filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" -pix_fmt yuv420p -c:a copy output.mp4 # split video (ffmpeg) ffmpeg -i input.avi -ss hh:mm:ss -to hh:mm:ss -c copy output.avi # multiplex audio & video ffmpeg -i audio.m4a -strict -2 -i video.mp4 -strict -2 -c:a copy -c:v copy final.mp4 # resize video (ffmpeg) ffmpeg -i IN.MP4 -c:v libx264 -c:a copy -s 800x600 OUT.mp4 # convert mjpeg video (ffmpeg) # we may need to specify audio frequency because input video uses a strange frequency which is not automatically adapted ffmpeg -i MVI_6229.AVI -c:v h264 -c:a mp3 -ar 44100 MVI_6229.AVI.mp4 # rip dvd (simple title-oriented movie; you may try -t 0 to rip all titles) # -a -> select audio track, -E -> audio encoding (copy, vorbis, mp3, flac24...) HandBrakeCLI -i /dev/cdrom -t 1 -o ~/output.m4v -e x264 -E "copy:*" # a more specific approach: rip VOB by VOB (-strict -2 is required since AAC codec is considered experimental...) ffmpeg -i /mnt/cdrom/VIDEO_TS/VTS_12_1.VOB -strict -2 vob_12_1.m4v
Images and PDF
# Resize image (Imagemagick's convert) # use mogrify to resize "overwriting" the input image convert input.jpg -resize 25% image_scaled.jpg # Rotate image jpegtran -rotate 90 -outfile output.jpg input.jpg # It's good to sharpen to compensate from the scale softness # -unsharp RadiusxSigma+Amount+Threshold convert input.jpg -resize "600x" -unsharp 2x0.5+0.7+0 -quality 98 output.jpg # Raster # http://www.imagemagick.org/Usage/transform/ convert autotrace:heart.gif heart_traced.gif # Clean whiteboard convert img.gif -morphology Convolve DoG:15,100,0 -negate -normalize -blur 0x1 -channel RBG -level 60%,91%,0.1 $2 # Visual image directory display 'vid:*.jpg' # OCR image 09.jpg into 09.txt asuming portuguese language tesseract 09.jpg 09 -l por # Spell check (aspell) # Usar -a para pipes (en vez de ficheros) aspell -t -d pt_BR -c etimologia.tex # Capture screen scrot # Image to pdf convert *.png output.pdf # Unir varios PDF en uno - por defecto comprime, a costa de la calidad (queda granulado -> -dPDFSETTINGS=/screen por defecto) # Para mejor calidad, usar -dPDFSETTINGS=/prepress gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=proyecto.pdf -dBATCH proyecto-p*.pdf # Dividir un PDF en varios (uno por página) gs -q -o proyecto-p%02d.pdf -sDEVICE=pdfwrite proyecto.pdf # Extraer un subconjunto de paginas del PDF gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dSAFER -dFirstPage=2 -dLastPage=6 -sOutputFile=proyecto.pdf original.pdf # Reduce PDF size (gs): use maximum 150 dpi for images gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dEmbedAllFonts=true -dSubsetFonts=true -dAutoRotatePages=/None -dColorImageDownsampleType=/Bicubic -dColorImageResolution=150 -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=150 -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=150 -sOutputFile=t.pdf input.pdf # Convert PDF to JPG # 200 DPI, 80% quality (range 0-100, default 75) gs -q -o output_p%04d.jpg -sDEVICE=jpeg -dJPEGQ=80 -dPDFFitPage -r200 input.pdf # mupdf's mutool can extract "directly" images and fonts from PDF document: mutool extract -r INPUT.pdf # Thumbnail of first page gs -q -o output.jpg -sDEVICE=jpeg -dPDFFitPage -dLastPage=1 -g200x300 input.pdf # Convert JPGs to single PDF convert page1.jpg page1.pdf
Imprimir – Artículo relacionado: Comandos configuración CUPS
# Opciones más habituales de Cups: -n copies / -P page-list / -o sides=[one-sided|two-sided-long-edge|two-sided-short-edge] / -o landscape # -o number-up=2 -o page-set=even # -o fit-to-page (por defecto: preservar tamaño original) # <a href="https://www.cups.org/doc/options.html">Listado completo de opciones Cups</a> lp -d printer -o fit-to-page -o landscape -P 1,3,5,10-12 XX.pdf lp -d printer -o fit-to-page -o sides=two-sided-long-edge XX.pdf # Añadir impresora # PPDs from http://www.openprinting.org/printers lpadmin -p name -E -v lpd://printer.localdomain/`hostname` -P xerox8560.ppd || exit 1 lpadmin -d $DEFAULT lpoptions -p name -o Duplex=DuplexNoTumble -o PageSize=A4 # Lista colas lpstat -a # Imposicion (organizar paginas para folleto A5) # pstops -> psutils # Es importante especificar el tamaño de papel en ps2pdf, para que no se lie con la salida apaisada de pstops pdftops input.pdf - | pstops -pa4 '4:-3L@.7(21cm,0)+0L@.7(21cm,14.85cm),1L@.7(21cm,0)+-2L@.7(21cm,14.85cm)' | ps2pdf -sPAPERSIZE=a4 - output.pdf # Si las páginas de entrada ya están en A5, no hace falta escalarlas: pdftops input.pdf - | pstops -pa4 '4:-3L(21cm,0)+0L(21cm,14.85cm),1L(21cm,0)+-2L(21cm,14.85cm)' | ps2pdf -sPAPERSIZE=a4 - output.pdf # Unir dos páginas a5 en una página A4 pdftops INPUT - | psnup -pa4 -Pa5 -2 | ps2pdf -sPAPERSIZE=a4 - OUTPUT # Más ejemplos de pstops: https://twiki.cern.ch/twiki/bin/view/Main/AVFedotovHowToPstops
# Crontab Fields #minute hour day_of_month month day_of_week user command #/first 5 fields can be replaced by a special string, like/ @daily (run every midnigh), or @reboot (run once after reboot) #List: 1,3,5,7,9. Range: 1-9/2 (2 is the step, optional) # sudoers y sudoers.d/* tiene que tener permisos 440 # El orden importa, la ultima regla tiene precedencia sobre las anteriores # Syntax: user/group doing sudo, host=(target user) [NOPASSWD:] comma list of commands (absolute path) nagios ALL=(ALL) NOPASSWD: /usr/cmd1,/usr/cmd2 # text conversion: UTF16 -> ascii iconv -f utf16 fichero # Calculators bc qcalc # strace # Opciones interesantes: # -fp: conectarse a un proceso. Los descriptores de fichero se pueden consultar con lsof # -c: contar número llamadas. Util para ver donde gasta el tiempo un proceso # -T: cronometrar cada llamada al sistema
tcpdump
# Listar solicitudes DHCP tcpdump -s 1500 '((port 67 or port 68) and (udp[8:1] = 0x1))' # Mostrar paquetes ARP tcpdump -vvv arp # Mostrar solicitudes a DNS de Google tcpdump -n "dst host 8.8.8.8 and dst port 53"
Cómo comprimir en paralelo en Debian
Paralelismo en el compresor
De momento, la opción -T de xz no está activa, con lo cual hay que recurrir a las versiones paralelas de los clásicos: pigz o pbzip2.
Una vez instalado, basta con especificar el compresor en los parámetros de tar (normalmente, estos comandos paralelos detectan los cores disponibles, con lo cual no hace falta especificar nada):
tar cf test.tar.bz2 -I pbzip2 test
Paralelismo en los trabajos
Para comprimir muchos ficheros, una solución obvia es comprimir varios a la vez. Esto sólo requiere alguna herramienta que reparta los ficheros entre los compresores. Gnu parallel viene como anillo al dedo:
# 2 ejemplos del manual # comprimir todos los ficheros "*.html" parallel gzip ::: *.html # convertir todos los "*.wav" en mp3 con LAME parallel lame {} -o {.}.mp3 ::: *.wav # comprimir con xz todos los ficheros del listado "files", # usando un máximo de 4 cores: parallel -P 4 xz < files
WordPress en Docker
# PASOS PRELIMINARES (opcionales, según las circunstancias 😉 ) # Arrancar Docker docker -d -s="devicemapper" # Descargar imagen MySQL docker pull mysql:5.7 # Descargar imagen WordPress docker pull wordpress # ARRANCAR CONTENEDORES (necesario cada vez que no estén arrancados 😉 ) # Arrancar contenedor MySQL docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=clave -e MYSQL_DATABASE=wordpress -d mysql:5.7 # Arrancar contenedor WordPress # Los ficheros de WordPress se instalarán en la ruta que pasemos con -v # (en este ejemplo, /home/yo/Dropbox/Webs/wordpress/) docker run -e WORDPRESS_DB_PASSWORD=clave -d --name wordpress --link wordpressdb:mysql -p 127.0.0.2:8080:80 -v "/home/yo/Dropbox/Webs/wordpress/":/var/www/html wordpress
Con esto ya tenemos disponible un WordPress para desarrollo local en 127.0.0.2:8080