DEBIAN PRO

DEBIAN PRO
DEBIAN

lunes, 2 de julio de 2018

Linux CPU Speed


Tnego un equipo tope de gama, máxima velocidad, disco SSD grande, una gran resolución, display con mucho brillo, mucha RAM y todo maravilloso.....
Excepto, que cuando estoy trabajando con la batería, solo dura unas 3 hs. a veces menos...

Me puse a investigar y pude configurarlo correctamente con dos scripts, uno de MAX CPU y otro de SLOW CPU.

La idea es usar varios paquetes de gestión de CPU, cpufrequtils y especificarle que quiero.
En mi portátil estos valores funcionan correctamente, pero en otros dependiendo del Micro puede que las velocidades MIN y MAX deban ser otras.

MAX POWER
#!/bin/bash

echo "powersave" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu5/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu6/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu7/cpufreq/scaling_governor

echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu5/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu6/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu7/cpufreq/scaling_min_freq

echo 3600000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 3600000 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
echo 3600000 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
echo 3600000 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq
echo 3600000 > /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq
echo 3600000 > /sys/devices/system/cpu/cpu5/cpufreq/scaling_max_freq
echo 3600000 > /sys/devices/system/cpu/cpu6/cpufreq/scaling_max_freq
echo 3600000 > /sys/devices/system/cpu/cpu7/cpufreq/scaling_max_freq



LOW CPU SPEED
#!/bin/bash

echo "powersave" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu5/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu6/cpufreq/scaling_governor
echo "powersave" > /sys/devices/system/cpu/cpu7/cpufreq/scaling_governor

echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu5/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu6/cpufreq/scaling_min_freq
echo 800000 > /sys/devices/system/cpu/cpu7/cpufreq/scaling_min_freq

echo 1200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 1200000 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
echo 1200000 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
echo 1200000 > /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq
echo 1200000 > /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq
echo 1200000 > /sys/devices/system/cpu/cpu5/cpufreq/scaling_max_freq
echo 1200000 > /sys/devices/system/cpu/cpu6/cpufreq/scaling_max_freq
echo 1200000 > /sys/devices/system/cpu/cpu7/cpufreq/scaling_max_freq

sábado, 30 de junio de 2018

BIOF Thinkpad x230


Como actualizar la BIOS de un Portatil Thinkpad x230, pasan los años y me sigue pareciendo un equipo buenisimo.

Aren’t hardware manufacturers funny? They either require an old-fashioned operating system (Windows) or museum hardware (floppy drives) to update a BIOS. Apparently they never learn and are instead busy adding features like DRM and UEFI to make our lives even more miserable.

However updating the BIOS on my Lenovo X230 laptop was surprisingly easy once I learned how to do that (kudos to a G+ post I stumbled upon).

Go to support.lenovo.com (or better use a search engine becaues the Lenovo website is beautiful but technically pretty broken and slow) and search for the BIOS upgrade of your laptop model.
Download the most recent ISO file. Look for “BIOS bootable update CD”.
Convert the ISO image using the geteltorito utility (if you don’t have it: apt-get install genisoimage).
Example:
geteltorito -o bios.img g2uj18us.iso
Insert any USB stick into your laptop that you have lying around. The image file is just 50 MB in size so even USB sticks with low capacity will work. Keep in mind that the stick will be completely overwritten.
If you are in a graphical environment then unmount the USB stick again.
Find out the device name of the stick. Enter a terminal window and enter “dmesg | tail”. You are looking for something like:[ 2101.614860] sd 6:0:0:0: [sdb] Attached SCSI disk
The “sdb” tells you that your USB stick is available on /dev/sdb. Don’t just assume it’s sdb. If it’s on another device on your laptop then you will destroy your data.
Copy the image to the USB stick:
dd if=bios.img of=/dev/sdb bs=1M
Reboot your laptop.
After the Lenovo logo appears press ENTER.
Press F12 to make your laptop boot from something else than your harddisk.
Select the USB stick.
Make sure your laptop has its power supply plugged in. (It will refuse to update otherwise.)
Follow the instructions.

miércoles, 27 de junio de 2018

martes, 26 de junio de 2018

Notebook Jumper EZBook 3 PRO


Desde hace unas semanas que necesito un portátil liviano, que la batería dure varias horas (+5 hs), que pueda correr Debian GNU/Linux y poder llevarlo a todos lados.

Tngo varios equipos y el anteúltimo es un Dell Precision 15 - 5520, un equipo excelente, pero la batería dura 3 horas, i7, máxima velocidad, disco ssd 512gb.... un misil, pero pesado y la batería no dura lo necesario.

Esta semana compré un equipo portátil Jumper EZBook 3 PRO, un clone Chino con muy buenas recomendaciones en Internet, demasiado parecido a un Macbook Air, pero mientras corra Linux, que se parezca a otra cosa no me molesta mucho. La pagina oficial.


Es un Intel Apollo, Micro del que tenía bastantes dudas, una línea similar a un Celeron pero "nuevo". También había leido problemas al tratar de instalarle Linux. Es "Chino", al final hasta los IPhones son Chinos, pero hay calidades de todo tipo, un temor que tengo (durante un par de años) es la duración de la batería, no me gustaría que dentro de un año, la batería no dure nada... Es quizás el mayor de los miedos.

Las prestaciones completas están en internet, en este post, dejaré mis experiencias instalando y usando. Algunas fotos, a las apuradas, por la necesidad de probar el equipo (que es mayor que sacar fotos buenas).


Sobre el teclado tuve que hacer varios cambios, porque la tecla de la derecha no es ALT-GR, es solo ALT.

sudo dpkg-reconfigure keyboard-configuration
seleccionar el teclado Inglés WITH DEAD KEYS
y marcar que RIGHT-ALT sera ALT-GR


EL PRECIO FINAL ES DE 250 €uros. A mi me parece razonable si todo funciona perfectamente durante al menos 2 años.

13.3in full-HD (1920x1080) 16:9 IPS display
Windows 10 Home 64-bit
1.1-2.2GHz Intel Apollo Lake N3450 quad-core
Intel HD500 Graphics
6GB DDR3 RAM
64GB eMMC storage plus SD support up to 128GB (M.2 SSD expansion possible)
dual-band 802.11b/g/n/ac Wi-Fi
Bluetooth 4.0
2x USB 3.0
1x HDMI
3.5mm headphone jack
2Mp webcam
DC charging jack
9600mAh lithium-polymer battery
315x209x15mm
1.4kg



Venía con Windows 10... personalmente no duró ni 10 minutos.


MI EXPERIENCIA

Empaquetado correctamente, los mismos plásticos protectores que todos los portátiles, además arriba y debajo unos plásticos transparentes para que no se manche el aluminio. Un detalle muy bonito es el acabado aluminio, bordes redondeados, quizás demasiado parecido a un MacBook Air.

Cargador sencillo, parece armado en España aunque dice China, no es malo, pero la imágen es "china". Quizas el conector de Metal hubiera dado una imágen un poco mejor.



La bios es de tipo EFI, eso trae algunas complicaciones, para instalar Debian GNU/Linux, todavía no pude y tuve que instalar Xubuntu 18.04 LTS, ademas hay un proceso primario para convertir el ISO a una imágen distinta, con la herramienta llamada RESPIN, es un script que corre en Linux y que lee todo el ISO y lo reempaqueta con Squashfs, además de que al indicarle que será usado en un equipo con APOLLO, configura mas opciones.

Escribí al desarrollador del Respin, pero por ahora no hay soporte para Debian, no estoy seguro porque, pero imagino que lo tendrá en unos meses.... o eso espero.

Luego pasar la imágen respineada a un Pendrive, en mi caso la nueva imágen de Xubuntu 18.04 se incrementó en 300 megas. Se pasa el Pendrive con DD como siempre.

Al bootear el equipo hay que apretar ESC o DEL para entrar a la EFI, indicar el órden de booteo para acceder al PENDRIVE.

Al arrancar desde el Pendrive con Xubuntu, todo perfecto.... TODO.... wifi, usbs, Bluetooth, sensores batería, disco emmc, memoria.... todo funcion perfectamente, aunque APOLLO es algo "distinto" a los demas, al preparar la imágen para "Apollo" parece que al mismo tiempo estamos evitando problemas de drivers. Para bien o mal, todo funcionó 10 puntos. Xubuntu Instalado, configuraciones básicas que hago en todos los portátiles y a probar todo.https://www.techadvisor.co.uk/review/budget-laptops/jumper-ezbook-3-pro-review-3662743/


Para probar la velocidad del Display, se puede hacer con este programa, aunque hay otros.

sudo apt-get install mesa-utils
glxgears

Luego lo comparé con un Celeron y con un Dell MaxPower. No veo grandes diferencias, no se si es que en Linux los drivers de la placa son "GPL" y por eso no funciona tan rápido como esperaba.
La resolución es de 1920 x 1080, excelente luminocidad, quedé sorprendido, la tengo que probar al sol. El refresco de pantalla es de 60 Hz. La pantalla dice que es de 13", aunque oficialmente Jumpter dice que es 13.3"... me da exactamente igual.


La comparativa con los discos no es buenisima, nos da unos 118 MB/s, comparados con los 342 MB/s de un disco SSD. La finalidad del Jumper será escribir, uso de Documentos varios, acceso a equipos remotos, vpns, nada que requiera una velocidad de disco importante. Probaré Virtualbox en las próximas semanas.


La Ram es de 6 gb, que está bastante bien, pensando que hay equipos de HP con 2 y 4 gb, Para un Xubuntu es "DEMASIADO".... En casa tengo un servidor con todo corriendo y solo necesito 4 gb, 6 gb está muy bien.


El disco interno es de tipo eMMC y 64gb, esta sólido pero no es rapidísimo, se podría ampliar a 128 gb, pero por ahora no lo cambiaré. Nuevamente para Xubuntu, con todo instalado solo usé 9 gb. Veo que la instalación de Xubuntu respineada usa un fichero "swpafile" en "/" como swap. El disco de 64gb está usado casi en su totalidad por una partición ext4 con todo dentro (incluida la swap). Y además otra partición pequeña de 512mb con el BOOT, EFI fat32 booteable. Seguramente parte del truco del respin es eso. Construir una partición pequeña para el boot.

He probado armar varios pendrive booteables con Diferentes distros Debian y no logro que bootee, Seguiré intentando, quiero un "Debian GNU/Linux" auténtico.

Utilizo Owncloud/NextCloud con mis propios servidores, y luego de tener el portátil corriendo una actualización de Archivos de 5 gb, durante 3 horas, Pantalla con brillo al 90%, usando WIFI (72 mb/s, wpa2) la batería tiene ahora 40% de carga, la estimación es que con un uso constante WIFI + Display + Grabación en el disco eMMC, la batería durará unas 5 horas. A mi me parece bastante. Porque es una situación de uso completo, normalmente el uso sería Pantalla con brillo al 50%, disco muy poco y red muy poco. Haré mas pruebas cuando vuelva a cargar la batería al 100%.


Tengo mi lista de paquetes instalados en Xubuntu, si alguien la necesita se la paso por email.

lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 058f:5608 Alcor Micro Corp.
Bus 001 Device 003: ID 8087:0a2a Intel Corp.
Bus 001 Device 002: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 006: ID 413c:301a Dell Computer Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 058f:5608 Alcor Micro Corp.
Bus 001 Device 003: ID 8087:0a2a Intel Corp.
Bus 001 Device 002: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 001 Device 006: ID 413c:301a Dell Computer Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@jumper:/# dpkg -l > /home/dac/Desktop/paquetes.txt
root@jumper:/# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 92
Model name: Intel(R) Celeron(R) CPU N3450 @ 1.10GHz
Stepping: 9
CPU MHz: 1247.148
CPU max MHz: 2200,0000
CPU min MHz: 800,0000
BogoMIPS: 2188.80
Virtualization: VT-x
L1d cache: 24K
L1i cache: 32K
L2 cache: 1024K
NUMA node0 CPU(s): 0-3
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault cat_l2 pti tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust smep erms mpx rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts



Despues de 4.5 horas de uso intensivo, la bateria esta al 5%. Imagino que con un uso moderado alcanzara las 6 hs.



lspci
00:00.0 Host bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Host Bridge (rev 0b)
00:00.1 Signal processing controller: Intel Corporation Device 5a8c (rev 0b)
00:02.0 VGA compatible controller: Intel Corporation Device 5a85 (rev 0b)
00:0e.0 Audio device: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster (rev 0b)
00:0f.0 Communication controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Trusted Execution Engine (rev 0b)
00:12.0 SATA controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SATA AHCI Controller (rev 0b)
00:14.0 PCI bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port B #2 (rev fb)
00:15.0 USB controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series USB xHCI (rev 0b)
00:16.0 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #1 (rev 0b)
00:16.1 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #2 (rev 0b)
00:16.2 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #3 (rev 0b)
00:16.3 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #4 (rev 0b)
00:17.0 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #5 (rev 0b)
00:17.1 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #6 (rev 0b)
00:17.2 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #7 (rev 0b)
00:17.3 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series I2C Controller #8 (rev 0b)
00:18.0 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series HSUART Controller #1 (rev 0b)
00:18.1 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series HSUART Controller #2 (rev 0b)
00:18.2 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series HSUART Controller #3 (rev 0b)
00:18.3 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series HSUART Controller #4 (rev 0b)
00:19.0 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SPI Controller #1 (rev 0b)
00:19.1 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SPI Controller #2 (rev 0b)
00:19.2 Signal processing controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SPI Controller #3 (rev 0b)
00:1b.0 SD Host controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SDXC/MMC Host Controller (rev 0b)
00:1c.0 SD Host controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series eMMC Controller (rev 0b)
00:1e.0 SD Host controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SDIO Controller (rev 0b)
00:1f.0 ISA bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Low Pin Count Interface (rev 0b)
00:1f.1 SMBus: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SMBus Controller (rev 0b)
01:00.0 Network controller: Intel Corporation Wireless 3165 (rev 81)



Con Todos mis programas mas usados instalados.
df -h
Filesystem Size Used Avail Use% Mounted on
udev 2,9G 0 2,9G 0% /dev
tmpfs 582M 1,5M 580M 1% /run
/dev/mmcblk1p2 57G 13G 42G 23% /
tmpfs 2,9G 68M 2,8G 3% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 2,9G 0 2,9G 0% /sys/fs/cgroup
/dev/loop0 87M 87M 0 100% /snap/core/4830
/dev/loop1 142M 142M 0 100% /snap/skype/38
/dev/mmcblk1p1 511M 62M 450M 12% /boot/efi
tmpfs 582M 32K 581M 1% /run/user/1000


Carpetas y Swapfile
ls -ail
total 2097268
2 drwxr-xr-x 25 root root 4096 jun 26 09:33 .
2 drwxr-xr-x 25 root root 4096 jun 26 09:33 ..
1310721 drwxr-xr-x 2 root root 4096 jun 25 19:32 bin
786433 drwxr-xr-x 4 root root 4096 jun 25 19:35 boot
3276801 drwxr-xr-x 2 root root 4096 jun 25 19:19 cdrom
2 drwxr-xr-x 20 root root 4320 jun 26 22:23 dev
655361 drwxr-xr-x 129 root root 12288 jun 25 21:38 etc
1703937 drwxr-xr-x 3 root root 4096 jun 25 19:20 home
15 lrwxrwxrwx 1 root root 33 jun 25 19:23 initrd.img -> boot/initrd.img-4.15.0-20-generic
14 lrwxrwxrwx 1 root root 33 jun 25 19:16 initrd.img.old -> boot/initrd.img-4.15.0-20-generic
1048577 drwxr-xr-x 20 root root 4096 jun 25 19:24 lib
1966081 drwxr-xr-x 2 root root 4096 abr 26 20:18 lib64
11 drwx------ 2 root root 16384 jun 25 19:15 lost+found
262145 drwxr-xr-x 3 root root 4096 jun 25 20:29 media
2097153 drwxr-xr-x 2 root root 4096 abr 26 20:17 mnt
3407874 drwxr-xr-x 2 root root 4096 jun 25 21:18 Nextcloud
2621441 drwxr-xr-x 2 root root 4096 abr 26 20:17 opt
1 dr-xr-xr-x 215 root root 0 jun 26 08:43 proc
2752513 drwx------ 6 root root 4096 jun 25 21:23 root
2 drwxr-xr-x 27 root root 820 jun 26 22:23 run
524289 drwxr-xr-x 2 root root 12288 jun 25 19:32 sbin
1572865 drwxr-xr-x 5 root root 4096 jun 25 21:25 snap
3538945 drwxr-xr-x 2 root root 4096 abr 26 20:17 srv
12 -rw------- 1 root root 2147483648 jun 25 19:15 swapfile
1 dr-xr-xr-x 13 root root 0 jun 26 09:33 sys
1441793 drwxrwxrwt 16 root root 4096 jun 26 22:28 tmp
917505 drwxr-xr-x 10 root root 4096 abr 26 20:17 usr
393217 drwxr-xr-x 14 root root 4096 abr 26 20:28 var
13 lrwxrwxrwx 1 root root 30 jun 25 19:23 vmlinuz -> boot/vmlinuz-4.15.0-20-generic

FOTOS


BIOS - Acceder mediante ESC o DEL.


Velocidad de la placa de Video - Jumper.



Velocidad de otro portátil con Celeron - Asus.



La velocidad de un disco SSD de 512gb,

dd if=/dev/zero of=/testfile bs=1G count=1 oflag=direct
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.14097 s, 342 MB/s

En el caso del jumper, con un disco eMMC.



Una imágen con foto a 2 mb del jumper, La calidad que provee la cámara que trae, un parecido grade con Air.


Logo grabado en el Aluminio.

Micro HDMI - Cargador y USB 3.0.


Micro SD, conector audio-mic y USB 3.0


Imágen Superior, el PAD funciona perfectamente con Xubuntu, hace lo que tiene que hacer y es Multi-touch.
El teclado es "COMPLETO", comparé otros equipos tipo Chromebook y les faltan las teclas de Función superiores, este está muy bien, el ENTER debería ser un poco mas grande, el POWER debería estar un poco mas alejado del teclado. Peor hasta ahora no lo he apagado por error...

Dije que el teclado es en Ingles? perdonen la falta de acentos.



Capturas locales y Mas Pantallas.



Con un Firefox abierto y dos paginas, el consumo de CPU parece excesivo.


Screen con Im'agen de muy buena calidad.



Mas info sobre el video

lshw -C video
*-display
description: VGA compatible controller
product: Intel Corporation
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 0b
width: 64 bits
clock: 33MHz
capabilities: pciexpress msi pm vga_controller bus_master cap_list rom
configuration: driver=i915 latency=0
resources: irq:124 memory:81000000-81ffffff memory:90000000-9fffffff ioport:f000(size=64) memory:c0000-dffff

inxi -G
Graphics: Card: Intel Device 5a85
Display Server: x11 (X.Org 1.19.6 ) drivers: modesetting (unloaded: fbdev,vesa)
Resolution: 1920x1080@59.93hz
OpenGL: renderer: Mesa DRI Intel HD Graphics 500 (Broxton 2x6) version: 4.5 Mesa 18.0.0-rc5

domingo, 24 de junio de 2018

martes, 19 de junio de 2018

sábado, 16 de junio de 2018

DNS Security


Un proyecto para asegurar nuestras comunicaciones con los servidores DNS es DNSCRYPT. Lleva tiempo dando vueltas, no es perfecto, pero vale la pena probarlo.

https://linuxhint.com/dnscrypt-ubuntu/

Protección y Seguridad


Un método muy confiable y fácil de asegurar nuestros equipos es instalando un fichero HOSTS que impida la resolucióin de nombres (servicios DNS) a sitios SPAM, PHISHING, porno y otros males.

En este link y su proyecto github podrán encontrar un fichero HOSTS para reemplazar el nuestro.


https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn-social/hosts

Linux error booteo ACPI Error


A veces aparece un error en el booteo de Linux, algo que creo que esta relacionado con los nuevos Kernels.
En este sitio encontré una solución para quitar el mensaje del BOOT. ( ACPI Error )

http://www.quijotelibre.com/2017/10/12/acpi-error-una-tonteria-de-gnulinux-que-me-ha-vuelto-loco/

Internet


Detalle de "Internet".

https://amp-businessinsider-com.cdn.ampproject.org/c/s/amp.businessinsider.com/how-internet-works-infrastructure-photos-2018-5

martes, 13 de marzo de 2018

Un profesional de RR.HH. y sus opiniones.


Javier Travieso

Profesional de RRHH, con amplia experiencia en este campo.
“La empatía realmente es la única forma de ponerte en la piel de la persona que tienes delante”.


¿Cuál ha sido el sector en el que has desarrollado tu actividad laboral durante los últimos años?

El mundo del retail, he pasado por varios operadores del sector: Grupo Eroski Caprabo, Ahold Hipersol, Auchán Sabeco, Mobil Oil.

¿Qué te ha aportado esta experiencia?
He desempeñado funciones en diversos departamentos. En Explotación, como responsable del punto de venta, en esta etapa aprendí los entresijos del negocio del retail y la gestión de la Cuenta de Explotación. Más tarde me ofrecieron la posibilidad de seguir en el negocio desde la óptica de los RRHH, en donde he mantenido la posición de Jefe de Personal, durante siete años, gestionando una plantilla de 400 personas.

¿Qué destacarías de tu paso por el dpto. de RrHh?
Lo más destacable es la posibilidad de conectar con todo tipo de personas, cada una con sus inquietudes y problemas, y ser capaz de hacerles entender que sin él la organización no funcionaría igual.

¿Cuál es la forma de conectar a las personas con el proyecto?
Me parece muy importante involucrar a las personas mediante la participación y la innovación. Bajo mi punto de vista, dar voz a las ideas de los miembros del equipo, hace que personas conocedoras del negocio, aporten todo su conocimiento, con entusiasmo en sus ideas, haciendo que se sientan un pilar reconocido de la organización. Creo firmemente en la participación del equipo como elemento integrador que aporta valor al grupo.

¿Tu útima etapa laboral como la has vivido?
La crisis se ha encargado de dejar a mucha gente valida fuera del mercado laboral, este es mi caso, y actualmente me encuentro en #Búsquedactiva de nuevos PROYECTOS. Aunque desde que dejé mi actividad laboral no he parado, siempre mirando hacia el futuro con optimismo.

¿Qué proyectos te mantienen en activo?
En primer lugar la búsqueda de empleo, actividad de por sí dura, y que requiere de una gran constancia. Por otro lado he realizado formación, es muy importante estar al día. Además he creado varios grupos en la red, con el fin de poner en contacto a personas en #Búsquedactiva de nuevos PROYECTOS, el objetivo, es el de intercambiar opiniones e ideas, que aporten valor al grupo. Paralelamente he participado en la creación de una Plataforma vecinal, con la intención de que se construya un Instituto en la ciudad donde vivo. Esto me ha dado la oportunidad de conocer a los representantes políticos de varias administraciones (Ayuntamiento y CAM), y me ha tocado mediar entre ambas para llegar a acuerdos. He tratado con los medios de comunicación para informar de la situación, y finalmente como portavoz, me ha tocado realizar con mucha frecuencia entrevistas en la radio, y redactar los comunicados para la prensa.
Desde mi punto de vista, es muy importante mantenerte activo para no caer en el desánimo. La vida continua y hay que seguir luchando.


https://about.me/javiertravieso


Link a su perfil.

https://lnkd.in/e4Msbur


lunes, 5 de marzo de 2018

R estadísticas y gráficos.


Hablando con un amigo, sobre como mostrar que ocurre con determinados comportamientos en cotizaciones de acciones, volví a utilizar "R" que me sigue pareciendo un excelente lenguaje para complementar las bases de datos relacionados y las nosql.
Para los que no sepan que es "R", mirar en Internet y probar Rstudio.

Volviendo al tema, teniendo un lote de datos donde en una secuencia y con un par (o mas) de datos relacionados, podemos ver cual es la tendencia de una manera simple.

Como ejemplo, pensemos que tenemos un conejito, que lo colocamos en el suelo, y vemos los primeros cinco saltos que da.
Tomamos las medidas a las paredes y nos dan estos datos.
(en la vida real, los problemas son mas fáciles porque no hay que recojer cositas negras del suelo)

COLECTAMOS LOS DATOS
Distancia a una pared en cms.
57 68 44 63 47 44 50 34 63 57 60 57 73 54 45 42 47 57 68 55 63 63 50 60 37 34 65 47 44 52 42

Distancia a la otra pared en cms.
52 59 33 44 52 52 59 46 57 55 46 65 60 63 57 49 52 57 65 39 49 63 40 52 44 37 65 57 38 44 31


LO CARGAMOS EN R
Los cargamos en dos columnas llamadas P1 y P2 (Pared 1 y 2), donde guardamos la distancia en Cms

conejito < - (p1,p2, p1,p2, ..... , p1,p2 ) ( 57,52, 68,59 , 44,33 ..... , 57,55 )

p1 p2
1 57 52
2 68 59
3 44 33
4 63 44
5 47 52
6 44 52
7 50 59
8 34 46
9 63 57
10 57 55



ENTENDEMOS LOS DATOS
Lo primero que podemos probar con R es ver la superficie y como fué saltando.
Le pediremos que genere un gráfico con dos variables (X e y)
plot(conejito$p1, conejito$p2)



Luego quiero saber en que zona estuvo saltando mas veces, en base a la distancia hacia una de las paredes. Se puede hacer lo mismo para la otra también.
hist(conejito$p1)



Mirando eso nos da una idea de que partes del suelo pisó.

Pero ¿ Cómo podemos saber de donde y hacia donde se estaba moviendo ?

reg1 <- lm( p1 ~ p2, data=conejito ) abline(reg1)





Aunque el conejito parecía que saltaba como loco por todo el salón, el tenía claro hacia donde ir... arriba a la derecha del gráfico estaba su casita.

Este puede parecer un ejemplo simple, pero se puede utilizar para estudios muchos mas grandes y profundos, podríamos haber agregado la altura de cada salto, también un sensor para saber donde miraba cuando estaba por saltar, un dinamómetro para ver que otros movimientos pequeños también hacía antes de saltar.....


domingo, 4 de marzo de 2018

Bitcoin - BOTs y trading. (luego de 4 años)


Luego de mas de 4 años en el mundo de las criptodivisas (Bitcoin y otras) y viendo lo que está pasando en el mercado, junto con amigos escribimos lo que hemos vivido y nuestras experiencias.

No quiero olvidarme de nadie, Diego, Pablo, Mitchell, Hernán, David, Félix, Antonito, Manuel y otros (que iré agregando).

Este post no pretende dar clases de como se deben hacer las cosas, solamente mostrará lo que hemos vivido lo que hemos hecho y lo que estamos haciendo. Si le sirve a alguien para aprender algo ya nos damos por “conformes”.


Algo de historia Parte I.

Comenzamos por el 2013 gracias a Diego que nos metió en el mundo del “minado”, nos explicó casi todo lo necesario para instalar un equipo, montamos un servidor “minero” con una muy buena placa GPU y a producir.

Conocimos muchas personas, pools de minado, entendimos el ecosistema “Bitcoin” y todo lo que aparecía, todavía nos reimos con los millones de Dogecoin que conseguíamos…. Los Doges todavía siguen operativas y funcionando.

Vivimos también lo que fué un MTGOX y un Auroracoin, también vimos apuestas muy fuertas que fracasaron o que no lograron el crecimiento esperado y algunas con éxitos (quizás parciales) como Ethereum. Todavía recuerdo las PesetaCoins.

El resúmen es que “vimos de todo”.

Gracias a Mitchell, luegio nos metimos en el mundo del trading, finanzas, estadísticas, acciones… aprendimos muchísimo del mundo financiero y ese era el “otro” componente fundamental, entender como hacer buenos negocios, como operar en bolsa, en mercados muy volátiles, miles de palabras y conceptos técnicos.

En mi caso tuve que re-aprender estadísticas y pude certificarme oficialmente como “Master Data Science en John Hopkins”, algo que me costó unos cuantos meses para aprender R y aplicar conceptos de estadísticas fácilmente.

También obtuve una certificación en MongoDB para poder gestionar grandes volúmenes de datos rápidamente de una manera no-estructurada. Otra pata fundamental.

Algo de historia Parte II.

En algún momento del 2014 se me ocurrió crear un “BOT” para que haga las tareas de compra y venta mas sencillo, el proceso normal es, entrar a una página web, varios clicks, completar unos datos, apretar unos botones… y con suerte 1 minuto después ponías una órden de compra/venta en una plataforma como Kraken.

Estuve estudianto cientos de bots gratuitos y con costo en internet, hay varios portales donde puedes crear un bot o usar el de otra persona, aprendí muchísimo de que “debe” hacer un BOT y de que “métodos de trabajo existen”, desde valores estadísticos, tendencias, volatilidad, bandas… hay muchos métodos para “estimar” que puede pasar en el mercado (¿ subirá o bajará el precio de un bien ?).

Todos los BOTs tienen un porcentaje de aciertos, es decir, aciertan en un XX% de las veces, cuanto mas se alejen del 50/50% mejor… pero la realidad es que eso no ocurre, al final las tendencias “regresan a la media”. Hay momentos en que puedes ganar o perder varias veces y te parece que es un “muy buen BOT”, pero luego pasa el tiempo, cambian las variables y comienza a ser un “mal BOT”…

En algunos casos, el BOT corre en un servidor en internet, donde debes confiar en la seguridad de un tercero. También les debes dar tus credenciales para que compren/vendan en tu nombre.

Para que todos entiendan que significa eso, imagina que quieres comprar un portátil, le explicas a un “BOT” que características quieres y le das tu tarjeta de crédito para que él te compre. ¿ Lo harías ?

Usar un BOT en internet es algo similar, le das tu dinero para que un “programa” compre o venda “productos” usando tu dinero, esperando que al final de un mes tengas un saldo en Euros mayor al que empezaste.

Luego de pensarlo mucho, “mi BOT” debía ser simple, fácil de entender, debía tratar de ganar todas (o casi todas las veces), debía correr en mi propio PC, debía funcionar sobre tecnología GPL donde mi confianza era mayor en lo que había debajo.

Gracias a Antonito, creamos la versión 1.0, programada en Nodejs. Nos permitió entender bien las API de Kraken, operar, mejorarlo, ganar algo de dinero.

Las principales ventajas eran, comprar o vender era algo de 2 segundos y un botón. Corría en cualquier Linux, fácil de modificar, como lo hicimos nosotros sabíamos que dentro no tenía spyware, troyanos, nos generaba un log con las operaciones. Logramos que sea un “producto” del que me sentía muy orgulloso.

Por diferentes razones en el 2015 abandonamos el trading de BTC y comencé con “IBEX 35”.

Algo de historia Parte III.

Por el 2016 y viendo que el BTC volvía a tener un valor interesante, muchas noticias, muchas personas preguntando por el BOT, retomamos el proyecto y creamos la nueva versión “V3” ahora hecho en c# multiplataforma, mas rápido, mas inteligente, con mas opciones.

Todavía nos reimos cuando por el 2017 alguien comentó “No me interesa el Bitcoin, prefiero algo menos volátil como un Banco Español del Ibex 35”… (hablaba del Banco Popular). Siempre que lo recordamos nos reímos, porque ahí aprendimos algo nuevo.

Un Gran Banco Español que cotizaba en el Ibex 35 con cientos de sucursales, un patrimonio millonario, rentabilidades positivas durante años, hipotecas, tarjetas, cientos de miles de clientes, auditado por el Banco Central de España también podía valer 1 euro.

Si sabía lo compraba yo mismo, hubiero ofrecido unos miles de Euros, pero nuevamente el mundo real superaba la ficción.

Tuvimos la suerte de operar durante mas de 10 meses en el IBEX 35 y obtener una rentabilidad neta del 24.6%, todo sin BOT porque los tiempos son mas lentos y usando sitios de internet de bajo costo. Esos meses me enseñaron mucho, asistí a varios cursos que tambien me abrieron la mente a otras ideas.

Volviendo al BOT y al trading de Bitcoin, pudimos ponerlo en marcha y actualizarlo, vamos por la versión v3.1.1, nos pone contento que decenas de personas aún lo usen y les parezca útil.

Estamos en una nueva etapa, donde lo mejoraremos aún mas, distintas monedas, mas inteligencia y manteniendo nuestra filosofía de que “siempre gana” cuando opera.

El BOT evalúa el mercado cada 10 segundos y cuando ve una oportunidad compra/vende, si no está seguro no opera. En el mundo de las finanzas decimos “dejamos de ganar” pero “nunca perdemos”.

La psicología del trading es otro componente fundamental para operar en los mercados (sea BTC o Acciones).

El AHORA.

Estamos dando cursos sobre el BOT, como operar en Bolsa o en BTC/otras, como utilizar gráficos de una manera eficaz, como entender las tendencias e imaginar el futuro.

Espero que mi experiencias te hayan aportado algo y que logres aprender algo nuevo cada dia, investiga, pregunta, prueba…

Si siempre haces lo que siempre has hecho, obtendrás lo que siempre has obtenido.

viernes, 9 de febrero de 2018

Anonimando.


Encontré un producto de Hard+Soft+servicios que puede ser interesante para personas que quieran mantener su privacidad, su seguridad ante ataques, mantener el trabajo colaborativo de manera privada y segura. Usan únicamente software GPL y están basados en Debian...

https://websitebuilder102.website.com/soygosub/

lunes, 5 de febrero de 2018

Hackers old movie


Un efecto para agregar a nuestro "shell"

$ git clone https://github.com/bartobri/no-more-secrets.git
$ cd ./no-more-secrets
$ make nms
$ make sneakers ## Optional
$ sudo make install

luego lo probamos con

# ls -ail | nms
(y ENTER)

lunes, 18 de diciembre de 2017

SQL Server performance y cache.



Optimización de SQL Server mediante cache en SQL.

Hace unas semanas tuve que implementar un proceso de optimización para SQL Server.

El problema inicial es una aplicación que solicita datos a un motor SQL Server, produce un query que demora unos 12 segundos para obtener los datos a enviar al cliente, ese query se ejecuta durante todo el dia, todas las veces que lo pida un cliente, pero desde "negocios" acordaron actualizar el proceso cada 8 horas. Existe un estimado de 5000 usuarios activos pidiendo sus datos. La medida del resultado del query es de unos 300 kb.

También existe otro proceso similar donde se definió una actualización cada hora.
Hay miles de usuarios pidiendo decenas de veces los mismos datos cada NN segundos.

Aunque 5000 usuarios no es un número muy grande, miles de sus peticiones durante todo el dia tiran al servidor SQL, el consumo de CPU es muy alto, aumenta la demora para resolver cada petición (de 12 a 40 segundos) hasta que entra en un espiral del que no puede salir, la cantidad de peticiones comienza a ser mayor que la cantidad que puede resolver.

Como muchas veces pasa, el aplicativo tiene muchos años, el volúmen de datos aumentó mucho, diferentes razones hacen que los 5000 clientes hagan varias peticiones (de 2x a 5x en algunos casos), dependiendo de cuantos equipos usan durante el dia, usan mas de un equipo (PCs, teléfonos, tables...) al final todo implica miles de peticiones cada minuto.

Luego de varias pruebas encontramos que existe un máximo de 10 peticiones que se pueden realizar al mismo tiempo y que el motor SQL puede resolver, si se aumenta ese valor comienzan a aumentar los tiempos de respuesta de cada una, si continúan o aumentan las peticiones ya no hay solución.

Es un aplicativo crítico, visible desde internet, muy usado todo el dia y con datos que deben ser actualizados cada hora ó cada ocho horas.

Luego de darle unas cuantas vueltas y evaluar varias alternativas, lo mas rápido y simple era implementar un cache del lado del motor SQL. Si, conocemos Redis y otras soluciones de cache, pero las otras soluciones requerían muchos mas cambios en distintos componentes, el "cache de SQL" es un punto único a cambiar. (un SP.)

La solución requería unas cuantas horas de programación de parte de un DBA experto, pruebas y salir al "live" rápidamente.


SOLUCION IMPLEMENTADA

Crear una tabla caché para cada proceso (2 tablas independientes), que contiene unos 25 campos (que son los que se envían desde el motor SQL al Aplicativo), ademas de tres campos adicionales, una fecha/hora (timestamp), un campo "id_usuario" y un campo ID_PK (PK, incremental).

En los 25 campos se guardaría los registros procesados (entre 100 y 500) que son los datos pedidos por los usuarios, en el campo fecha guardamos un timestamp del momento del cálculo, el campo ID_USUARIO contendría el ID del usuario que hizo la petición y el IDPK incremental sirve para que queden almacenados en el mismo órden en que fueron generados.

Los datos deben ser únicos, agrupados y ordenados, estas condiciones son las que demoran el query original.

Luego creamos un índice para que la lectura de esos registros para cada usuario sera la mas rápida posible.

El campo ID_USUARIO tiene datos redundantes pero me permitirá simplificar los procesos y tiempos. Se podría usar otra tabla normalizada, pero por razones de optimización lo descartamos.

Desde el APP se invocaba a un SP (Stored Procedure) pasando un identificador de usuario. El SP devolvía el join/where/group/order de unas 30 tablas en formato de 25 campos por 100 a 500 registros. (los dos SPs eran similares aunque el contenido era distinto)

Las tablas caché miden actualmente unos 2gb cada una, pero resuelven el problema de las NN peticiones repetidas, limitando el reproceso a una/ocho horas.

El nuevo SP incluye estas partes:
* El campo pasado como parámetro se usa para buscar en la tabla "cache" si tenemos datos para ese usuario, obtiene el primer registro y obtiene la fecha de la última grabación.
* Si no había datos, tendremos que generarlos.
* Si había datos pero había pasado el tiempo de "Caché válido", tendremos que generarlo.
* En caso contrario enviamos los registros que tenemos en nuestra tabla caché.
(ese proceso envía los datos en 1 segundo, pasando de 12-30 segs a solo 1)

* El SP entonces calcula los datos actualizados (demora entre 12 y 30 segundos).
* Se los envía al usuario.
* Borra los registros de la tabla cache para ese usuario.
* Luego los guarda en el cache (agregando timestamp, IDUsuario y el automático del IDPK)


SP Simplificado.

CREATE PROCEDURE proceso1
@user_id int -- parametro de entrada (ID)
begin

.......

-- @CUANDO es ahora
-- cuando es el campo de generación del cache.

SET @ACEPTO = ISNULL((
-- cuantos minutos pasaron desde la ultima peticion
SELECT TOP 1 ABS(DATEDIFF(minute, cuando, @CUANDO)) FROM CACHE WHERE user_id = @user_id
),0)

SET @ACEPTO2 = ISNULL((
-- en caso de tener cache cual fue la fecha de generacion
SELECT TOP 1 FECHAFIN FROM CACHE WHERE user_id = @user_id
),'2017-01-01')

-- solución para renovar el cache luego de 60 minutos.
-- si pasaron menos de 60 minutos,
-- mas de CERO, es decir "Tengo cache"
-- y los datos guardados corresponden a hoy
IF ( @Acepto > 0 AND @Acepto < 60 and @Acepto2 = @DiaFinD )
begin
-- el cache todavía es válido, lo envío
select * from CACHE WHERE user_id = @user_id;
END
ELSE
begin
-- aqui reprocesar y guardar en cache
-- muchos selects, se guarda el resultado en una tabla temporal @1
create table @1 ()
insert into @1 select * from xxxxxxx

-- borro datos del cache para ese usuario
DELETE FROM CACHE WHERE user_id = @user_id

-- meto en el cache los datos nuevos para ese usuario
INSERT INTO CACHE
SELECT *, @user_id, CONVERT(date, @diaFinD), @cuando FROM @t1

SELECT * FROM @t1
END


MariaDB versiones.


Un link a un post sobre Motores MySQL y MariaDB montados sobre Docker.

https://dockertips.com/MySQL_ultimas

Tiempos y Performance MariaDB


Un post con muchos detalles de pruebas realizadas usando MariaDB.

https://www.linkedin.com/pulse/problemas-performance-y-mediciones-en-mariadb-102-cialdella-c-/?published=t

sábado, 16 de diciembre de 2017

Problemas, Performance y Mediciones en MariaDB 10.2.

Durante esta semana tuve que trabajar en otro problema de optimización de un proceso basado en "datos".


Cuando se migran servidores, se actualizan sistemas operativos, se instalan nuevos motores de bases de datos, siempre hay cambios y a veces no son los esperados. Es decir, cambiar para peor.


En este caso, el problema es con un servidor MySQL y distintos motores de datos (InnoDB y MyISAM), aunque todo este proceso puede ser aplicable a otros motores, este post es el detalle de lo que detecté, verifiqué y algunas soluciones.



Ante un problema, recomiendo auditar todas las partes, virtualización, S.O., motor de base de datos, estructuras internas, configuraciones, redes, etc. Cada uno de los componentes debe ser verificado para aislarlo del problema central, como en una gran función completa multivariable, cada una de las variables debe ser una constante para que al final obtenamos la ecuación simplificada.


Debemos definir lo que queremos verificar, planificar los cambios uno a uno, medir científicamente y pensar todas las opciones posibles, usar pensamiento lateral, leer mucho en internet, comparar con otras situaciones, preparar el lote de pruebas y documentar todo.


Todo debe acabar siendo un gráfico simple o unas pocas líneas explicativas con las conclusiones. También debemos incluir alternativas de mejoras y/o otros caminos a seguir. El proceso de análisis debe ser "reproducible", proveer "datos numéricos" y usar una metodología científica.


Entorno Inicial y problema reportado.


* Servidor Viejo con Linux 32 bits, 4 gb ram, Percona Server 5.5.29, dos tablas MyISAM con un join que guarda datos en una nueva tabla MyISAM.


* Servidor Nuevo con Linux 64 bits, 4 gb ram, MariaDB 10.2, 2 tablas InnoDB con un join y el destino es una tabla InnoDB.


* Los servidores son virtuales y están ubicados en un datacenter.


* El proceso es leer dos tablas de una base de datos y guardar registros en otra tabla de otra base de datos. (Todas en el mismo servidor MySQL)


* Los Usuarios reportan que ese proceso demora "mucho mas" en el servidor nuevo que en el viejo.





Objetivo del trabajo.


* Identificar en que se consume el tiempo del proceso, tratar de reducir los tiempos y entender porque los cambios fueron a peor.


* Definir un proceso de medición para procesos OLTP, el servidor optimizado debe tener buenos tiempos en procesos Batch y OLTP.


* Presentar los resultados fácilmente y ver alternativas.




Procesos de comparación.


* Creamos un proceso simple, paso a paso para las mediciones:


+ Reiniciar el Motor MariaDB para comenzar con un entorno limpio.

+ Crear tablas con distintas opciones.

+ Realizar el proceso de carga (leer 2 tablas y grabar 1)

+ Tomar tiempo del proceso.

+ Cambiar opciones de configuración del motor.

+ Comenzar nuevamente desde el principio.



* Usaremos 1M de registros en una de las tablas de lectura. 1.4 gb. 11 campos de lectura.

* También 300.000 registros para la segunda tabla de lectura. 400 mb. 1 campos de lectura.

* La tabla generada será de 904.000 registros con 12 campos almacenados. (1 de la 2da tabla y 11 de la primera tabla)



Opciones evaluadas :

+ Usar una tabla InnoDB con todos los índices existentes del modelo real.

+ Usar una tabla InnoDB sin índices.

+ Usar una tabla MyISAM con todos los índices.

+ Usar una tabla MyISAM sin índices.

+ Mover las tablas de lectura y de escritura a una nueva base de datos. (las 3 en una misma base de datos)

+ Cambiar el CHAR_SET para verificar si la degradación del proceso es por usar UTF8.

+ Probar guardar los datos en una tabla Comprimida.

+ Crear una tabla destino en memoria para evitar grabaciones en disco (solo habrá lecturas) y guardará el resultado en RAM.

+ Medir velocidad del disco de datos (comando dd) para ver si es suficientemente rápido.

+ Cambiar el proceso para que lea únicamente de una tabla y grabe en una. (resultado incompleto pero quitar la variable del join)

+ Crear un procedimiento que guarde datos en la tabla destino (proceso de grabación unicamente, sin lecturas)

+ Modificar el tipo de datos de campos de la tabla destino.


Para evitar generar degradación en el servidor viejo productivo, usé únicamente el servidor nuevo de TEST.

Lo aislé de todo otro proceso, paré los demás servicios, controlé que no haya acceso de personas o procesos y verifiqué un reinicio del motor para que en cada prueba comencemos desde cero.



La comparativa se realizó usando un servidor de TEST aislado, sin utilizar recursos externos, corriendo los procesos localmente en una sesión BASH, reiniciando el srv MariaDB 10.2 antes de cada parte, midiendo los procesos por las propias herramientas del motor, repitiendo cada proceso 3 veces y almacenando el promedio.



Luego de 3 dias de trabajo constantes (aunque continuaré), las conclusiones obtenidas son las siguiente:


* Usar las tres tablas MyISAM SIN todos los índices creados, requiere 3.53 segundos de proceso.

* Usar las tres tablas MyISAM CON todos los índices creados, requiere 17.1 segundos.

* Usar las tres tablas InnoDB SIN todos los índices creados, requiere 21 segundos.

* Las tres table InnoDB CON los índices, requiere 49 segundos.

* Usar tablas InnoDB consumo 2.86x veces el tiempo comparado con MyISAM.

* Realicé pruebas con 10K, 100K y 1M de registros, con MyISAM el crecimiento es proporcional.

* En el caso de InnoDB, el crecimiento es exponencial, mas registros mucho mayor es el tiempo necesario.

* Convertir la tabla de MyISAM a InnoDB demora 54.35 segundos y acaba midiendo 478 mb

* Convertirla de InnoDB a MyISAM demora 16.9 segundos y acaba midiendo 144mb+81mb (D+I)

* Comparando el proceso de carga con MyISAM y CON/SIN índices, CON necesita 4.83x mas que SIN.

* Comparando InnoDB, CON necesita 6.54x mas que SIN.

* Crear una base de datos nueva y crear dentro las 2 tablas orígenes y la de destino, necesitaba el mismo tiempo que 2 tablas en una base y el destino en otra base de datos.


* Evalué hacer la carga en una tabla InnoDB SIN índices y crearlos luego, pero el tiempo ganado (49-21=28 segs) se volvía a perder creando los índices (50.58 segs), mientras que insertar los registros en la tabla CON los índices creados demoraba 49 segs, cargar los registros en una tabla SIN índices y luego reindexar demoraba 21 + 50.58 secs, en total 71.58 segs.


* El aumento de tiempos en InnoDB sobre MyISAM, era proporcional a la medida de las tablas en disco. Eso quiere decir que en ambos motores el tiempo se consumía guardando los datos al disco a una velocidad aproximada.

En InnoDB los ficheros medían 3.3x mas que MyISAM, y el tiempo era 2.86x mas.


* Almacenar la tabla en RAM requería 53 segundos.


* Almacenar los registros en una tabla con "Row_Compress" (comprimida) requería 97 segundos.


* El tiempo de leer todos los registros del join era de 19 segundos, el resto del tiempo era usado para guardarlos en la tabla destino.


* Pasar el tipo de SET de caracteres a ASCII necesitó 53 segundos.


* Si leía los registros de una sola tabla (sin el JOIN) requería 45 segundos.


* Usar "LOCK TABLES" requería 51 segundos.


* Crear un SP para guardar 1M de registros en la tabla destino (sin leer nada de disco) requería 50 segundos.


* Si la tabla tenia dos cambios como "INT" necesitaba 50 segundos, no cambiaba mucho el tiempo total.


* Cambiar los parámetros del disco en el servidor virtual Línux, permitió pasar de 58MB/s a 155MB/s, mientras que mi equipo portátil con un disco SSD me da 287MB/s.


La configuración del motor MariaDB 10.2 que me dió mejores resultados es la siguiente, aunque seguiré haciendo pruebas :


[mysqld]

slow_query_log=0

innodb_file_per_table=1

innodb_flush_method=O_DIRECT

innodb_log_file_size=1G

innodb_buffer_pool_size=3500M

thread_cache_size=16

skip-name-resolve=1

tmp_table_size=128M

max_allowed_packet=64M

performance_schema=0

innodb_file_format=barracuda

innodb_strict_mode=1

innodb_flush_log_at_trx_commit=2

transaction-isolation=READ-COMMITTED

sql-mode=''



Mientras que InnoDB es un motor pensado para transacciones con propiedades ACID, con commit/rollback, consistencia y bloqueo parcial.

MyISAM sigue siendo un motor simple, con bloqueos completos de objetos, atomicidad en las transacciones pero con una gran velocidad.


Usar InnoDB para procesos batch (almacenar 1M de registros) requiere 2.86x mas tiempo con usando MyISAM.

lunes, 23 de octubre de 2017

Mysql/MariaDB QPS


Un muy buen post ( y blog) sobre los límites de un servidor corriendo MySQL o sus primos, el nro de QPS (Querys per sec.) y como tantas veces vemos, un solo motor puede hacer muchisimo sin necesidad de pasar a otras soluciones de réplicas, sharding, master-master.... Simplemente implementado el motor correctamente y optimizando el APP.

http://dimitrik.free.fr/blog/

SSH problema y hack


Para todos los que usen SSH (deberian ser todos!!!!)
este link los ayudará a verificar un problema de seguridad en SSH.

https://github.com/crocs-muni/roca

No tiene que ver con los problemas de WPA / WPA2 (WIFI) sino con los sistemas de claves pública/privadas.

miércoles, 18 de octubre de 2017

Docker y Persistencia


Un post sobre persistencia en Docker, vale la pena leerlo.

https://thenewstack.io/methods-dealing-container-storage/

OpenCommunities


Para el próximo Sábado reunión de "Open Communities"

https://www.eventbrite.es/e/entradas-open-communities-summit-2017-38651010212?utm_source=eb_email&utm_medium=email&utm_campaign=order_confirmation_email&utm_term=eventname&ref=eemailordconf

Registro gratuito. Ahí nos veremos.

Docker run exec


Un muy buen post sobre Docker y las maneras de arrancar procesos en Contenedores.

https://chankongching.wordpress.com/2017/03/17/docker-what-is-the-different-between-run-and-exec/

Here are some command ref:

To use binaries in a docker images:
docker run #{image} "COMMAND to be Ran"

To use binaries in a docker images continuously(setting or configs need to be inherited):
docker run #{image} --name #{container_name}

To enter a docker images and run command interactively:
docker run -it #{image}

To start a docker in background(as daemon)with process up and running that defined in Dockerfile:
docker run -d --name #{container_name} #{image}



Agrego mis recetas recolectadas (que suelo tener a mano)


https://github.com/wsargent/docker-cheat-sheet
docker pull alpine
docker images
docker inspect alpine

docker create - creates a container but does not start it.
docker rename - allows the container to be renamed.
docker run - creates and starts a container in one operation.
docker rm - deletes a container.
docker update - updates a container's resource limits.

docker start - starts a container so it is running.
docker stop - stops a running container.
docker restart - stops and starts a container.
docker pause - pauses a running container, "freezing" it in place.
docker unpause - will unpause a running container.
docker wait - blocks until running container stops.
docker kill - sends a SIGKILL to a running container.
docker attach - will connect to a running container.

docker images shows all images.
docker import creates an image from a tarball.
docker build creates image from Dockerfile.
docker commit creates image from a container, pausing it temporarily if it is running.
docker rmi removes an image.
docker load loads an image from a tar archive as STDIN, including images and tags (as of 0.7).
docker save saves an image to a tar archive stream to STDOUT with all parent layers, tags & versions (as of 0.7).

docker container stats
docker stats --all

docker ps -a

docker rm image_name delete image
docker rmi $(docker images -q) delete all images

docker container rename nervous_meitner testing
docker exec -it testing /bin/sh

docker ps - show running container
docker inspect - get info from container
docker events - evetns from con
docker port
docker top
docker stats


docker build use a file to create a server ( Dockerfile )
docker pull image (download a image file)
docker ps -l -q -- last run container
docker run -d alpine /bin/sh .c "sleep 20"
docker stop "container"
docker start "container"
docker restart "container"
docker rm `container`
docker cp `container`:/etc/passwd . (copy file to container)




docker build -t wangxian/alpine-mysql .

docker run -it --rm -v $(pwd):/app -p 3306:3306 wangxian/alpine-mysql
(docker MariaDB 10.1.19)
mysql -u root -p -h 172.17.0.1 (111111)

# RUN ALPINE DOCKET SERVER
docker run -it --rm -v $(pwd):/app -p 3306:3306 db933b99cf44

docker run -it --name mysql -p 3306:3306 -v $(pwd):/app -e MYSQL_DATABASE=admin -e MYSQL_USER=tony -e MYSQL_PASSWORD=dpa\*12d -e MYSQL_ROOT_PASSWORD=111111 wangxian/alpine-mysql



docker run -it ubuntu

martes, 17 de octubre de 2017

U2F Key


Compré un hard key para validar los accesos a cuentas con una verificación de "Dos pasos". La llave es muy barata (9.5 €uros en amazon)
https://www.amazon.es/gp/product/B01N6XNC01/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1



Tuve que tocar un fichero en Linux para que la reconozco, luego cambiar una configuración de Firefox, probar Nightly version 58.... al final no funciona en Mozilla Firefox. pero parece que SI funciona en Chrome.


vi /etc/udev/rules.d/70-u2f.rules

# this udev file should be used with udev 188 and newer
ACTION!="add|change", GOTO="u2f_end"
# Key-ID FIDO U2F
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="096e", ATTRS{idProduct}=="0850|0880", TAG+="uaccess"
LABEL="u2f_end"


Descargar la version Nightly
1. Open the Firefox advanced preferences at `about:config`.
2. Search for "webauth"
3. Enable (value=True) these two:
- security.webauth.u2f
- security.webauth.webauthn_enable_usbtoken


Seguiré probando si puedo hacerlo funcionar, sería muy bueno tener esa opción desde Firefox, evita tipear claves, y aumenta la seguridad de las cuentas.

WPA WPA2 Hack - KrackAttack


Ya todos sabrán que se encontró un problema en la encriptación WPA. Lo positivo es que ya hay un parche para Linux. Lo bajé ayer.
mas info del problema aqui
https://www.krackattacks.com/

miércoles, 4 de octubre de 2017

Keyboard sounds


Two options to produce ticky sound when typing.

https://github.com/BillBillBillBill/Tickeys-linux

yaourt -S bucklespring-git

SQL Server sobre Linux


Desde hace casi un año vengo probando los betas de SQL Server para Linux, clientes y luego servidores, desde Linux hacia SQL Server y desde Windows hacia Linux/SQLSrv. Siempre pensando si es posible utilizar esta solución y tiene sentido.

Reconozco que no me gusta en absoluto, poner un producto Propietario sobre Linux no es bueno, además un producto de MS, además una empresa que claramente era anti-Linux y recientemente está intentando hacercarse, un producto con una calidad de código fuente que no se puede verificar.

De todas formas, desde Arch Linux, el proceso de instalación de un servidor/cliente es sencillo.

yaourt -S mssql-server mssql-ciente

Al final la instalación se debe configurar el Servidor.

sudo /opt/mssql/bin/mssql-conf setup las opciones son :

Choose an edition of SQL Server:
1) Evaluation (free, no production use rights, 180-day limit)
2) Developer (free, no production use rights)
3) Express (free)
4) Web (PAID)
5) Standard (PAID)
6) Enterprise (PAID)
7) Enterprise Core (PAID)
8) I bought a license through a retail sales channel and have a product key to enter.

Al final de su configuración está listo para funcionar.

/usr/lib/systemd/system/mssql-server.service


sqlcmd -S 127.0.0.1 -Usa -Pclave
1> select @@version;
2> go
----------------------------------------------
Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64)
Aug 22 2017 17:04:49
Copyright (C) 2017 Microsoft Corporation
Express Edition (64-bit) on Linux (Manjaro Linux)
(1 rows affected)

lunes, 2 de octubre de 2017

DevOps Admin Windows from Linux



As a DBA with difference engines to administer, sometimes I need to connect to SQL Server and MySQL engines, sometimes in Windows and sometimes in Linux.

I prefer to use Linux O.S. in my notebooks, may be it's not the best option at all, I know, but I want to be safe, have more resources for my tasks, less delays, and a simple way to do daily tasks. (clean, simple, spartan), off course I'm a Debian Linux fan too.

Right or wrong...? it's my option.


I had to prepare some script to simplify my daily works.

may be I'm a DevOp + DBA ?
who cares, je je...


As I.T. Engineering I have to solve problems everyday and sometimes build my own tools to solve it (if I don't have them).

I want to share some script I use in my daily tasks, I guess you could modify it with "your needs" too, and think in GPL and share it too.


Massive connection to Linux & MySQL servers and SQL Servers


(if you want the .sh file, just ask for it)

#!/bin/bash
# run it $ xxxxx NN
#
clear
echo " ----- All in One -----------------------------"
echo "1. uptime"
echo "2. mysql running ? check"
echo "3. SQL Server check"

for i in '192.168.10.2' \
'192.168.10.3' \
'192.168.10.4'

do
case $1 in
1)
echo "****"
echo "$i"
ssh "$i" 'echo `hostname`' "$i"
ssh "$i" "uptime"
;;

case $1 in
2)
clear
echo "****"
echo "$i"
ssh "$i" 'echo `hostname`' "$i"
mysql -uUSER -p'PASSWORD' -h "$i" -e 'select 1;'

read
;;

case $1 in
2)
clear
echo "****"
echo "$i"
ping -c 1 "$i"

# mssql tools installed in Linux
sqlcmd -U"user" -P"password" -S "$i" -Q "select 1;"

;;

esac

done

echo " # EOT "
exit 0
#
# EOF
#




Another script to connect to Windows servers (from Linux)
Again simple, clear and spartan (I have hundreds like this, one for each server) it's easy to type the name/ip and "Enter"



#!/bin/bash
rdesktop SERVERNAME/IP -x l -z -g 1024x768 -uUser -pPassword -r sound:off

I'm pretty sure you could create more like this for simple tasks, "bash" is still a great tool to interact, program and administer a remote server.



Another one, to identify new connections in a server or dis-connections.



#!/bin/bash
clear
netstat -a -n | grep tcp > /tmp/tcp
netstat -a -n | grep udp > /tmp/udp
while [ 1 = 1 ]
do
# sleep 0.5
cp /tmp/tcp /tmp/tcp2
cp /tmp/udp /tmp/udp2

netstat -a -n | grep tcp > /tmp/tcp
netstat -a -n | grep udp > /tmp/udp

# clear
echo "-----------------------------------------------------------------------"
date
echo "-----------------------------------------------------------------------"

# compare what lines appear now, not exists before
diff --side-by-side --suppress-common-lines /tmp/tcp /tmp/tcp2 | grep "<" diff --side-by-side --suppress-common-lines /tmp/udp /tmp/udp2 | grep "<" # read key, if Q exit read -t 1 -n 1 key if [[ $key = q ]] then break fi done # # EOF #







sábado, 30 de septiembre de 2017

IPFS vs FreeNet


Un post con algunas ideas sobre las diferencias entre IPFS y FreeNET.
https://github.com/ipfs/faq/issues/18

Estoy usando Freenet hace muchos años y ahora estor probando IPFs, pensando en compartir contenido en internet.

viernes, 29 de septiembre de 2017

GPG / PGP rápido


Estoy probando como hacer para simplificar el proceso de encriptar un texto rápidamente.
El caso simple sería, estoy escribiendo un correo desde un WebMail (en APP para envio de correos es mas facil) y quisiera hacer
COPIAR
ctrl-alt-xxx
PEGAR
y que el texto ya esté encriptado usando mi clave.


Algunos componentes, desde linux importar clave pública y privada en GPG
gpg --import < claves.txt

crear un alias de bash
alias cryptclip='xsel|gpg --yes -ear cuenta@servidor.com|xsel --clipboard'

agregar la linea en /home/xxxx/.bashrc

crear un shortcut de treclado, ejemplo ctrl-alt-k para llamar al cryptlib

Luego seleccionar texto, copiar y ctrl-alt-k, pero me pide una confirmación.

Sigo probando como mejorarlo....

viernes, 22 de septiembre de 2017

Migrate Centos+Gnome to Arch+Xfce


Llevo usando Linux de manera profesional y diaria, desde hace mas de 7 años, aunque desde el 96 lo uso de manera virtual o solo en algunos portátiles o con ciertas condiciones.
Durante mas de 5 años usé Xubuntu, me parecía la mejor opción, pero durante los últimos 9 meses tuve que usar Centos 7 con Gnome (laboralmente), mi corazón educativo sigue estando con Debian !!!!

El hardware es un Portátil HP Elitebook I5, 8 gb, 256 ssd, monitor de 1920 x 1080, usb-c, última generación (algo muy parecido a un Macbook Air, dije parecido), básicamente por tener que correr un cliente de VPN especial que no funcionaba correctamente en derivados de Debian (Ubuntu, Xubuntu, etc). Aunque la interfaz Gnome ha mejorado mucho, es agradable y simple, todo bastante pulido pero seguía prefiriendo mi viejo y espartano XFCE4.

Hace unos dias actualicé a Centos 7.4 y comenzaron los problemas, dejó de funcionar MySQL-workbench, arandr y otros paquetes.... Necesito esos paquetes a diario y no puedo trabajar SIN ELLOS, me puse a pensar como resolverlo..... luego de varios dias dije "porqué no migrar nuevamente y salir de Centos+Gnome" ?

Tuve que revisar varias distros (usando Virtualbox) y verificar que el cliente de VPN funcionaba correctamente.

Si, XFCE es un Desktop simple, bastante básico, a medio camino entre un BlackBox/LXDE y un Gnome/Kde. Me sigue gustando como el primer dia. Pretendo tener todo lo que necesito a mano, directamente, sin muchas vueltas, todo bastante plano, sin bellezas estéticas que pueda demorar o hacer mas lento mi trabajo. Funciona muy rápido pero es bastante amigable.

Gracias a un "mate" (Andrea B.) quien me recomienda siempre ARCH, me puse a ver Manjaro 17.0.5.

Hoy luego de 3 horas de copias de datos a un disco externo, instalación de Manjaro+XFCE y copias de vuelta al PC, lo tengo en funcionamiento, quería evitar tener que perder horas de instalación manual (ARCH + XFCE), edición de archivos textos, configs.... leer páginas....

Preferí la solución rápida e instalé Manjaro. Todavía recuerdo a Miguel Angel que me había comentado la distro hace años, pero yo seguía fiel a mi Xubuntu.


Mis conclusiones luego de poner en marcha mi equipo desde cero nuevamente.

* La Instalación de Manjaro+XFCE es muy sencilla, tal sencilla o mas que Xubuntu. Rápida y sin muchas vueltas en que instalar. Pocas cosas de mas, pocos adicionales.

* Tuve que entender que debia crear una particion aislada para BOOT+EFI, quizas debido a mi hardware o la manera en que arranca Manjaro+xfce. Hasta ahora con Debian, Xubuntu y otras distros no me había pasado.

* Tuve que aprender rápidamente, gracias Andrea B. por los tips sobre paquetes en ARCH, pacman, pamac, yaourt y otros APPs. Al final con la interfaz gráfica de Manjaro no es tan complicado.

* He instalado lo que uso a diario. Casi todo con los paquetres oficiales, aunque tuve que descubrir AUR. Estoy revisando ese repositorio, porque no le tengo 100% de confianza, está preparado por usuarios. La comunidad ayuda pero miro cada paquete de AUR con mucho cuidado, riezgos los mínimos porque es mi portátil de trabajo.

PAQUETES
- calibre
- chrome
- dbeaver
- desktop access
- firefox
- jitsi
- keepass x
- libreoffice
- mysql-workbench
- owncloud
- pinta
- remmina
- skype
- slack
- sublimetext
- teamviewer
- transmission
- veracrypt
- virtualbox
- vlc
- arandr



* Al Bootear luego de varias instalaciones la pantalla se quedó en negro, y no pude entrar a la interfax gráfica, tuve que modificar el grub.conf para que arranque en modo texto y luego desde el shell texto (de mi cuenta) arrancar el entorno gráfico (startx).

Aunque seguramente lo arreglaré, la solución de 15 mins fue esta

Add "systemd.unit=multi-user.target" (without quotes) to the linux line of grub entry. [1]
Best also remove "quiet" and "splash" there.

[1] - At grub menu, arrow to manjaro entry, press 'e'

type in systemd.unit=multi-user.target en medio del Linux boot info.
F10 to boot.
Do not press 'esc' ; if do repeat steps.

El fichero queda

linux /boot/vmlinuz-4.9-x86_64 root=UUID=eb77aa43-eb11-4f27-aae2-2a1ec7b8b836 rw quiet systemd.unit=multi-user.target resume=UUID=39784c92-d258-42ea-8e93-a880df0684ac

* Tuve algunos problemas con el invernado, sigo probando las opciones.

* Tengo un problema al tipear caracteres españoles. Sin nada corriendo, al tipear se congela el teclado y solo puedo ctrl-alt-f1 / f2 y reboot.
https://www.youtube.com/edit?o=U&video_id=GXT5CZ6MVyk
Resuelto aqui
https://forum.manjaro.org/t/solved-xfce-freeze-when-type-special-chars-and-others/31932

* ALGO MUY POSITIVO es tener las ultimas versiones funcionando, me preocupa FIREFOX que es algo que uso a diario, ssh y otros paquetes que puedan ser atacados por 0days. Me gusta el que cada paquete sea bajado y compilado en mi equipo, quizas un poco mas lento que instalar binarios, pero me da mas confianza.

* Como ocurre siempre, al reinstalar todo de nuevo, gano unos 30 gb que estaban ocupados en cache, shares locales, temporales... etc.etc... Gano disco que ya llenaré en unos meses.

* Otro punto positivo es que comenzó a funcionar el Bluetooth, no lo uso nunca, pero en Manjaro funciona correctamente.

* Mas cosas buenas, tiene un gestor de Kernels que me permite usar los mas nuevos, instalarlos de una manera simple y avisarme cuando salga uno mas.

* Una manía que tengo es quitar los paquetes que no necesito y que se que no usaré en el próximo año, recupero unos pocos megas, pero viv omas feliz usando lo que realmente necesito y quitando lo que no necesito. En el caso de Manjaro no encontré un solo paquete que no necesite y que haya quitado, si usan estadísticas para saber que usa la gente, lo están haciendo muy bien !