-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrss.xml
More file actions
544 lines (505 loc) · 73.2 KB
/
rss.xml
File metadata and controls
544 lines (505 loc) · 73.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tomás Delvechio</title><link>http://tomasdelvechio.github.io/</link><description>Sitio Academico de Tomas Delvechio</description><atom:link href="http://tomasdelvechio.github.io/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><copyright>Contents © 2025 <a href="mailto:tdelvechio@unlu.edu.ar">Tomás Delvechio</a>
<a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
<img alt="Creative Commons License BY-NC-SA"
style="border-width:0; margin-bottom:12px;"
src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"></a></copyright><lastBuildDate>Thu, 27 Mar 2025 03:23:24 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Borrando Cosas Inutiles de Ubuntu (Versión 2024)</title><link>http://tomasdelvechio.github.io/blog/borrando-cosas-inutiles-de-ubuntu-version-2024/</link><dc:creator>Tomás Delvechio</dc:creator><description><h2>Indice de la serie</h2>
<ol>
<li><a href="http://tomasdelvechio.github.io/blog/borrando-cosas-inutiles-de-ubuntu-version-2020">Primera parte</a></li>
<li><a href="http://tomasdelvechio.github.io/blog/borrando-cosas-inutiles-de-ubuntu-version-2024">Segunda parte</a></li>
</ol>
<h2>Introducción</h2>
<p>En está segunda parte de lo que ya se está convirtiendo en una seríe de posts,
se discutirán algunas estrategias avanzadas para recuperar espacio en disco.</p>
<p>Mi profesión es de programación, asi que muchas de las estrategias borran o
reducen el uso de herramientas especificas. Para ver algunas cosas mas utiles
tal vez te venga mejor mirar antes el <a href="http://tomasdelvechio.github.io/blog/borrando-cosas-inutiles-de-ubuntu-version-2020">post anterior</a>.</p>
<div class="admonition danger">
<p class="admonition-title">Danger</p>
<p>Los comandos utilizados en este post <strong>son destructivos</strong> y en muchos casos <strong>no se
pueden deshacer</strong>. Se aconseja leer con cuidado, no copiar y pegar, y aprender sobre
cada comando comentado antes de ejecutarlo.</p>
</div>
<h2>Controlar el espacio en disco disponible</h2>
<p>Siempre es bueno arrancar sabiendo cuanto espacio en disco tenemos para saber cuanto
liberamos con los diferentes comandos:</p>
<div class="code"><pre class="code literal-block">df<span class="w"> </span>-h
</pre></div>
<p>Darle bola principalmente a la partición <code>/</code> y en caso de aparecer, a <code>/var</code> y <code>/usr</code>.</p>
<h2>Paquetes o programas de gran tamaño en APT</h2>
<p>A veces perdemos la referencia de programas instalados pero que no estamos usando.</p>
<p>Con el gestor de paquetes APT manejando dependecias, podemos tener mucho software que
no recordamos instalar o directamente nunca instalamos explicitamente. Si queremos
hacer un listado de los paquetes por tamaño que ocupan, podemos ejecutar:</p>
<div class="code"><pre class="code literal-block">dpkg-query<span class="w"> </span>--show<span class="w"> </span>--showformat<span class="o">=</span><span class="s1">'${Package;-50}\t${Installed-Size}\n'</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>sort<span class="w"> </span>-k<span class="w"> </span><span class="m">2</span><span class="w"> </span>-n<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>-v<span class="w"> </span>deinstall<span class="w"> </span><span class="p">|</span><span class="w"> </span>awk<span class="w"> </span><span class="s1">'{printf "%.3f MB \t %s\n", $2/(1024), $1}'</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>less
</pre></div>
<p>Obtendremos una salida como la siguiente</p>
<div class="code"><pre class="code literal-block">286,543 MB libcusparse-dev-12-3
329,808 MB typora
336,514 MB linux-modules-extra-5.15.0-116-generic
336,517 MB linux-modules-extra-5.15.0-117-generic
336,524 MB linux-modules-extra-5.15.0-118-generic
336,524 MB linux-modules-extra-5.15.0-119-generic
336,592 MB linux-modules-extra-5.15.0-121-generic
336,593 MB linux-modules-extra-5.15.0-122-generic
336,594 MB linux-modules-extra-5.15.0-124-generic
336,652 MB linux-modules-extra-5.15.0-125-generic
354,313 MB google-chrome-stable
380,522 MB libcufft-dev-12-3
429,920 MB linux-modules-extra-6.5.0-44-generic
433,652 MB linux-modules-extra-6.5.0-41-generic
449,160 MB linux-modules-extra-6.8.0-40-generic
449,413 MB linux-modules-extra-6.8.0-47-generic
449,449 MB linux-modules-extra-6.8.0-45-generic
485,409 MB linux-firmware
584,258 MB rstudio
596,854 MB libcublas-12-3
705,180 MB zoom
907,500 MB libcublas-dev-12-3
1497,791 MB nsight-compute-2023.3.1
</pre></div>
<p>Aquí solo resta decidir que paquetes no deseo tener y quiero desinstalar.</p>
<div class="admonition danger">
<p class="admonition-title">Danger</p>
<p>Nunca elimines un paquete que comience con <code>linux-</code> sin saber lo que estas haciendo.
Se recomienda hacer el siguiente paso con aplicativos de uso comun o hayas instalado
vos mismo.</p>
</div>
<p>Un ejemplo basado en la linea de arriba puede ser el siguiente</p>
<div class="code"><pre class="code literal-block">sudo<span class="w"> </span>apt<span class="w"> </span>purge<span class="w"> </span>typora<span class="w"> </span>zoom<span class="w"> </span>rstudio
</pre></div>
<p>Luego de cada borrado, puede ser util ejecutar</p>
<div class="code"><pre class="code literal-block">sudo<span class="w"> </span>apt<span class="w"> </span>autoremove
</pre></div>
<p>Este último comando libera dependencias huerfanas del paso anterior.</p>
<h2>Docker</h2>
<p>Docker es una gran herramienta, tanto para deploy profesional como para tener software
corriendo en nuestro equipo con poca configuración. Sin embargo, el costo de ejecutarlo
sigue siendo alto. </p>
<p>Existen 4 elementos de Docker con los que podemos toparnos que consumen mucho espacio
en disco:</p>
<ul>
<li>Contenedores</li>
<li>Imagenes</li>
<li>Volumenes locales</li>
<li>Cache de construcción</li>
</ul>
<p>Por suerte tenemos un comando que nos deja ver como estamos en este asunto</p>
<div class="code"><pre class="code literal-block">docker<span class="w"> </span>system<span class="w"> </span>df
</pre></div>
<p>La salida del comando en cuestión es similar a la siguiente</p>
<div class="code"><pre class="code literal-block">TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 0 0 0B 0B
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 91 0 2.361GB 2.361GB
</pre></div>
<p>Obviamente las columnas <code>SIZE</code> y <code>RECLAIMABLE</code> son las relevantes. La última es
el espacio en disco que es posible conseguir sin destruir nada que estemos utilizando.
En el caso de la columna <code>SIZE</code> hay que tener mas cuidado, ya que puede haber cosas
en uso cuyo espacio ocupado sean necesarias para que funcione.</p>
<p>El comando que hace la magia es <code>system prune</code></p>
<div class="code"><pre class="code literal-block">docker<span class="w"> </span>system<span class="w"> </span>prune
</pre></div>
<p>Dicho comando solo eliminará componentes que de algúna forma segura se determinen
que ya no se utilizan. Como siempre, cuidado de no eliminar nada importante.</p>
<p>Es importante notar que prune es una acción en muchos de los subcomandos de docker,
ademas de contar con <code>rm</code>. En dichos casos, siempre es aconsejable primero estudiar
que tenemos disponible:</p>
<div class="code"><pre class="code literal-block">docker<span class="w"> </span>container<span class="w"> </span>ls<span class="w"> </span>-a
docker<span class="w"> </span>volume<span class="w"> </span>ls
</pre></div>
<p>En todo caso borrar individualmente cosas que sepamos que no se están utilizando
via <code>docker &lt;subcomadno&gt; rm &lt;HASH_DEL_COMPONENTE&gt;</code>.</p>
<h2>Caché de Snap</h2>
<p>Snap nunca nos dejará en paz. Si <a href="http://tomasdelvechio.github.io/blog/borrando-cosas-inutiles-de-ubuntu-version-2020/">en el primer post</a>
habiamos visto que los instaladores iban dejando replicas viejas instaladas y
desactivadas, vaya a saber uno para que, investigando un poco mas podemos encontrar
que cada app tiene su caché, que muy lindo y util, pero si estamos desesperados
por espacio, puede venir bien reclamarlo y que las apps lo vayan consumiendo
lentamente.</p>
<div class="admonition danger">
<p class="admonition-title">Danger</p>
<p>Como ya se dijo, cuidado. En este caso, borrar el contenido de este directorio
no puede ocasionar ningun daño, pero si se copia mal la ruta, el principio del
comando es <code>rm -rf</code> que puede ser muy destructivo. <strong>No copiar y pegar, POR FAVOR</strong>.</p>
</div>
<div class="code"><pre class="code literal-block">sudo<span class="w"> </span>sh<span class="w"> </span>-c<span class="w"> </span><span class="s1">'rm -rf /var/lib/snapd/cache/*'</span>
</pre></div>
<p>En un sistema instalado nuevo no tiene demasiado sentido, pero si la instalación
tiene varios años, capaz les sirve.</p>
<p>Como la vez anterior, espero que algo de esto les sirva.</p></description><category>disk usage</category><category>free space</category><guid>http://tomasdelvechio.github.io/blog/borrando-cosas-inutiles-de-ubuntu-version-2024/</guid><pubDate>Thu, 27 Mar 2025 00:52:24 GMT</pubDate></item><item><title>Poniendose al Dia con PHP 8</title><link>http://tomasdelvechio.github.io/blog/poniendose-al-dia-con-php-8/</link><dc:creator>Tomás Delvechio</dc:creator><description><p>Soy programador de PHP desde los infames tiempos (?) de PHP 5. Mucha agua corrió bajo el punte y así como PHP 7 supuso un gran avance en varios aspectos, estamos en la previa del lanzamiento de la nueva gran versión, que será PHP 8. Cuando escribo esto (noviembre de 2020), <a href="https://www.php.net/archive/2020.php#2020-10-29-2">tenemos la RC3 salida hace un par de días</a>.</p>
<p>Vengo siguiendo la evolución de esta versión de forma superficial pero continuada. Si bien la discusión detallada se puede seguir <a href="https://wiki.php.net/rfc">en el propio sitio a través de sus RFC</a>, es cierto que eso a veces puede ser medio pesado por el nivel de detalles.</p>
<p>Por eso vengo siguiendo varios posts que les comparto, para ponerse al día medio rápido en lo que nos ofrece esta nueva versión.</p>
<ul>
<li>El blog de <a href="https://stitcher.io/">Stitcher.io</a> es uno de los mas activos en términos de estar al día con las novedades. En particular <a href="https://stitcher.io/blog/new-in-php-8">este post</a> lista la mayoría de nuevas características (sobre todo en sintaxis).</li>
<li>Acá les dejo algunos post mas del mismo blog. <a href="https://stitcher.io/blog/php-8-before-and-after">[1]</a> <a href="https://stitcher.io/blog/php-8-in-8-code-blocks">[2]</a> <a href="https://stitcher.io/blog/php-in-2020">[3]</a></li>
<li><a href="https://pociot.dev/32-php-8-try-out-all-new-features">Este otro post</a> esta muy bueno, con 32 ejemplos para probarlos desde el mismo navegador.</li>
<li><a href="https://www.exakat.io/en/common-php-8-0-compilation-error-messages/">Este ultimo</a> me pareció piola de cara a los que laburamos hace tiempo con PHP, y es un conjunto de errores comunes que nos podemos encontrar ya si ejecutamos código actual con la nueva versión.</li>
</ul>
<p>La idea era compartirles esta serie de links. </p>
<p>Hasta la próxima.</p>
<p><strong>UPDATE</strong>: Voy a ir agregando acá nuevos posts que vaya encontrando:</p>
<ul>
<li>Algunas notas sobre <a href="https://platform.sh/blog/2020/php-80-feature-focus-weak-maps/">Weak Maps</a></li>
</ul></description><category>php</category><category>php8</category><guid>http://tomasdelvechio.github.io/blog/poniendose-al-dia-con-php-8/</guid><pubDate>Thu, 05 Nov 2020 01:43:04 GMT</pubDate></item><item><title>Screencasts en Gnome 3</title><link>http://tomasdelvechio.github.io/blog/screencasts-en-gnome-3/</link><dc:creator>Tomás Delvechio</dc:creator><description><p>Estoy preparando una charla que voy a dar en un par de semanas. Como material de la misma voy a integrar algunos videos de ejemplos, para no tener que ejecutarlos en vivo (porque a veces pueden fallar, roba tiempo de la charla, que la idea es que sea fluida, etc...)</p>
<p>Cuestión que, al no estar subido a la moda de ser Youtuber ni Streamer ni similar, no manejo el set de software estándar (Si, ya se, OBS + algún que otro editor onda Kdenlive). Esta bueno eso, pero a veces puede sonar a demasiado.</p>
<p>Soy usuario de Ubuntu + Gnome 3 desde hace años, y en algún momento me había cruzado con un atajo de teclado para activar una grabación del escritorio. Lo olvidé, pero en Reddit <a href="https://www.reddit.com/r/gnome/comments/hpxzfg/til_you_can_use_shiftctrlaltr_to_record_a_video/">hoy me volvi a cruzar con eso</a>, y recordé lo simple que era para evitar OBS (que de nuevo, esta muy bien, pero puede ser demasiado).</p>
<p>Lo estuve probando, y si bien no se si es lo que voy a usar definitivo, si esta bueno tener "a mano", saber que existe y como usarlo.</p>
<h3>Screencast en Gnome 3</h3>
<p>Antes yo lo conocía como Screencast, hoy son Vlogs o directamente un canal de Youtube. La idea es clips de videos que muestren como hacer algo "técnico", una solución a algo o documentar la forma de arreglar un problema.</p>
<p>Gnome 3 tiene la funcionalidad nativa de hacer Screencast casi <a href="https://help.gnome.org/users/gnome-help/stable/screen-shot-record.html#screencast">desde que salió</a>.</p>
<p>Para activarla, basta ejecutar <code>Ctrl</code> + <code>Alt</code> + <code>Shift</code> + <code>R</code>. Eso hace que en el panel de arriba a la derecha aparezca un icono "rojo".</p>
<blockquote class="imgur-embed-pub" lang="en" data-id="yf5BVor" data-context="false"><a href="//imgur.com/yf5BVor">TIL you can use Shift+Ctrl+Alt+R to record a video of the screen.</a></blockquote>
<script async src="//s.imgur.com/min/embed.js" charset="utf-8"></script>
<p>source: <a href="https://imgur.com/yf5BVor">https://imgur.com/yf5BVor</a></p>
<p>Ellos dicen que lo integraron por propósitos de depuración. Con lo cual, las configuraciones por defecto son bastante pobres. Por ejemplo, el máximo de grabación por defecto son 30 segundos.</p>
<p>Como todo desde que encararon esa filosofía del nuevo escritorio, lo dejaron ahí, muy poco documentado, y se olvidaron. No se si se olvidaron, pero cuando un usuario les pide que le agreguen "opciones" la respuesta es "esta ahí, que alguien haga una extensión". Que se yo, cada uno maneja sus comunidades como quiere, y a Gnome la verdad que le va bastante bien. Pero es una respuesta medio chocante para mi.</p>
<h3>EasyScreenCast</h3>
<p>En fin, cuestión que alguien si le hizo caso al comentario y por eso existe la extensión <a href="https://extensions.gnome.org/extension/690/easyscreencast/">EasyScreenCast</a>. La use un rato, anda joya, y tiene muchas opciones para configurar.</p>
<p><img alt="" src="https://extensions.gnome.org/extension-data/screenshots/screenshot_690_GFOsR6g.png"></p>
<p>En particular tuve unos problemas a la hora de grabar algo que no sea todo el escritorio (tengo dos monitores entonces es incomodo para usarlo). Pero rompía el escritorio (era necesario reiniciarlo) así que por el momento, no se si es lo que voy a usar. Capaz me pongo a hacer debug, pero por ahora es algo que tira para atrás el uso. Mi hipótesis es que al tener un Ubuntu viejo (18.04) la versión de Gnome con el plugin no están congeniando del todo bien.</p>
<p>En caso de encontrarle la vuelta, actualizo el post.</p></description><guid>http://tomasdelvechio.github.io/blog/screencasts-en-gnome-3/</guid><pubDate>Sun, 12 Jul 2020 19:59:48 GMT</pubDate></item><item><title>Borrando Cosas Inutiles de Ubuntu (Versión 2020)</title><link>http://tomasdelvechio.github.io/blog/borrando-cosas-inutiles-de-ubuntu-version-2020/</link><dc:creator>Tomás Delvechio</dc:creator><description><h2>Indice de la serie</h2>
<ol>
<li><a href="http://tomasdelvechio.github.io/blog/borrando-cosas-inutiles-de-ubuntu-version-2020">Primera parte</a></li>
<li><a href="http://tomasdelvechio.github.io/blog/borrando-cosas-inutiles-de-ubuntu-version-2024">Segunda parte</a></li>
</ol>
<h3>Introducción</h3>
<p>Nunca esta demás saber que cosas borrar para mantener el disco raíz lo mas libre posible. Hoy me encontré con el Disco raíz con un 86% de ocupación y me dispuse a buscar cosas para borrar.</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>df<span class="w"> </span>-h<span class="w"> </span>
Filesystem<span class="w"> </span>Size<span class="w"> </span>Used<span class="w"> </span>Avail<span class="w"> </span>Use%<span class="w"> </span>Mounted<span class="w"> </span>on
...
/dev/sda1<span class="w"> </span>38G<span class="w"> </span>31G<span class="w"> </span><span class="m">5</span>,0G<span class="w"> </span><span class="m">86</span>%<span class="w"> </span>/
...
</pre></div>
<h3>Herramienta de diagnostico</h3>
<p>Ok, que hacer? En primer lugar, un diagnostico. La primer mano nos la puede dar la aplicación <code>baobab</code>, que si mal no recuerdo siempre esta instalada (si tenes el escritorio por defecto de Ubuntu).</p>
<p>Se busca desde el launcher con ese nombre o "Analizador de Uso de Disco". Muestra las diferentes particiones y gráficos de forma cómoda directorios y sub-directorios:</p>
<p><img alt="Baobab Screenshoot" src="http://tomasdelvechio.github.io/img/blog/2020/baobab-screenshot.png"></p>
<h3>Replicas de paquetes de Snap</h3>
<p>Ya usando <code>baobab</code> investigo y encuentro que uno de los directorios que mas archivo tiene es <code>/var/lib/snapd/snaps</code>. Ahi me encuentro con lo siguiente:</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>ls<span class="w"> </span>-la<span class="w"> </span>/var/lib/snapd/snaps
total<span class="w"> </span><span class="m">6180056</span>
drwxr-xr-x<span class="w"> </span><span class="m">3</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">4096</span><span class="w"> </span>jul<span class="w"> </span><span class="m">3</span><span class="w"> </span><span class="m">18</span>:40<span class="w"> </span>.
drwxr-xr-x<span class="w"> </span><span class="m">21</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">4096</span><span class="w"> </span>jul<span class="w"> </span><span class="m">3</span><span class="w"> </span><span class="m">18</span>:55<span class="w"> </span>..
-rw-------<span class="w"> </span><span class="m">2</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">57266176</span><span class="w"> </span>jun<span class="w"> </span><span class="m">13</span><span class="w"> </span><span class="m">12</span>:12<span class="w"> </span>bitwarden_25.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">57257984</span><span class="w"> </span>jun<span class="w"> </span><span class="m">29</span><span class="w"> </span><span class="m">21</span>:35<span class="w"> </span>bitwarden_26.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">57614336</span><span class="w"> </span>mar<span class="w"> </span><span class="m">25</span><span class="w"> </span><span class="m">22</span>:43<span class="w"> </span>core18_1705.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">57618432</span><span class="w"> </span>abr<span class="w"> </span><span class="m">30</span><span class="w"> </span><span class="m">14</span>:28<span class="w"> </span>core18_1754.snap
-rw-------<span class="w"> </span><span class="m">2</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">63942656</span><span class="w"> </span>jun<span class="w"> </span><span class="m">19</span><span class="w"> </span><span class="m">11</span>:05<span class="w"> </span>core20_634.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">101724160</span><span class="w"> </span>jun<span class="w"> </span><span class="m">2</span><span class="w"> </span><span class="m">16</span>:18<span class="w"> </span>core_9289.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">101191680</span><span class="w"> </span>jun<span class="w"> </span><span class="m">24</span><span class="w"> </span><span class="m">16</span>:07<span class="w"> </span>core_9436.snap
-rw-------<span class="w"> </span><span class="m">2</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">61710336</span><span class="w"> </span>feb<span class="w"> </span><span class="m">27</span><span class="w"> </span><span class="m">02</span>:55<span class="w"> </span>discord_108.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">60096512</span><span class="w"> </span>mar<span class="w"> </span><span class="m">18</span><span class="w"> </span><span class="m">11</span>:54<span class="w"> </span>discord_109.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">93212672</span><span class="w"> </span>jun<span class="w"> </span><span class="m">23</span><span class="w"> </span><span class="m">16</span>:27<span class="w"> </span>drawio_37.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">93224960</span><span class="w"> </span>jun<span class="w"> </span><span class="m">28</span><span class="w"> </span><span class="m">21</span>:35<span class="w"> </span>drawio_38.snap
-rw-------<span class="w"> </span><span class="m">2</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">193806336</span><span class="w"> </span>may<span class="w"> </span><span class="m">14</span><span class="w"> </span><span class="m">2019</span><span class="w"> </span>eclipse_40.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">220319744</span><span class="w"> </span>mar<span class="w"> </span><span class="m">25</span><span class="w"> </span><span class="m">07</span>:39<span class="w"> </span>eclipse_48.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">208605184</span><span class="w"> </span>mar<span class="w"> </span><span class="m">11</span><span class="w"> </span><span class="m">20</span>:01<span class="w"> </span>gitkraken_153.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">208609280</span><span class="w"> </span>abr<span class="w"> </span><span class="m">22</span><span class="w"> </span><span class="m">20</span>:45<span class="w"> </span>gitkraken_154.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">147488768</span><span class="w"> </span>may<span class="w"> </span><span class="m">30</span><span class="w"> </span><span class="m">12</span>:22<span class="w"> </span>gnome-3-26-1604_100.snap
-rw-------<span class="w"> </span><span class="m">1</span><span class="w"> </span>root<span class="w"> </span>root<span class="w"> </span><span class="m">147501056</span><span class="w"> </span>nov<span class="w"> </span><span class="m">17</span><span class="w"> </span><span class="m">2019</span><span class="w"> </span>gnome-3-26-1604_98.snap
</pre></div>
<p>Las apps están descargadas y "backupeadas" por las dudas.</p>
<p><a href="https://snapcraft.io/">Snap</a> es una manera de instalar apps en Linux, fuertemente impulsada por Canonical. A veces es cómoda para instalar apps que no están en los repos clásicos o están en una versión desactualizada (via Apt).</p>
<p>Buscando un poco, se llega al siguiente comando:</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>snap<span class="w"> </span>list<span class="w"> </span>--all
Name<span class="w"> </span>Version<span class="w"> </span>Rev<span class="w"> </span>Tracking<span class="w"> </span>Publisher<span class="w"> </span>Notes<span class="w"> </span>
bitwarden<span class="w"> </span><span class="m">1</span>.18.0<span class="w"> </span><span class="m">25</span><span class="w"> </span>latest/stable<span class="w"> </span>bitwarden✓<span class="w"> </span>disabled<span class="w"> </span>
bitwarden<span class="w"> </span><span class="m">1</span>.19.0<span class="w"> </span><span class="m">26</span><span class="w"> </span>latest/stable<span class="w"> </span>bitwarden✓<span class="w"> </span>-<span class="w"> </span>
core<span class="w"> </span><span class="m">16</span>-2.45.1<span class="w"> </span><span class="m">9436</span><span class="w"> </span>latest/stable<span class="w"> </span>canonical✓<span class="w"> </span>core<span class="w"> </span>
core<span class="w"> </span><span class="m">16</span>-2.45<span class="w"> </span><span class="m">9289</span><span class="w"> </span>latest/stable<span class="w"> </span>canonical✓<span class="w"> </span>core,disabled<span class="w"> </span>
core18<span class="w"> </span><span class="m">20200311</span><span class="w"> </span><span class="m">1705</span><span class="w"> </span>latest/stable<span class="w"> </span>canonical✓<span class="w"> </span>base,disabled<span class="w"> </span>
core18<span class="w"> </span><span class="m">20200427</span><span class="w"> </span><span class="m">1754</span><span class="w"> </span>latest/stable<span class="w"> </span>canonical✓<span class="w"> </span>base<span class="w"> </span>
core20<span class="w"> </span><span class="m">20</span><span class="w"> </span><span class="m">634</span><span class="w"> </span>latest/stable<span class="w"> </span>canonical✓<span class="w"> </span>base<span class="w"> </span>
discord<span class="w"> </span><span class="m">0</span>.0.10<span class="w"> </span><span class="m">108</span><span class="w"> </span>latest/stable<span class="w"> </span>snapcrafters<span class="w"> </span>disabled<span class="w"> </span>
discord<span class="w"> </span><span class="m">0</span>.0.10<span class="w"> </span><span class="m">109</span><span class="w"> </span>latest/stable<span class="w"> </span>snapcrafters<span class="w"> </span>-<span class="w"> </span>
drawio<span class="w"> </span><span class="m">13</span>.3.1<span class="w"> </span><span class="m">37</span><span class="w"> </span>latest/stable<span class="w"> </span>jgraph✓<span class="w"> </span>disabled<span class="w"> </span>
drawio<span class="w"> </span><span class="m">13</span>.3.5<span class="w"> </span><span class="m">38</span><span class="w"> </span>latest/stable<span class="w"> </span>jgraph✓<span class="w"> </span>-<span class="w"> </span>
eclipse<span class="w"> </span><span class="m">2019</span>-03<span class="w"> </span><span class="m">40</span><span class="w"> </span>latest/stable<span class="w"> </span>snapcrafters<span class="w"> </span>disabled,classic
eclipse<span class="w"> </span><span class="m">2019</span>-12<span class="w"> </span><span class="m">48</span><span class="w"> </span>latest/stable<span class="w"> </span>snapcrafters<span class="w"> </span>classic
gitkraken<span class="w"> </span><span class="m">6</span>.6.0<span class="w"> </span><span class="m">154</span><span class="w"> </span>latest/stable<span class="w"> </span>gitkraken✓<span class="w"> </span>-
gitkraken<span class="w"> </span><span class="m">6</span>.5.4<span class="w"> </span><span class="m">153</span><span class="w"> </span>latest/stable<span class="w"> </span>gitkraken✓<span class="w"> </span>disabled
</pre></div>
<p>Si en la salida anterior se observa la ultima columna (Notes), se observa que hay muchas versiones en estado <code>disabled</code>. Así que en teoría se pueden borrar. El script que <a href="https://superuser.com/a/1330590/341719">se encuentra aca</a> a mi me funciono joya (ojo que avisan que según el idioma del sistema por ahí lo tienen que tocar).</p>
<p>Dejo una versión del script acá:</p>
<div class="code"><pre class="code literal-block"><span class="ch">#!/bin/bash</span>
<span class="c1"># Removes old revisions of snaps</span>
<span class="c1"># CLOSE ALL SNAPS BEFORE RUNNING THIS</span>
<span class="nb">set</span><span class="w"> </span>-eu
<span class="nv">LANG</span><span class="o">=</span>C<span class="w"> </span>snap<span class="w"> </span>list<span class="w"> </span>--all<span class="w"> </span><span class="p">|</span><span class="w"> </span>awk<span class="w"> </span><span class="s1">'/disabled/{print $1, $3}'</span><span class="w"> </span><span class="p">|</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="nb">read</span><span class="w"> </span>snapname<span class="w"> </span>revision<span class="p">;</span><span class="w"> </span><span class="k">do</span>
<span class="w"> </span>sudo<span class="w"> </span>snap<span class="w"> </span>remove<span class="w"> </span><span class="s2">"</span><span class="nv">$snapname</span><span class="s2">"</span><span class="w"> </span>--revision<span class="o">=</span><span class="s2">"</span><span class="nv">$revision</span><span class="s2">"</span>
<span class="w"> </span><span class="k">done</span>
</pre></div>
<p>También es una buena idea revisar programas ahí instalados y que no estés usando, y eliminarlos, por ejemplo, en mi caso había un par que no estaba usando y los elimine:</p>
<div class="code"><pre class="code literal-block">sudo<span class="w"> </span>snap<span class="w"> </span>remove<span class="w"> </span>krita<span class="w"> </span>gitkraken<span class="w"> </span>eclipse<span class="w"> </span>drawio<span class="w"> </span>bitwarden<span class="w"> </span>youtube-dl
</pre></div>
<p>Para este punto, y solo preocupándome por Snap, la situación estaba así:</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>df<span class="w"> </span>-h<span class="w"> </span>
Filesystem<span class="w"> </span>Size<span class="w"> </span>Used<span class="w"> </span>Avail<span class="w"> </span>Use%<span class="w"> </span>Mounted<span class="w"> </span>on
...
/dev/sda1<span class="w"> </span>38G<span class="w"> </span>27G<span class="w"> </span><span class="m">8</span>,5G<span class="w"> </span><span class="m">77</span>%<span class="w"> </span>/
...
</pre></div>
<p>Recupere alrededor de 3.5 Gb.</p>
<h3>Logs is everywhere</h3>
<p>El siguiente directorio que tenia bastante peso era el de logs. 4Gb de logs!!!!!</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>journalctl<span class="w"> </span>--disk-usage
Archived<span class="w"> </span>and<span class="w"> </span>active<span class="w"> </span>journals<span class="w"> </span>take<span class="w"> </span>up<span class="w"> </span><span class="m">3</span>.7G<span class="w"> </span><span class="k">in</span><span class="w"> </span>the<span class="w"> </span>file<span class="w"> </span>system.
</pre></div>
<p>El directorio principal de logs en un Ubuntu es <code>/var/log</code>, y dentro de dicho directorio, el journal (el log principal del sistema) era el que mas pesaba (casi el total). Ahí veo 2 problemas:</p>
<ul>
<li>Mala política de borrado de logs</li>
<li>Porque se están llenando tanto?</li>
</ul>
<p>Lo segundo es para pensarlo un poco e investigar, para el objetivo del post me voy a centrar en el primero punto.</p>
<h4>Política de borrado</h4>
<p>La rotación de logs es una tarea automática que hace el sistema. Básicamente va creando archivos nuevos para loguear los eventos mas actuales, y deja como históricos los viejos archivos. Para consultar estos registros, se puede usar el comando <code>journalctl</code>. No me voy a detener en este comando que daría para un post entero. Solo decir que una primer configuración a editar es el tamaño del log del sistema. Esto se hace desde <code>/etc/systemd/journald.conf</code>:</p>
<p>Como root, editar ese archivo, cambiando la linea:</p>
<div class="code"><pre class="code literal-block"><span class="c1">#SystemMaxUse=</span>
</pre></div>
<p>por</p>
<div class="code"><pre class="code literal-block"><span class="na">SystemMaxUse</span><span class="o">=</span><span class="s">100M</span>
</pre></div>
<p>Donde el valor después del signo igual, debería ser el tamaño que queremos que ocupe. En este caso, 100 Megas me parece un valor mas que razonable.</p>
<p>Para terminar de aplicar el cambio, hay que reiniciar el servicio:</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>sudo<span class="w"> </span>systemctl<span class="w"> </span>restart<span class="w"> </span>systemd-journald.service
$<span class="w"> </span>journalctl<span class="w"> </span>--disk-usage
Archived<span class="w"> </span>and<span class="w"> </span>active<span class="w"> </span>journals<span class="w"> </span>take<span class="w"> </span>up<span class="w"> </span><span class="m">104</span>.0M<span class="w"> </span><span class="k">in</span><span class="w"> </span>the<span class="w"> </span>file<span class="w"> </span>system.
</pre></div>
<p>Perfecto. Si volvemos a mirar el espacio en disco:</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>df<span class="w"> </span>-h<span class="w"> </span>
Filesystem<span class="w"> </span>Size<span class="w"> </span>Used<span class="w"> </span>Avail<span class="w"> </span>Use%<span class="w"> </span>Mounted<span class="w"> </span>on
...
/dev/sda1<span class="w"> </span>38G<span class="w"> </span>24G<span class="w"> </span>13G<span class="w"> </span><span class="m">66</span>%<span class="w"> </span>/
...
</pre></div>
<p>Perfecto. ¿Con que seguir?</p>
<h3>Cache de APT y Librerías sin uso</h3>
<p>APT es la herramienta para gestión de paquetes de Ubuntu. Es típico que en el uso, genere una cache importante, y que en muchos casos queden librerías que ya no se utilizan y pueden borrarse. En mi caso no va a aportar demasiado porque estos comandos los suelo ejecutar con cierta regularidad, pero hay 3 parámetros que son muy útiles y es aconsejable ejecutarlos con cierta regularidad:</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>sudo<span class="w"> </span>apt<span class="w"> </span>clean
$<span class="w"> </span>sudo<span class="w"> </span>apt<span class="w"> </span>autoclean
$<span class="w"> </span>sudo<span class="w"> </span>apt<span class="w"> </span>autoremove
</pre></div>
<p>En el ultimo caso, puede querer eliminar paquetes y nos va a preguntar si estamos seguros. En general, no es problemático eliminarlos (aunque si no se esta seguro, ese ultimo comando podría no ejecutarse).</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>df<span class="w"> </span>-h<span class="w"> </span>
Filesystem<span class="w"> </span>Size<span class="w"> </span>Used<span class="w"> </span>Avail<span class="w"> </span>Use%<span class="w"> </span>Mounted<span class="w"> </span>on
...
/dev/sda1<span class="w"> </span>38G<span class="w"> </span>23G<span class="w"> </span>13G<span class="w"> </span><span class="m">65</span>%<span class="w"> </span>/
...
</pre></div>
<p>En mi caso no ayudó mucho, pero puede ser útil este paso.</p>
<h3>Directorio /usr</h3>
<p>Si no esta pasando nada raro, y excluyendo el <code>/home</code>, el directorio <code>/usr</code> debería ser uno de los directorios con mas "peso" en el gráfico de <code>Baobab</code>. Es normal y esperable, ya que todas las aplicaciones y librerías del sistema se encuentra allí.</p>
<p>En general no es aconsejable tocar ningún archivo de allí. En caso de tener alguna anomalía, es probable que pueda limpiarse eliminando el paquete o programa que la esta causando, pero no se aconseja eliminar archivos o sub directorios de forma directa en este caso.</p>
<h3>BleachBit</h3>
<p>Para terminar el post, es interesante mencionar esta GUI, llamada <a href="https://www.bleachbit.org/">BleachBit</a>, que es lo mas parecido a CCleaner que tenemos los usuarios de Linux.</p>
<p>Tiene una forma de eliminar cosas del sistema (usar con cuidado) pero al estar centrado en el usuario, nos haría ganar espacio en el <code>/home</code>. En caso de necesitarlo, es una buena opción.</p>
<p>Luego de borrar algunas cosas, la cantidad de disco ocupada finalmente fue la siguiente:</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>df<span class="w"> </span>-h<span class="w"> </span>
Filesystem<span class="w"> </span>Size<span class="w"> </span>Used<span class="w"> </span>Avail<span class="w"> </span>Use%<span class="w"> </span>Mounted<span class="w"> </span>on
...
/dev/sda1<span class="w"> </span>38G<span class="w"> </span>23G<span class="w"> </span>13G<span class="w"> </span><span class="m">64</span>%<span class="w"> </span>/
...
</pre></div>
<p>Para mi suficiente, y no me llevo mucho tiempo. Espero que algo de esto les sirva.</p></description><category>disk usage</category><category>free space</category><guid>http://tomasdelvechio.github.io/blog/borrando-cosas-inutiles-de-ubuntu-version-2020/</guid><pubDate>Fri, 03 Jul 2020 21:45:32 GMT</pubDate></item><item><title>Volumenes de Docker y Discos USB Externos</title><link>http://tomasdelvechio.github.io/blog/volumenes-de-docker-y-discos-usb-externos/</link><dc:creator>Tomás Delvechio</dc:creator><description><p>Estoy levantando un media server en mi maquina, y aprovecho que hay mucho despliegue usando contenedores Docker.</p>
<h3>El Problema</h3>
<p>Como tengo todo mi contenido multimedia en un disco USB externo, aproveche y le vincule los volumenes al contenedor directamente a los paths del disco.</p>
<p>Entonces, los volumenes quedaban mas o menos como sigue. Uso la notación que pone Ubuntu al montar los discos externos:</p>
<div class="code"><pre class="code literal-block">/media/tomas/Elements/series:/series
/media/tomas/Elements/peliculas:/peliculas
....
</pre></div>
<p>De lado derecho es el path del directorio en el host. Del lado izquierdo es el directorio dentro del contenedor.</p>
<p>Como esto se hace en un equipo particular, eventualmente se reinicia (o se apaga y prende). Esto me genero 1 gran problema.</p>
<p>El servicio de Docker inicia durante el proceso de boot del equipo. Sin embargo, Ubuntu monta el disco al momento en el que el usuario inicia sesión.</p>
<p>Esto genera que Docker intente buscar los directorios de los volumenes en el Host, y al no encontrarlos, los crea. Este comportamiento se conoce como propagación y esta documentado<a href="https://docs.docker.com/storage/#tips-for-using-bind-mounts-or-volumes">1</a>.</p>
<p>Sin embargo, sucedia que al iniciar sesión, Ubuntu intentaba montar en el directorio <code>/media/tomas/Elements</code>, pero debido a que este ya existia (dado que Docker lo creaba por el mecanismo de propagación), Ubuntu monta el disco en <code>/media/tomas/Elements1</code>.</p>
<p>El efecto de esto es que perdia acceso a los directorios dentro del contenedor.</p>
<h3>La idea de solución</h3>
<p>Buscando ayuda, lo que me sugieren y que es la solución es cambiar el orden del booteo, para que Docker inicie despues del proceso de mount. Esto no es tan facil como puede parecer. Requiere:</p>
<ul>
<li>Buscar la unit del servicio de mount</li>
<li>Buscar la unit de systemd del servicio de Docker</li>
<li>Agregar el servicio de mount como dependencia de Docker</li>
<li>Hacer que el mount del disco se haga al inicio y no al iniciar sesion</li>
<li>Probarlo</li>
</ul>
<p>A esa secuencia de pasos llegue luego de un poco de prueba y error.</p>
<p>A continuación documentaré los pasos que tuve que hacer</p>
<h3>La solución</h3>
<p>Aclaración del setup de mi equipo: Tengo una notebook corriendo Ubuntu 18.04, que ejecuta Systemd para gestionar el proceso de arranque del Sistema Operativo. Desconozco si en otras distros esto puede variar.</p>
<h4>Nombre del servicio de mount en Systemd</h4>
<p>Despues de buscar un rato, descubrí que el servicio que maneja el mount al inicio del sistema se llama <code>udisks2.service</code>. Una forma de ver los servicios en systemd es:</p>
<div class="code"><pre class="code literal-block">systemctl<span class="w"> </span>--type<span class="o">=</span>service
</pre></div>
<h4>Agregar dependencia de este servicio al inicio de Docker</h4>
<p>En este paso, necesitamos que docker no arranque hasta que se termine el proceso <code>udisks2.service</code>.</p>
<p>En mi caso, la configuración de Systemd de Docker esta en <code>/lib/systemd/system/docker.service</code> (que tiene ademas un link simbolico en <code>/etc/systemd/system/multi-user.target.wants/docker.service</code>).</p>
<p>Alli dentro, busque la linea que contiene lo siguiente</p>
<div class="code"><pre class="code literal-block"><span class="na">After</span><span class="o">=</span><span class="s">network-online.target firewalld.service containerd.service</span>
</pre></div>
<p>Y agregue al final de la misma (con separación de un espacio)</p>
<div class="code"><pre class="code literal-block"><span class="na">After</span><span class="o">=</span><span class="s">network-online.target firewalld.service containerd.service udisks2.service</span>
</pre></div>
<p>Luego guarde y cerre el archivo.</p>
<p>Para que systemd tome este cambio, tuve que ejecutar:</p>
<div class="code"><pre class="code literal-block">sudo<span class="w"> </span>systemctl<span class="w"> </span>daemon-reload
</pre></div>
<h4>Montar el disco al inicio del sistema y no de la sesión</h4>
<p>A continuación, tuve que configurar para que el disco se monte al inicio del sistema. Para ello, voy tomar el camino de hacerlo via interfaz gráfica y no por consola.</p>
<p>Para ello, usé una app que se busca en Gnome como <code>Disks</code>:</p>
<p><img alt="Disks Gnome App" src="http://tomasdelvechio.github.io/img/blog/2020/figure1.png" title="Disks Gnome App"></p>
<p>Una vez allí, elegimos el disco en cuestion y entramos a sus "opciones de montaje":</p>
<p><img alt="Select Disk Mount Options" src="http://tomasdelvechio.github.io/img/blog/2020/Selection_024.png" title="Select Disk Mount Options"></p>
<p>En esta nueva pantalla, se indicaron las siguientes cosas:</p>
<ol>
<li>Que no se use las configuraciones por defecto para la sesión</li>
<li>Que se monte al arranque del sistema</li>
<li>Que se identifique con el UUID (Esta ultima es optativa, pero era la que me pareció que dejaba el nombre mas apropiado al directorio donde se iba a montar)</li>
</ol>
<p><img alt="Mount Options Window" src="http://tomasdelvechio.github.io/img/blog/2020/Selection_026.png" title="Mount Options Window"></p>
<h4>Cambiar los paths en los volumenes</h4>
<p>Una vez terminado esto, pude cambiar los paths de los volumenes del lado del host, dejandolos como sigue:</p>
<div class="code"><pre class="code literal-block">/mnt/9A567...0FD/series:/series
/mnt/9A567...0FD/peliculas:/peliculas
....
</pre></div>
<p>Probé reiniciar y todo funciono perfecto.</p></description><category>deploy</category><category>docker</category><category>storage</category><guid>http://tomasdelvechio.github.io/blog/volumenes-de-docker-y-discos-usb-externos/</guid><pubDate>Tue, 23 Jun 2020 00:30:25 GMT</pubDate></item><item><title>Introducción a Spark</title><link>http://tomasdelvechio.github.io/blog/introduccion-a-spark/</link><dc:creator>Tomás Delvechio</dc:creator><description><p>Apache Spark es un framework de procesamiento muy de moda en entornos de procesamiento para Big Data, IoT y Machine Learning.</p>
<h3>Pipeline</h3>
<p>El pipeline de trabajo en spark es conocido como <strong>DAG</strong> (Directed Acyclic Graph) y se basa en armar un grafo de trabajo donde las tareas se sucedan unas a otras segun se establezca.</p>
<p>Ademas, propone que muchas operaciones que en MapReduce involucran operaciones de entrada salida a disco, se hagan en memoria principal, lo que genera un rendimiento mayor comparado con su predecesor.</p>
<h3>Lenguajes</h3>
<p>Spark acepta Java, Scala, Python y R, aunque no todos estan soportados de la misma forma y de manera completa.</p>
<h3>Otras herramientas</h3>
<p>Spark ofrece ademas una consola interactiva para Scala, Python y R con capacidades <strong>REPL</strong> (Read, Evaluate, Print y Loop).</p>
<p>Ademas del core, Spark ofrece algunas librerias para tareas comunes en el ambito de big data: <em>SparkSQL</em>, <em>Spark Streaming</em>, <em>Spark MLlib</em> y <em>Spark GraphX</em>.</p>
<p>Es posible vincular Spark a una Notebook de Jupyter y trabajar desde la interfaz de esta herramienta para hacer pruebas. (TODO: Agregar link a la notebook).</p>
<h3>Arquitectura</h3>
<p>Una aplicación Spark consta de un master, que dependiendo de la plataforma puede ser <em>Spark Master</em> (standalone) <em>Mesos Master</em> (Apache Mesos) o <em>ResourceManager</em> (Apache Hadoop - YARN). Luego un proceso driver que se conoce como SparkContext y por ultimo de los workers.</p></description><category>big data</category><category>distributed systems</category><category>programming</category><category>spark</category><guid>http://tomasdelvechio.github.io/blog/introduccion-a-spark/</guid><pubDate>Sat, 08 Sep 2018 18:15:18 GMT</pubDate></item><item><title>Automatizando deploy con Helm</title><link>http://tomasdelvechio.github.io/blog/automatizando-deploy-con-helm/</link><dc:creator>Tomás Delvechio</dc:creator><description><h2>Automatizando Deploy con Helm</h2>
<ol>
<li>Tener un cluster kubernetes andando y corriendo (por ejemplo minikube)</li>
</ol>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>minikube<span class="w"> </span>start
</pre></div>
<ol>
<li>Instalar Helm y Tiller</li>
</ol>
<p>Tiller es un servidor in cluster de helm (Se instala en el cluster). Para mas detalle, ver la <a href="https://docs.helm.sh/using_helm/#quickstart">doc oficial</a>.</p>
<div class="code"><pre class="code literal-block">$<span class="w"> </span>helm<span class="w"> </span>init
Creating<span class="w"> </span>/home/tomas/.helm
Creating<span class="w"> </span>/home/tomas/.helm/repository
Creating<span class="w"> </span>/home/tomas/.helm/repository/cache
Creating<span class="w"> </span>/home/tomas/.helm/repository/local
Creating<span class="w"> </span>/home/tomas/.helm/plugins
Creating<span class="w"> </span>/home/tomas/.helm/starters
Creating<span class="w"> </span>/home/tomas/.helm/cache/archive
Creating<span class="w"> </span>/home/tomas/.helm/repository/repositories.yaml
Adding<span class="w"> </span>stable<span class="w"> </span>repo<span class="w"> </span>with<span class="w"> </span>URL:<span class="w"> </span>https://kubernetes-charts.storage.googleapis.com
Adding<span class="w"> </span><span class="nb">local</span><span class="w"> </span>repo<span class="w"> </span>with<span class="w"> </span>URL:<span class="w"> </span>http://127.0.0.1:8879/charts
<span class="nv">$HELM_HOME</span><span class="w"> </span>has<span class="w"> </span>been<span class="w"> </span>configured<span class="w"> </span>at<span class="w"> </span>/home/tomas/.helm.
Tiller<span class="w"> </span><span class="o">(</span>the<span class="w"> </span>Helm<span class="w"> </span>server-side<span class="w"> </span>component<span class="o">)</span><span class="w"> </span>has<span class="w"> </span>been<span class="w"> </span>installed<span class="w"> </span>into<span class="w"> </span>your<span class="w"> </span>Kubernetes<span class="w"> </span>Cluster.
Please<span class="w"> </span>note:<span class="w"> </span>by<span class="w"> </span>default,<span class="w"> </span>Tiller<span class="w"> </span>is<span class="w"> </span>deployed<span class="w"> </span>with<span class="w"> </span>an<span class="w"> </span>insecure<span class="w"> </span><span class="s1">'allow unauthenticated users'</span><span class="w"> </span>policy.
For<span class="w"> </span>more<span class="w"> </span>information<span class="w"> </span>on<span class="w"> </span>securing<span class="w"> </span>your<span class="w"> </span>installation<span class="w"> </span>see:<span class="w"> </span>https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy<span class="w"> </span>Helming!
</pre></div>
<ol>
<li>Actualizar Respositorio de Charts</li>
</ol>
<p>Los programas que se instalan via Helm se llaman Charts. Antes de instalar un chart, se debe actualizar la lista de charts disponibles</p>
<div class="code"><pre class="code literal-block">helm<span class="w"> </span>repo<span class="w"> </span>update
Hang<span class="w"> </span>tight<span class="w"> </span><span class="k">while</span><span class="w"> </span>we<span class="w"> </span>grab<span class="w"> </span>the<span class="w"> </span>latest<span class="w"> </span>from<span class="w"> </span>your<span class="w"> </span>chart<span class="w"> </span>repositories...
...Skip<span class="w"> </span><span class="nb">local</span><span class="w"> </span>chart<span class="w"> </span>repository
...Successfully<span class="w"> </span>got<span class="w"> </span>an<span class="w"> </span>update<span class="w"> </span>from<span class="w"> </span>the<span class="w"> </span><span class="s2">"stable"</span><span class="w"> </span>chart<span class="w"> </span>repository
Update<span class="w"> </span>Complete.<span class="w"> </span>⎈<span class="w"> </span>Happy<span class="w"> </span>Helming!⎈
</pre></div></description><guid>http://tomasdelvechio.github.io/blog/automatizando-deploy-con-helm/</guid><pubDate>Sat, 28 Apr 2018 19:22:28 GMT</pubDate></item><item><title>Curso de Git</title><link>http://tomasdelvechio.github.io/blog/curso-de-git/</link><dc:creator>Tomás Delvechio</dc:creator><description><p>El sabado 07 de Abril de 2018 estuvimos haciendo un taller de GIT en la UNLu. </p>
<p>Fue una experiencia muy interesante. Esperabamos muy poca gente y sin embargo el aula se lleno durante las 3 horas y media que duró el taller. Para algunos usar Git es algo tan omnipresente, que a veces cometemos el error de creer que <em>es facil</em> o que <em>todos lo usan</em>.</p>
<p>Durante mas de 3 horas, 38 personas con conocimientos muy diverso respecto a computación estuvieron aprendiendo como usar Git, surgieron dudas muy interesantes y creo que todos nos llevamos algo nuevo.</p>
<p>El material que se utilizó esta <a href="https://docs.google.com/presentation/d/1LAns3-PGIOVf2KiMyw1sS4Uy7LaGV-bUPlJDQ22gDrc/edit?usp=sharing">disponible aca</a>.</p></description><category>charlas</category><category>git</category><category>vcs</category><guid>http://tomasdelvechio.github.io/blog/curso-de-git/</guid><pubDate>Sat, 14 Apr 2018 15:09:54 GMT</pubDate></item><item><title>Kompose: Migrar tus archivos Docker Compose a Kubernetes</title><link>http://tomasdelvechio.github.io/blog/kompose-migrar-tus-archivos-docker-compose-a-kubernetes/</link><dc:creator>Tomás Delvechio</dc:creator><description><p>En un <a href="http://tomasdelvechio.github.io/blog/algunas-notas-sobre-kubernetes">post anterior</a> desplegamos un
cluster de pruebas con contenedores usando <a href="https://kubernetes.io">Kubernetes</a> y
<a href="https://github.com/kubernetes/minikube">Minikube</a>. Este esquema resulta util
cuando lo que se quiere es desplegar y escalar un contenedor.</p>
<p>Sin embargo, muchas aplicaciones Docker comenzaron a orquestarse utilizando mas
de un contenedor para hacer funcionar la misma. Por ejemplo, un contenedor con
un web server, otro para la base de datos relacional, y un tercero para una base
nosql.</p>
<p>Para este tipo de esquemas surgio docker-compose. Permitia de forma sencilla
administrar la configuracion varios contenedores en simultaneo cuya imagen
origen eran diferentes.</p>
<p>Para lograr un comportamiento similar con Kubernetes, existe la herramienta
<a href="http://kompose.io">Kompose</a>. Kompose nos permite tomar el contenido de un
archivo docker-compose.yml y realizar las mismas acciones, pero utilizando
Kubernetes.</p>
<h3>Uso basico</h3>
<p>Como siempre, nos salteamos la parte de instalacion dado que es sencilla y se
encuentra documentada en la <a href="http://kompose.io/installation/">pagina oficial</a>.</p>
<p>Kompose es muy sencilla de utilizar. Puede hacer 2 tareas principales:</p>
<ul>
<li>Tomar un archivo docker-compose.yml y convertirlo a archivos de configuracion
de Kubernetes.</li>
<li>Ejecutar el archivo docker-compose.yml directamente sin generar nuevos
archivos.</li>
</ul>
<p>La forma mas sencilla de utilizar es la segunda, dado que contamos con un
proyecto con un archivo docker-compose.yml o en general conocemos ese formato
bastante. Entonces se ejecuta</p>
<div class="code"><pre class="code literal-block">kompose up
</pre></div>
<p>y eso ya levanta con Kubernetes todos los contenedores indicados.</p>
<h3>Troubleshooting</h3>
<div class="code"><pre class="code literal-block">kompose up
WARN Unsupported root level volumes key - ignoring
WARN Unsupported depends_on key - ignoring
WARN Volume mount on the host "." isn't supported - ignoring path on the host
</pre></div></description><category>cluster</category><category>containers</category><category>deploy</category><category>devops</category><category>kompose</category><category>kubernetes</category><category>orchestration</category><guid>http://tomasdelvechio.github.io/blog/kompose-migrar-tus-archivos-docker-compose-a-kubernetes/</guid><pubDate>Sun, 04 Feb 2018 19:28:51 GMT</pubDate></item><item><title>Configuración para Sublime Text 3</title><link>http://tomasdelvechio.github.io/blog/configuracion-para-sublime-text-3/</link><dc:creator>Tomás Delvechio</dc:creator><description><p><img alt="Logo Sublime Text 3" src="http://tomasdelvechio.github.io/img/blog/2018/logo-sublime-text-3.png" title="Logo de Sublime Text 3"></p>
<p>Soy usuario activo de Sublime Text 3. Para proyectos pequeños o creacion de
scripts, es el editor con el que me siento mas comodo trabajando.</p>
<p>La configuración default que tiene visual tiene algunos problemas. Lo primero
que hago al instalar Sublime es editar un par de estas configuraciones, y dejo
aca el archivo de configuración tal como lo tengo actualmente</p>
<div class="code"><pre class="code literal-block"><span class="p">{</span>
<span class="w"> </span><span class="s">"bold_folder_labels"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="s">"caret_style"</span><span class="p">:</span><span class="w"> </span><span class="s">"phase"</span><span class="p">,</span>
<span class="w"> </span><span class="s">"draw_white_space"</span><span class="p">:</span><span class="w"> </span><span class="s">"all"</span><span class="p">,</span>
<span class="w"> </span><span class="s">"fade_fold_buttons"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
<span class="w"> </span><span class="s">"font_face"</span><span class="p">:</span><span class="w"> </span><span class="s">"Inconsolata"</span><span class="p">,</span>
<span class="w"> </span><span class="s">"font_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">12</span><span class="p">,</span>
<span class="w"> </span><span class="s">"highlight_line"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="s">"highlight_modified_tabs"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w"> </span><span class="s">"ignored_packages"</span><span class="p">:</span>
<span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="s">"Vintage"</span>
<span class="w"> </span><span class="p">],</span>
<span class="w"> </span><span class="s">"line_padding_bottom"</span><span class="p">:</span><span class="w"> </span><span class="m m-Double">5.5</span><span class="p">,</span>
<span class="w"> </span><span class="s">"line_padding_top"</span><span class="p">:</span><span class="w"> </span><span class="m m-Double">5.5</span><span class="p">,</span>
<span class="w"> </span><span class="s">"rulers"</span><span class="p">:</span>
<span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="mi">80</span><span class="p">,</span>
<span class="w"> </span><span class="mi">120</span>
<span class="w"> </span><span class="p">],</span>
<span class="w"> </span><span class="s">"tab_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span>
<span class="w"> </span><span class="s">"trim_trailing_white_space_on_save"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span>
<span class="p">}</span>
</pre></div>
<h4>Sobre las fuentes</h4>
<p>La configuración <code>font_face</code> indica la fuente utilizada. Inconsolata no es una
fuente que venga instalada por default. Para instalarla en Ubuntu, por ejemplo:</p>
<div class="code"><pre class="code literal-block">sudo apt install fonts-inconsolata
</pre></div>
<h3>Plugines</h3>
<p>Ademas de la configuración visual, Sublime tiene una amplia cantidad de plugins.</p>
<p>Aca va un listado de los que actualmente estoy utilizando:</p>
<ul>
<li>All Autocomplete</li>
<li>BracketHighlighter</li>
<li>DocBlockr</li>
<li>GitGutter</li>
<li>Laravel Blade Highlighter</li>
<li>PHP Companion</li>
<li>SublimeCodeIntel</li>
<li>SublimeLinter-php</li>
</ul>
<h3>Temas</h3>
<p>Existen muchisimos temas para Sublime. Puntualmente estoy en estos momentos
utilizando <a href="https://github.com/kenwheeler/brogrammer-theme">Brogrammer</a>.</p></description><category>dev</category><category>programming</category><category>sublime</category><category>tools</category><guid>http://tomasdelvechio.github.io/blog/configuracion-para-sublime-text-3/</guid><pubDate>Sat, 03 Feb 2018 15:15:40 GMT</pubDate></item></channel></rss>