skip to navigation
skip to content

Blografia.net

Last update: December 13, 2024 12:00 PM

December 09, 2024


Gwolf

Some tips for those who still administer Drupal7-based sites

A bit of history: Drupal at my workplace (and in Debian)

My main day-to-day responsability in my workplace is, and has been for 20 years, to take care of the network infrastructure for UNAM’s Economics Research Institute. One of the most visible parts of this responsability is to ensure we have a working Web presence, and that it caters for the needs of our academic community.

I joined the Institute in January 2005. Back then, our designer pushed static versions of our webpage, completely built in her computer. This was standard practice at the time, and lasted through some redesigns, but I soon started advocating for the adoption of a Content Management System. After evaluating some alternatives, I recommended adopting Drupal. It took us quite a bit to do the change: even though I clearly recall starting work toward adopting it as early as 2006, according to the Internet Archive, we switched to a Drupal-backed site around June 2010. We started using it somewhere in the version 6’s lifecycle.

As for my Debian work, by late 2012 I started getting involved in the maintenance of the drupal7 package, and by April 2013 I became its primary maintainer. I kept the drupal7 package up to date in Debian until ≈2018; the supported build methods for Drupal 8 are not compatible with Debian (mainly, bundling third-party libraries and updating them without coordination with the rest of the ecosystem), so towards the end of 2016, I announced I would not package Drupal 8 for Debian.

By March 2016, we migrated our main page to Drupal 7. By then, we already had several other sites for our academics’ projects, but my narrative follows our main Web site. I did manage to migrate several Drupal 6 (D6) sites to Drupal 7 (D7); it was quite involved process, never transparent to the user, and we did have the backlash of long downtimes (or partial downtimes, with sites half-available only) with many of our users. For our main site, we took the opportunity to do a complete redesign and deployed a fully new site.

You might note that March 2016 is after the release of D8 (November 2015). I don’t recall many of the specifics for this decision, but if I’m not mistaken, building the new site was a several months long process — not only for the technical work of setting it up, but for the legwork of getting all of the needed information from the different areas that need to be represented in the Institute. Not only that: Drupal sites often include tens of contributed themes and modules; the technological shift the project underwent between its 7 and 8 releases was too deep, and modules took a long time (if at all — many themes and modules were outright dumped) to become available for the new release.

Naturally, the Drupal Foundation wanted to evolve and deprecate the old codebase. But the pain to migrate from D7 to D8 is too big, and many sites have remained under version 7 — Eight years after D8’s release, almost 40% of Drupal installs are for version 7, and a similar proportion runs a currently-supported release (10 or 11). And while the Drupal Foundation made a great job at providing very-long-term support for D7, I understand the burden is becoming too much, so close to a year ago (and after pushing several times the D7, they finally announced support will finish this upcoming January 5.

Drupal 7 must go!

I found the following usage graphs quite interesting: the usage statistics for all Drupal versions follows a very positive slope, peaking around 2014 during the best years of D7, and somewhat stagnating afterwards, staying since 2015 at the 25000–28000 sites mark (I’m very tempted to copy the graphs, but builtwith’s terms of use are very clear in not allowing it). There is a sharp drop in the last year — I attribute it to the people that are leaving D7 for other technologies after its end-of-life announcement. This becomes clearer looking only at D7’s usage statistics: D7 peaks at ≈15000 installs in 2016 stays there for close to 5 years, and has a sharp drop to under 7500 sites in the span of one year.

D8 has a more “regular” rise, peak and fall peaking at ~8500 between 2020 and 2021, and down to close to 2500 for some months already; D9 has a very brief peak of almost 9000 sites in 2023 and is now close to half of it. Currently, the Drupal king appears to be D10, still on a positive slope and with over 9000 sites. Drupal 11 is still just a blip in builtwith’s radar, with… 3 registered sites as of September 2024 :-Þ

After writing this last paragraph, I came across the statistics found in the Drupal webpage; the methodology for acquiring its data is completely different: while builtwith’s methodology is their trade secret, you can read more about how Drupal’s data is gathered (and agree or disagree with it 😉, but at least you have a page detailing 12 years so far of reported data, producing the following graph (which can be shared under the CC BY-SA license 😃):

Drupal usage statistics by version 2013–2024

This graph is disgregated into minor versions, and I don’t want to come up with yet another graph for it 😉 but it supports (most of) the narrative I presented above… although I do miss the recent drop builtwith reported in D7’s numbers!

And what about Backdrop?

During the D8 release cycle, a group of Drupal developers were not happy with the depth of the architectural changes that were being adopted, particularly the transition to the Symfony PHP component framework, and forked the D7 codebase to create the Backdrop CMS, a modern version of Drupal, without dropping the known and tested architecture it had. The Backdrop developers keep working closely together with the Drupal community, and although its usage numbers are way smaller than Drupal’s, seems to be sustainable and lively. Of course, as I presented their numbers in the previous section, you can see Backdrop’s numbers in builtwith… are way, way lower.

I have found it to be a very warm and welcoming community, eager to receive new members. And, thanks to its contributed D2B Migrate module, I found it is quite easy to migrate a live site from Drupal 7 to Backdrop.

Migration by playbook!

So… Well, I’m an academic. And (if it’s not obvious to you after reading so far 😉), one of the things I must do in my job is to write. So I decided to write an article to invite my colleagues to consider Backdrop for their D7 sites in Cuadernos Técnicos Universitarios de la DGTIC, a young journal in our university for showcasing technical academical work. And now that my article got accepted and published, I’m happy to share it with you — of course, if you can read Spanish 😉 But anyway…

Given I have several sites to migrate, and that I’m trying to get my colleagues to follow suite, I decided to automatize the migration by writing an Ansible playbook to do the heavy lifting. Of course, the playbook’s users will probably need to tweak it a bit to their personal needs. I’m also far from an Ansible expert, so I’m sure there is ample room fo improvement in my style.

But it works. Quite well, I must add.

But with this size of database…

I did stumble across a big pebble, though. I am working on the migration of one of my users’ sites, and found that its database is… huge. I checked the mysqldump output, and it got me close to 3GB of data. And given the D2B_migrate is meant to work via a Web interface (my playbook works around it by using a client I wrote with Perl’s WWW::Mechanize), I repeatedly stumbled with PHP’s maximum POST size, maximum upload size, maximum memory size…

I asked for help in Backdrop’s Zulip chat site, and my attention was taken off fixing PHP to something more obvious: Why is the database so large? So I took a quick look at the database (or rather: my first look was at the database server’s filesystem usage). MariaDB stores each table as a separate file on disk, so I looked for the nine largest tables:

# ls -lhS|head
total 3.8G
-rw-rw---- 1 mysql mysql 2.4G Dec 10 12:09 accesslog.ibd
-rw-rw---- 1 mysql mysql 224M Dec  2 16:43 search_index.ibd
-rw-rw---- 1 mysql mysql 220M Dec 10 12:09 watchdog.ibd
-rw-rw---- 1 mysql mysql 148M Dec  6 14:45 cache_field.ibd
-rw-rw---- 1 mysql mysql  92M Dec  9 05:08 aggregator_item.ibd
-rw-rw---- 1 mysql mysql  80M Dec 10 12:15 cache_path.ibd
-rw-rw---- 1 mysql mysql  72M Dec  2 16:39 search_dataset.ibd
-rw-rw---- 1 mysql mysql  68M Dec  2 13:16 field_revision_field_idea_principal_articulo.ibd
-rw-rw---- 1 mysql mysql  60M Dec  9 13:19 cache_menu.ibd

A single table, the access log, is over 2.4GB long. The three following tables are, cache tables. I can perfectly live without their data in our new site! But I don’t want to touch the slightest bit of this site until I’m satisfied with the migration process, so I found a way to exclude those tables in a non-destructive way: given D2B_migrate works with a mysqldump output, and given that mysqldump locks each table before starting to modify it and unlocks it after its job is done, I can just do the following:

$ perl -e '$output = 1; while (<>) { $output=0 if /^LOCK TABLES `(accesslog|search_index|watchdog|cache_field|cache_path)`/; $output=1 if /^UNLOCK TABLES/; print if $output}' < /tmp/d7_backup.sql  > /tmp/d7_backup.eviscerated.sql; ls -hl /tmp/d7_backup.sql /tmp/d7_backup.eviscerated.sql
-rw-rw-r-- 1 gwolf gwolf 216M Dec 10 12:22 /tmp/d7_backup.eviscerated.sql
-rw------- 1 gwolf gwolf 2.1G Dec  6 18:14 /tmp/d7_backup.sql

Five seconds later, I’m done! The database is now a tenth of its size, and D2B_migrate is happy to take it. And I’m a big step closer to finishing my reliance on (this bit of) legacy code for my highly-visible sites 😃

December 09, 2024 07:55 PM


Victor Martínez

La bici y yo…

Hace un rato que no andaba en bici, bueno no tanto cuando empezamos a salir después del confinamiento, visitamos más de una vez el parque ecológico de Xochimilco y ahí rentamos bicis, por supuesto la calidad de las mismas varía y el mantenimiento de las mismas también, pero el paseo bien lo vale… haciendo memoria la vez anterior que salí en bici fue en una que dejaron como pago en el negocio ya hace más tiempo y que tenia varios detalles y llevaba meses empolvándose en el garaje, antes de eso en 2010 rente una. Y aunque una amiga tiene al menos desde antes del confinamiento que me contaba del paseo ciclista dominical y lo bien que se pone, que no lo conocía, hasta este año, pero me estoy adelantando.

Este año los reyes trajeron a los chicos sus respectivas bicis, una rodada 26 de velocidades, para el mayor y una rodada 24 sin velocidades para el menor, el mayor no pelo la misma y no le emociono ni tantito el menos le gusto mucho y a sugerencia de mi mejor parte empezamos a ir en bici a la natación, primero el chico arrastrando los pies, luego apoyándolo del asiento trasero y por supuesto apoyado de ruedas entrenadoras, para ese momento ya había yo agarrado la R26 que no había visto más acción que el día que llegó y que hubo que ponerle los pedales para el lado correcto liberar el descarrilador y salir a darle la vuelta a la manzana y encontrar que los cambios no entraban bien… y que cuando me la pasó mi hijo para que le mostrara como se usaban los cambios, el descarrilador/desviador (que mucho después aprendí así se llama) trasero se desarmo, como pude recupere todas las piezas, pasé esa tarde armándolo como pude y dicho sea de paso lo puse más o menos al revés.

Como escribí líneas arriba las idas a la natación se comenzaron a hacer la costumbre del sábado por la distancia, pero por la forma en que había arreglado la bici a cada rato se le salía la cadena o se atoraban aún cuando no le moviera a las velocidades o más bien porque se quedaba en el garaje y en la semana todo mundo jugaba con las manijas de las velocidades ya fuera para moverlas de lugar o para pasar…

Por supuesto mi vieja bomba balonera fue un poco insuficiente para estar inflando las llantas cuando se desinflaban por lo que compre una económica, ya tenía unas llaves españolas estándar y compre unas milimétricas para los frenos, igual ya tenía unas llaves Allen estándar que sirvieron para ajustar el volante, pero que requirió milimétricas para los frenos aprendí a la mala ajustar los frenos de ambas bicis.

La ida y regreso a la natación en bici, se convirtió en una bonita tradición familiar, un par de veces pudimos meter las bicis en la sala de espera, pero pronto tuvimos que comprar un candado para dejarlas en un poste de CFE.

Un día que me hartó el show de la cadena y regrese lleno de grasa de la misma, me puse a buscar una foto de como debería ir la pieza de la biela porque ni siquiera las velocidades podía usar y después de ver un par de videos no tenía ni idea, por supuesto mucho tiempo atrás ya me habían dicho por acá que la llevara al mecánico para que le arreglaran lo que tuvieran que hacer, en las fotos y video no me quedaba claro cómo iba la pieza, por lo que fui a una tienda ver más o menos como estaba y sorpresa venía amarrada con ganchitos, pero poniendo atención en la calle note el problema, estaba prácticamente la cadena pasando al revés de como debía ir, desarmarla y colocar el descarrilado en la posición correcta me llevo dos tardes, ya que es incomodo de trabajar en el mejor de los casos con la bici volteada, finalmente quedó y pude hacer 3 de los cinco cambios traseros y dos de los tres delanteros…

Por supuesto el año avanzó y supongo por el hotsale o el verano o la semana siguiente alguna cosa fuimos a hacer a una plaza y de mirón en Sears me llevé dos sorpresas, la primera que una bici de ahí la más barata andaba en los 30 mil pesos y que tenía 15+5% de descuento, que tenía frenos de disco y desviador Shimano que según el vendedor era muy bueno, por supuesto no estaba en mi presupuesto comprar una bici de ese precio… pero me dejó con la espinita de los frenos de disco y el desviador, especialmente porque mencionó que se podían adquirir las piezas sueltas, los frenos de disco sonaban muy bien, pero al investigar especialmente en Youtube, resulta que requieren que la bici tenga las partes para montarlos, cosa que no tengo, el descarrilador por otra parte según su propio manual si se podía poner, así que 198 pesos después ya estaba pasando una tarde nuevamente aprendiendo cómo cambiar el descarrilador, que no es para ese modelo de bici, hay esencialmente dos tipos y se lo puse como pude, obteniendo mucho mejores cambios que con el que venia de fabrica.

En agosto comencé a ir al paseo ciclista dominical y note lo poco que había hecho subida, la primera ocasión que subí viaducto no pude terminar la subida y me tuve que bajar para caminar, a la siguiente en el regreso regrese por la línea 12 y para no hacer el transbordo de Altalilco a la línea 8 caminando se me hizo fácil salir a Tláhuac, tomar Ermita y regresar por ahí, sin tomar en cuenta que despuesito de eso está el cerro de la Estrella y es una subida laarga, con esas ocasiones note que los cambios no estaban entrando bien ni cuando los necesitaba, pero ahí iban.

No hace mucho note que los pedales y la estrella como que bailaban y que algo rechinaba, buscando en videos de nuevo encontré que podía ser un problema relativamente sencillo pero latoso de arreglar… dicho sea de paso la bici del hijo de un amiga tiene desgastada la llanta trasera, no la ha usado mucho pero un fin de semana, pensé en que sería muy buena idea probar sacarla e ir a conseguir una a la tienda de bicicletas que resulta que tengo muy cerca o ir un poco más lejos a dos ferreterías enormes que además venden productos para bicicleta y por supuesto bicicletas, nomas no pude y termine de pésimo humor.

Regresando a lo de mis bielas y pedales, fui a la ya mencionada tienda y encontré el extractor de bielas en 75 pesos, una llave para sacar los pedales en 131 y el porta bultos que ya tenia tiempo queriendo poner en 60 pesos, llegue y los pedales y las viales salieron realmente fácil comparado con lo que había visto en los videos, el eje encontré que se había aflojado o nunca había estado bien puesto, lo desarme, ese si con un poco de preocupación, ya que había ya visto que era posible que ese fuera el problema y había ya visto tres formas de desarmar las partes, desarme la parte para la que tenia la herramienta, saque con cuidado el eje y dio la hora de comer, después de hacer lo propio, revise y vi que la base de los baleros de un lado estaba doblada, a sugerencia fui a investigar cuanto pudiera costar la refacción y al llegar a la ferretería que he frecuentado más ya pensando en que de los 300 pesos que había visto costaba la pieza de una bici más cara me iba a costar, uno de los dependientes de mayor edad me pregunto que necesitaba y no lo supe explicar, pero ya venia con un par de cosas que pudiera necesitar, saque la pieza y resulta que los baleros cuestan 5 pesos, pero ya entrados en gastos las dos piezas cuestan 39 pesos, el eje 30 y revisando el que llevo ya está hasta rebajado de que baila para un lado y le ha estado hasta sacando viruta, mejor cambiarlo, pues me los llevo… sacar la contra para la que no tenía la herramienta con un desarmador y un martillo y poner la nueva de la misma forma, ajustar y engrasar el eje y los baleros y por supuesto poner mi porta bultos y ya entrados en gastos poner el desviador trasero como fue diseñado para ir, por supuesto todos esos cambios movieron la rueda trasera de lugar, el desviador y el ajuste de la estrella desajustaron el desviador delantero, ajuste el trasero y quede con 4 de los 7 cambios posibles y el trasero sin hacer bien el cambio.

La semana pasada fui a mi segundo cicloton y probé ya después de un rato los puentes de circuito interior y el deprimido de Mixcoac y vi que he mejorado bastante mi condición y los cambios funcionan.

Hoy por la mañana pensaba hacer una vuelta de Parque de los Venados a Reforma, Campo Marte y terminar en Garibaldi para regresar…al revisar visualmente las llantas, encontré que la trasera estaba rasgada/rota, di una vuelta por el barrio para ver que tan mal estaba la cosa, no parecía tener problemas la cámara y la rotura era lateral, tal vez pudiera soportar y tal vez la traía desde la semana pasada, en eso estaba pensando cuando recordé que justo así pasan los accidentes, vi en el cel que Interbike abría a las 9:30 y me pareció una buena distancia para ver cómo estaba la llanta… 9:40 y ni luces de que abrieran y pensándolo no sé si tienen servicio de arreglos, a ver las ferreteras grandes, una abre en domingo y sé que hacen arreglos, vamos en camino y llegué en el tiempo que dijo maps, entonces aún no abrían pero ya estaban quitando candados, a conseguir un café, y pues que unas económicas como las que traía 150 mas 25 por la mano de obra, unas un poco mejores 185 y pues cambiamos de llantas ahí si mejor con su banco de trabajo y de mejor forma que lo habría hecho yo, ya que con llantas y cámaras aún no he dedicado tiempo y ya había usado buena parte de la mañana, quedó muy bien a tomar el metro y como a las 11:40 estaba en eje central para incorporarme en división del norte, logrando mi paseo y llegando a Garibaldi 13:50.

TL:DR, Después de muchos años he vuelto a andar en bici, he querido arreglar lo más que puedo yo solo, he debido tomar el curso de mecánica básica de los Bicitekas o acudir más al mecánico de barrio al que ni conozco, a lo mejor invertir en una bici diferente y de rodada mayor, mientras la he pasado bien y de la ropa y accesorios para el clima otra entrada tendré que hacer.

December 09, 2024 05:35 AM

November 11, 2024


Gwolf

Why academics under-share research data - A social relational theory

This post is a review for Computing Reviews for Why academics under-share research data - A social relational theory , a article published in Journal of the Association for Information Science and Technology

As an academic, I have cheered for and welcomed the open access (OA) mandates that, slowly but steadily, have been accepted in one way or another throughout academia. It is now often accepted that public funds means public research. Many of our universities or funding bodies will demand that, with varying intensities–sometimes they demand research to be published in an OA venue, sometimes a mandate will only “prefer” it. Lately, some journals and funder bodies have expanded this mandate toward open science, requiring not only research outputs (that is, articles and books) to be published openly but for the data backing the results to be made public as well. As a person who has been involved with free software promotion since the mid 1990s, it was natural for me to join the OA movement and to celebrate when various universities adopt such mandates.

Now, what happens after a university or funder body adopts such a mandate? Many individual academics cheer, as it is the “right thing to do.” However, the authors observe that this is not really followed thoroughly by academics. What can be observed, rather, is the slow pace or “feet dragging” of academics when they are compelled to comply with OA mandates, or even an outright refusal to do so. If OA and open science are close to the ethos of academia, why aren’t more academics enthusiastically sharing the data used for their research? This paper finds a subversive practice embodied in the refusal to comply with such mandates, and explores an hypothesis based on Karl Marx’s productive worker theory and Pierre Bourdieu’s ideas of symbolic capital.

The paper explains that academics, as productive workers, become targets for exploitation: given that it’s not only the academics’ sharing ethos, but private industry’s push for data collection and industry-aligned research, they adapt to technological changes and jump through all kinds of hurdles to create more products, in a result that can be understood as a neoliberal productivity measurement strategy. Neoliberalism assumes that mechanisms that produce more profit for academic institutions will result in better research; it also leads to the disempowerment of academics as a class, although they are rewarded as individuals due to the specific value they produce.

The authors continue by explaining how open science mandates seem to ignore the historical ways of collaboration in different scientific fields, and exploring different angles of how and why data can be seen as “under-shared,” failing to comply with different aspects of said mandates. This paper, built on the social sciences tradition, is clearly a controversial work that can spark interesting discussions. While it does not specifically touch on computing, it is relevant to Computing Reviews readers due to the relatively high percentage of academics among us.

November 11, 2024 02:53 PM

November 09, 2024


Victor Martínez

Eureka

Cual dice arriba, lo encontré, pero me estoy adelantando, como escribí anteriormente, dejó de funcionar el agregador de blografia y aunque lo pensé como proyecto de fin de semana, más bien le fui dedicando por ahí una tarde de sábado, varias noches y una mañana de jueves…

Teniendo el antecedente de Planetalinux [1] que escribió David[2] inspirado en PlanetVenus [3] o para palear la limitación de este mismo, me fui a buscar este que debía ser menos viejo que el PlanetPlanet [4] que estaba corriendo y en el que están inspirados… si y no, si era más nuevo pero tampoco funciona con Python3 al menos no sin hacer cambios grandes.

Buscando pensé en quien más podría estar usando PlanetPlanet y por supuesto Debian es uno de ellos, no esta como paquete y en salsa no esta el código, comencé a ver si se podía convertir de 2 a 3 y resulta que si, existe 2to3 con el cual empece a hacer pruebas, pero me seguían faltando algunas cosas y tenia errores que no conozco, ya entrado en esto me pregunte sobre otros planetas y encontré la abandonada página de Wikipedia [5].

Revisando que hay por ahí una versión en PHP y otra en Ruby la primera que no me funcionó y la segunda que no probé, en eso estaba cuando di con el PlanetPython[6] y resulta que revisando su repositorio en Github[7] usa PlanetPlanet, y tienen una rama en Python3 (py3) que supongo es la que genera su página, clone su repositorio, me cambie a su rama 3 y me encontré que el marcado para el template había cambiado, tome el que están usando por defecto, solo tuve que cambiar un valor en mi configuración, borre todo mi .local para ver si funcionaba en mi entorno y necesite instalar con pip feedparser y finalmente tuve de regreso PlanetPlanet corriendo en Python3, seguro en un par de semanas más de estar dando a los errores que me quedaban por resolver habría obtenido más o menos lo mismo y leyendo los logs del repositorio más o menos el mismo camino siguieron en su momento, primero 2to3 y luego revisar dependencias, alguna sintaxis, entonces voy a investigar algunas que no pude resolver en su momento para ver como le hicieron.

Y bueno espero tener agregador para rato y supongo que podría hacer mi propio fork, pero no he hecho realmente ningún cambio al código y cree mi propia sección de configuración que no necesita estar en control de versiones al menos no en uno publico, así que estamos de vuelta.

[1] https://damog.net/blog/2019/01/12/adi%C3%B3s-sitio-de-planeta-linux/
[2] https://damog.net/blog/
[3] https://www.intertwingly.net/code/venus/
[4] https://web.archive.org/web/20170324212158/http://www.planetplanet.org/
[5] https://en.wikipedia.org/wiki/Planet_(software)
[6] https://planetpython.org/
[7] https://github.com/python/planet

November 09, 2024 09:44 PM

October 31, 2024


Gwolf

Do you have a minute..?

Do you have a minute...?

…to talk about the so-called “Intellectual Property”?

October 31, 2024 10:07 PM

October 30, 2024


Victor Martínez

De lectores… de rss

Hubo una época en que todos usábamos el botón de agregar RSS y los blogs reinaban, allá por 2003, me supongo, que sé que mucho antes hay, pero no estoy bien seguro si en 2003 o 4 fue el boom al menos en los de habla hispana, leo que en 2005 se lanza Google Reader, que no recuerdo cuando empecé a usar pero que me gustaba machismo y estuve muy triste y molesto cuando lo descontinuaron en 2013, al igual que un montón de productos que ha descontinuado sin opción, sin liberar el código o de plano que ha comprado para cerrar la compañía de California, en fin que estuve un rato usando una aplicación de Windows que no tenía toda la funcionalidad de la de Google

Por 2009? tuve la gran falla en mi PSU y me pasé a usar Debian en mi computadora de casa, en fin que tuve que encontrar un reemplazo para el lector probé más de un par pero el que pude instalar y mantener en mi servicio de hosting fue Tiny Tiny RSS [1], el cual desde hace buen rato corro, le cree una cuenta a Nodens y otra a Map, pero no dudo que lo hayan abandonado también, ahora que nuestro agregador se descompuso, aproveche para actualizar con git la versión que tengo en mi lector y darle una revisada y me da gusto que funciona muy bien y que mantiene mi lista de lectura, lo que me da mucha tristeza es recordar con todas las entradas en rojo los blogs y sitios de noticias que desaparecieron, dejaron de publicar, se hicieron de paga, quebraron, fueron abandonados o sus creadores ya no se encuentran con nosotros, en fin que Gunnar bien me ha ofrecido una opción que encontró en PlanetDebian [2], y hasta donde recuerdo este mismo corre en PlanetVenus [3] que es fork del PlanetPlanet que produce la portada de Blografia, no dudo que corra en una instancia de oldstable/security/LTS en donde las dependencias de Python 2.x no están rotas o en su propia jaula o VM, voy a consultar, porque revisando en Salsa [4} no veo que hayan hecho modificaciones al código o no supe por donde buscar.

En fin que ha sido un clavado en la nostalgia y ha sido interesante leer varias entradas de blogs que han desaparecido de la red por completo.

PlanetVenus medio he logrado que avance un poco en sus dependencias sin tener que re escribirlo, haciendo cambio a la rama dev que es tan sólo 7 años atrás en lugar de la principal que lleva 14 años sin moverse… le decía Gunnar que le dedicaría el fin de semana y en realidad solo le he dedicado un par de horas, espero dedicarle una tarde del fin de semana, si no queda su sugerencia FreshRSS [5] no me gusta del todo pero ofrece una opción de portada pública que no tiene tt-rss o que no fue pensado para eso al generar una aleatoria que un vínculo suave supongo podría solucionar…si no me encuentro un programa más ligero que haga lo mismo en el camino…

Una foto de mi lector en Web Tiny Tiny RSS

[1] https://tt-rss.org/
[2] https://planet.debian.org/
[3] https://github.com/rubys/venus
[4] https://salsa.debian.org/planet-team
[5] https://freshrss.org/index.html

October 30, 2024 01:40 AM

October 22, 2024


Victor Martínez

Y nuestro agregador

Dejó de funcionar, justo cuando estaba por escribir sobre otra cosa, note que la portada no se esta actualizando y resulta que estoy usando planetplanet con algunas modificaciones de planetvenus que es un fork, con miras a migrar al último, hace relativamente poco DH migró al LTS más reciente de Ubuntu… y actualizó Python dejando sin soporte los dos programas que estaba usando he dedicado unas 6 horas en dos días a ver si puedo hacer funcionar alguno de estos dos con Python3 y ahí más o menos la llevo con planetvenus… pero no termina de quedar… y no hace mucho escribía Gunnar de que aparecerián por acá sus actualizaciones, de hecho por eso me percate que estaba roto, porque vi una entrada en su blog que no estaba en la portada, al parecer hasta el fin de semana le voy a poder dedicar tiempo.

October 22, 2024 12:45 AM

October 11, 2024


Victor Martínez

Hoy por la mañana

Ardillas, Burros, Pumas y Lobos Grises.

October 11, 2024 05:27 AM

October 10, 2024


Gwolf

Started a guide to writing FUSE filesystems in Python

As DebConf22 was coming to an end, in Kosovo, talking with Eeveelweezel they invited me to prepare a talk to give for the Chicago Python User Group. I replied that I’m not really that much of a Python guy… But would think about a topic. Two years passed. I meet Eeveelweezel again for DebConf24 in Busan, South Korea. And the topic came up again. I had thought of some ideas, but none really pleased me. Again, I do write some Python when needed, and I teach using Python, as it’s the language I find my students can best cope with. But delivering a talk to ChiPy?

On the other hand, I have long used a very simplistic and limited filesystem I’ve designed as an implementation project at class: FIUnamFS (for “Facultad de Ingeniería, Universidad Nacional Autónoma de México”: the Engineering Faculty for Mexico’s National University, where I teach. Sorry, the link is in Spanish — but you will find several implementations of it from the students 😉). It is a toy filesystem, with as many bad characteristics you can think of, but easy to specify and implement. It is based on contiguous file allocation, has no support for sub-directories, and is often limited to the size of a 1.44MB floppy disk.

As I give this filesystem as a project to my students (and not as a mere homework), I always ask them to try and provide a good, polished, professional interface, not just the simplistic menu I often get. And I tell them the best possible interface would be if they provide support for FIUnamFS transparently, usable by the user without thinking too much about it. With high probability, that would mean: Use FUSE.

Python FUSE

But, in the six semesters I’ve used this project (with 30-40 students per semester group), only one student has bitten the bullet and presented a FUSE implementation.

Maybe this is because it’s not easy to understand how to build a FUSE-based filesystem from a high-level language such as Python? Yes, I’ve seen several implementation examples and even nice web pages (i.e. the examples shipped with thepython-fuse module Stavros’ passthrough filesystem, Dave Filesystem based upon, and further explaining, Stavros’, and several others) explaining how to provide basic functionality. I found a particularly useful presentation by Matteo Bertozzi presented ~15 years ago at PyCon4… But none of those is IMO followable enough by itself. Also, most of them are very old (maybe the world is telling me something that I refuse to understand?).

And of course, there isn’t a single interface to work from. In Python only, we can find python-fuse, Pyfuse, Fusepy… Where to start from?

…So I setup to try and help.

Over the past couple of weeks, I have been slowly working on my own version, and presenting it as a progressive set of tasks, adding filesystem calls, and being careful to thoroughly document what I write (but… maybe my documentation ends up obfuscating the intent? I hope not — and, read on, I’ve provided some remediation).

I registered a GitLab project for a hand-holding guide to writing FUSE-based filesystems in Python. This is a project where I present several working FUSE filesystem implementations, some of them RAM-based, some passthrough-based, and I intend to add to this also filesystems backed on pseudo-block-devices (for implementations such as my FIUnamFS).

So far, I have added five stepwise pieces, starting from the barest possible empty filesystem, and adding system calls (and functionality) until (so far) either a read-write filesystem in RAM with basicstat() support or a read-only passthrough filesystem.

I think providing fun or useful examples is also a good way to get students to use what I’m teaching, so I’ve added some ideas I’ve had: DNS Filesystem, on-the-fly markdown compiling filesystem, unzip filesystem and uncomment filesystem.

They all provide something that could be seen as useful, in a way that’s easy to teach, in just some tens of lines. And, in case my comments/documentation are too long to read, uncommentfs will happily strip all comments and whitespace automatically! 😉

So… I will be delivering my talk tomorrow (2024.10.10, 18:30 GMT-6) at ChiPy (virtually). I am also presenting this talk virtually at Jornadas Regionales de Software Libre in Santa Fe, Argentina, next week (virtually as well). And also in November, in person, at nerdear.la, that will be held in Mexico City for the first time.

Of course, I will also share this project with my students in the next couple of weeks… And hope it manages to lure them into implementing FUSE in Python. At some point, I shall report!

Update: After delivering my ChiPy talk, I have uploaded it to YouTube: A hand-holding guide to writing FUSE-based filesystems in Python, and after presenting at Jornadas Regionales, I present you the video in Spanish here: Aprendiendo y enseñando a escribir sistemas de archivo en espacio de usuario con FUSE y Python.

October 10, 2024 01:07 AM

September 21, 2024


Gwolf

50 years of queries

This post is a review for Computing Reviews for 50 years of queries , a article published in Communications of the ACM

The relational model is probably the one innovation that brought computers to the mainstream for business users. This article by Donald Chamberlin, creator of one of the first query languages (that evolved into the ubiquitous SQL), presents its history as a commemoration of the 50th anniversary of his publication of said query language.

The article begins by giving background on information processing before the advent of today’s database management systems: with systems storing and processing information based on sequential-only magnetic tapes in the 1950s, adopting a record-based, fixed-format filing system was far from natural. The late 1960s and early 1970s saw many fundamental advances, among which one of the best known is E. F. Codd’s relational model. The first five pages (out of 12) present the evolution of the data management community up to the 1974 SIGFIDET conference. This conference was so important in the eyes of the author that, in his words, it is the event that “starts the clock” on 50 years of relational databases.

The second part of the article tells about the growth of the structured English query language (SEQUEL)– eventually renamed SQL–including the importance of its standardization and its presence in commercial products as the dominant database language since the late 1970s. Chamberlin presents short histories of the various implementations, many of which remain dominant names today, that is, Oracle, Informix, and DB2. Entering the 1990s, open-source communities introduced MySQL, PostgreSQL, and SQLite.

The final part of the article presents controversies and criticisms related to SQL and the relational database model as a whole. Chamberlin presents the main points of controversy throughout the years: 1) the SQL language lacks orthogonality; 2) SQL tables, unlike formal relations, might contain null values; and 3) SQL tables, unlike formal relations, may contain duplicate rows. He explains the issues and tradeoffs that guided the language design as it unfolded. Finally, a section presents several points that explain how SQL and the relational model have remained, for 50 years, a “winning concept,” as well as some thoughts regarding the NoSQL movement that gained traction in the 2010s.

This article is written with clear language and structure, making it easy and pleasant to read. It does not drive a technical point, but instead is a recap on half a century of developments in one of the fields most important to the commercial development of computing, written by one of the greatest authorities on the topic.

September 21, 2024 05:03 AM

September 02, 2024


Gwolf

Free and open source software and other market failures

This post is a review for Computing Reviews for Free and open source software and other market failures , a article published in Communications of the ACM

Understanding the free and open-source software (FOSS) movement has, since its beginning, implied crossing many disciplinary boundaries. This article describes FOSS’s history, explaining its undeniable success throughout the 1990s, and why the movement today feels in a way as if it were on autopilot, lacking the “steam” it once had.

The author presents several examples of different industries where, as it happened with FOSS in computing, fundamental innovations happened not because the leading companies of each field are attentive to customers’ needs, but to a certain degree, despite them not even considering those needs, it is typically due to the hubris that comes from being a market leader.

Kemp exemplifies his hypothesis by presenting the messy landscape of the commercial, mutually incompatible systems of Unix in the 1980s. Different companies had set out to implement their particular flavor of “open Unix computers,” but with clear examples of vendor lock-in techniques. He speculates that, “if we had been able to buy a reasonably priced and solid Unix for our 32-bit PCs … nobody would be running FreeBSD or Linux today, except possibly as an obscure hobby.” He states that the FOSS movement was born out of the utter market failure of the different Unix vendors.

The focus of the article shifts then to the FOSS movement itself: 25 years ago, as FOSS systems slowly gained acceptance and then adoption in the “serious market” and at the center of the dot-com boom of the early 2000s, Linux user groups (LUGs) with tens of thousands of members bloomed throughout the world; knowing this history, why have all but a few of them vanished into oblivion?

Kemp suggests that the strength and vitality that LUGs had ultimately reflects the anger that prompted technical users to take the situation into their own hands and fix it; once the software industry was forced to change, the strongly cohesive FOSS movement diluted. “The frustrations and anger of [information technology, IT] in 2024,” Kamp writes, “are entirely different from those of 1991.” As an example, the author closes by citing the difficulty of maintaining–despite having the resources to do so–an aging legacy codebase that needs to continue working year after year.

September 02, 2024 07:08 PM

August 18, 2024


Gwolf

The social media my blog –as well as some other sites I publish in– is pushed to will soon stop receiving updates

For many years, I have been using the dlvr.it service to echo my online activity to where more people can follow it. Namely, I write in the following sources:

Via dlvr.it’s services, all those posts are “echoed” to Gwolfwolf in X (Twitter) and to the Gunnarwolfi page in Facebook. I use neither platform as a human (that is, I never log in there).

Anyway, dlvr.it sent me a mail stating they would be soon (as in, the next few weeks) cutting their free tier. And, although I value their services and am thankfulfor their value so far, I am not going to pay for my personal stuff to be reposted to social media.

So, this post’s mission is twofold:

  1. If you follow me via any of those media, you will soon not be following me anymore 😉
  2. If you know of any service that would fill the space left by dlvr.it, I will be very grateful. Extra gratefulness points if the option you suggest is able to post to accounts in less-propietary media (i.e. the Fediverse). Please tell me by mail (gwolf@gwolf.org).

Oh! Forgot to mention: Of course, my blog will continue to be appear in Planet Debian, Blografía, and any decent aggregator that consumes my RSS.

August 18, 2024 11:17 PM

August 01, 2024


Victor Martínez

Recuperación de materiales didácticos en Flash: Aprendamos Náhuatl

Y bueno este año participamos un poco menos en en el CHAT 2024 [1] y aún no he terminado de ver las ponencias que me interesan [2] y un poco por promocionar el evento tengo un par de invitaciones en UPN para explicar un tanto el uso de IA en educación, y aunque tengo colegas que han escrito e investigado más la respecto parece ser que el tema de este año en realidad ha captado la atención aunque no sea de lo que presenté.

De lo que si hice fue recuperar el proyecto que estuve haciendo el año pasado recuperando un material desarrollado en Flash, cuando platique al principio del mismo pensé que era uno aún más viejo que funcionaba con Authorware y que me pareció sencillo hacer correr, resultó que era uno que no conocía que funcionaba en Web y pues en 2023 de abril a octubre estuve haciendo lo que viene en el video y en la presentación [3].

En resumen, Adobe anunció el abandono de Flash como tecnología con mucho tiempo, en nuestro caso recuperar los contenidos era lo primero, como no se contaba con el fuente no se pudo hacer una migración Flash SWF – Animate HTML5, se encontró una opción libre y moderna, Ruffle que resuelve los problemas que llevó a Adobe a abandonar Flash, pero que crea algunos otros al no implementar TODO lo que hacia el producto original, especialmente los errores de diseño y varias practicas poco seguras.

No es una guia de como hacer, pero usando Ruffle mucho del software educativo en que ya se invirtió tiempo y que no se cuenta con los fuentes o con los recursos para re implementarlo, puede ser recuperado ya sea como recurso histórico o para extender su uso y hasta cierta medida modificado y puesto al día con bastante trabajo.

Ah, el interactivo para su consulta [4].

[1] https://chat.iztacala.unam.mx/elchat/6
[2] https://www.youtube.com/@CHATIztacala/streams
[3] http://blografia.net/vicm3/wp-content/uploads/2024/07/Recuperacion-de-material-didactico-en-flash.pdf
[4] http://linux.ajusco.upn.mx/~vicm3/nahuatl/

August 01, 2024 03:16 AM

July 24, 2024


Gwolf

DebConf24 Continuous Key-Signing Party

🎉🥳🤡🎂🍥 Yay, party! 🎉🥳🤡🎂🍥

🎉🥳🤡🎂🍥 Yay, crypto! 🎉🥳🤡🎂🍥

DebCamp has started, and in a couple of days, we will fully be in DebConf24 mode!

As most of you know, an important part that binds Debian together is our cryptographic identity assurance, and that is in good measure tightened by the Continuous Key-Signing Parties we hold at DebConfs and other Debian and Free Software gatherings.

As I have done during (most of) the past DebConfs, I have prepared a set of pseudo-social maps to help you find where you are in the OpenPGP mesh of our conference. Naturally, Web-of-Trust maps should be user-centered, so find your own at:

https://people.debian.org/~gwolf/dc24_ksp/

The list is now final and it will not receive any modifications (I asked for them some days ago); if your name still appears on the list and you don’t want to be linked to the DC24 KSP in the future, tell me and I’ll remove it from future versions of the list (but it is part of the final DC24 file, as its checksum is already final)

Speaking of which!

If you are to be a part of the keysigning, get the final DC24 file and, on a device you trust, check its SHA256 by running:

$ sha256sum dc24_fprs.txt
11daadc0e435cb32f734307b091905d4236cdf82e3b84f43cde80ef1816370a5  dc24_fprs.txt

Make sure the resulting number matches the one I’m presenting. If it doesn’t, ensure your copy of the file is not corrupted (i.e. download again). If it still doess not match, notify me immediately.

Does any of the above confuse you? Please come to (or at least, follow the stream for) my session on DebConf opening day, Continuous Key-Signing Party introduction, 10:30 Korean time; I will do my best to explain the details to you.

PS- I will soon provide a simple, short PDF that will probably be mass-printed at FrontDesk so that you can easily track your KSP progress.

July 24, 2024 03:25 AM

July 17, 2024


Gwolf

Script for weather reporting in Waybar

While I was living in Argentina, we (my family) found ourselves checking for weather forecasts almost constantly — weather there can be quite unexpected, much more so that here in Mexico. So it took me a bit of tinkering to come up with a couple of simple scripts to show the weather forecast as part of my Waybar setup. I haven’t cared to share with anybody, as I believe them to be quite trivial and quite dirty.

But today, Víctor was asking for some slightly-related things, so here I go. Please do remember I warned: Dirty.

Forecast

I am using OpenWeather’s open API. I had to register to get an APPID, and it allows me for up to 1,000 API calls per day, more than plenty for my uses, even if I am logged in at my desktops at three different computers (not an uncommon situation). Having that, I set up a file named /etc/get_weather/, that currently reads:

# Home, Mexico City
LAT=19.3364
LONG=-99.1819

# # Home, Paraná, Argentina
# LAT=-31.7208
# LONG=-60.5317

# # PKNU, Busan, South Korea
# LAT=35.1339
#LONG=129.1055

APPID=SomeLongRandomStringIAmNotSharing

Then, I have a simple script, /usr/local/bin/get_weather, that fetches the current weather and the forecast, and stores them as /run/weather.json and /run/forecast.json:

#!/usr/bin/bash
CONF_FILE=/etc/get_weather

if [ -e "$CONF_FILE" ]; then
    . "$CONF_FILE"
else
    echo "Configuration file $CONF_FILE not found"
    exit 1
fi

if [ -z "$LAT" -o -z "$LONG" -o -z "$APPID" ]; then
    echo "Configuration file must declare latitude (LAT), longitude (LONG) "
    echo "and app ID (APPID)."
    exit 1
fi

CURRENT=/run/weather.json
FORECAST=/run/forecast.json

wget -q "https://api.openweathermap.org/data/2.5/weather?lat=${LAT}&lon=${LONG}&units=metric&appid=${APPID}" -O "${CURRENT}"
wget -q "https://api.openweathermap.org/data/2.5/forecast?lat=${LAT}&lon=${LONG}&units=metric&appid=${APPID}" -O "${FORECAST}"

This script is called by the corresponding systemd service unit, found at /etc/systemd/system/get_weather.service:

[Unit]
Description=Get the current weather

[Service]
Type=oneshot
ExecStart=/usr/local/bin/get_weather

And it is run every 15 minutes via the following systemd timer unit, /etc/systemd/system/get_weather.timer:

[Unit]
Description=Get the current weather every 15 minutes

[Timer]
OnCalendar=*:00/15:00
Unit=get_weather.service

[Install]
WantedBy=multi-user.target

(yes, it runs even if I’m not logged in, wasting some of my free API calls… but within reason)

Then, I declare a "custom/weather" module in the desired position of my ~/.config/waybar/waybar.config, and define it as:

"custom/weather": {
    "exec": "while true;do /home/gwolf/bin/parse_weather.rb;sleep 10; done",
"return-type": "json",
},

This script basically morphs a generic weather JSON description into another set of JSON bits that display my weather in the way I prefer to have it displayed as:

#!/usr/bin/ruby
require 'json'

Sources = {:weather => '/run/weather.json',
           :forecast => '/run/forecast.json'
          }
Icons = {'01d' => '🌞', # d → day
         '01n' => '🌃', # n → night
         '02d' => '🌤️',
         '02n' => '🌥',
         '03d' => '☁️',
         '03n' => '🌤',
         '04d'  => '☁️',
         '04n' => '🌤',
         '09d' => '🌧️',
         '10n' =>  '🌧 ',
         '10d' => '🌦️',
         '13d' => '❄️',
         '50d' => '🌫️'
        }

ret = {'text': nil, 'tooltip': nil, 'class': 'weather', 'percentage': 100}

# Current weather report: Main text of the module
begin
  weather = JSON.parse(open(Sources[:weather],'r').read)

  loc_name = weather['name']
  icon = Icons[weather['weather'][0]['icon']] || '?' + f['weather'][0]['icon'] + f['weather'][0]['main']

  temp = weather['main']['temp']
  sens = weather['main']['feels_like']
  hum = weather['main']['humidity']

  wind_vel = weather['wind']['speed']
  wind_dir = weather['wind']['deg']

  portions = {}
  portions[:loc] = loc_name
  portions[:temp] = '%s 🌡%2.2f°C (%2.2f)' % [icon, temp, sens]
  portions[:hum] = '💧 %2d%%' % hum
  portions[:wind] = '🌬%2.2fm/s %d°' % [wind_vel, wind_dir]
  ret['text'] = [:loc, :temp, :hum, :wind].map {|p| portions[p]}.join(' ')
rescue => err
  ret['text'] = 'Could not process weather file (%s ⇒ %s: %s)' % [Sources[:weather], err.class, err.to_s]
end

# Weather prevision for the following hours/days
begin
  cast = []
  forecast = JSON.parse(open(Sources[:forecast], 'r').read)
  min = ''
  max = ''

  day=Time.now.strftime('%Y.%m.%d')
  by_day = {}
  forecast['list'].each_with_index do |f,i|
    by_day[day] ||= []
    time = Time.at(f['dt'])
    time_lbl = '%02d:%02d' % [time.hour, time.min]

    icon = Icons[f['weather'][0]['icon']] || '?' + f['weather'][0]['icon'] + f['weather'][0]['main']

    by_day[day] << f['main']['temp']
    if time.hour == 0
      min = '%2.2f' % by_day[day].min
      max = '%2.2f' % by_day[day].max
      cast << '        ↑ min: <b>%s°C</b> max: <b>%s°C</b>' % [min, max]
      day = time.strftime('%Y.%m.%d')
      cast << '     ┍━━━━━┫  <b>%04d.%02d.%02d</b> ┠━━━━━┑' %
              [time.year, time.month, time.day]
    end
    cast << '%s | %2.2f°C | 🌢%2d%% | %s %s' % [time_lbl,
                                                f['main']['temp'],
                                                f['main']['humidity'],
                                                icon,
                                                f['weather'][0]['description']
                                               ]
  end
  cast << '        ↑ min: <b>%s</b>°C max: <b>%s°C</b>' % [min, max]

  ret['tooltip'] = cast.join("\n")
  
rescue => err
  ret['tooltip'] = 'Could not process forecast file (%s ⇒ %s)' % [Sources[:forecast], err.class, err.to_s]
end


# Print out the result for Waybar to process
puts ret.to_json

The end result? Nothing too stunning, but definitively something I find useful and even nicely laid out:

Screenshot

Do note that it seems OpenWeather will return the name of the closest available meteorology station with (most?) recent data — for my home, I often get Ciudad Universitaria, but sometimes Coyoacán or even San Ángel Inn.

July 17, 2024 05:32 PM


Victor Martínez

Redshift

Hace algún tiempo vi en el celular en Android lo de cambiar de temperatura de color, bien probable que en 2019 o algo así, para ayudar a el ajuste de ojos a la luz azul, cambiando por tono rojo y posiblemente ayudar un poco para no afectar el ciclo de sueño, seguro en el mundo de Windows y Mac hace tiempo también está implementado, busque en su momento en Debian y encontré Redshift [1] y Redshift-gtk [2] que hacen lo que varias aplicaciones especialmente me gustó porque toma los datos de ubicación de la red de un servicio llamado Geoclue [3], que utiliza el servicio MLS [4] de la Fundación Mozilla, este año empezó a fallar y de pronto dejó de funcionar junio de este año dejo de funcionar y revisando en los Bugs del paquete encontré reportes parecidos pero no igual y no supe cómo darle formato, así que lo voy a poner como entrada a ver si algún debianero me ayuda a darle el formato correcto para Bug.

Redshift soporta colocar manual la ubicación en la documentación viene como poner la localización manualmente y muy pequeñito dice que las longitudes en América y la latitud en el cono sur son negativas esto viene a cuento porque en las búsquedas, un par de máquinas de búsqueda reportan el absoluto, si uno no abre el documento completo y lee con atención.

¿Qué pasó?
Resulta que MLS ha ido siendo abandonado y en marzo de este año dejó de resolver peticiones [5], entonces Geoclue-2.0 dejó de funcionar y finalmente lo hizo Redshift.

Solución, colocar la latitud y longitud de manera manual, el ejemplo en la documentación viene Copenage y es muy bueno, ya en man dice:

Your current location, in degrees, given as floating point numbers, to‐
wards north and east, with negative numbers representing south and west,
respectively.

O como lo dice el sitio web más de manera más sensible para el que tiene prisa [6]

When you specify a location manually, note that a location south of equator has a negative latitude and a location west of Greenwich (e.g the Americas) has a negative longitude.

Entonces según leo, va a ser difícil que actualicen Redshift ya que no ha tenido gran cambio desde 2018, pero puede uno arreglar el asunto ya sea como en mi caso creando un archivo en .config/redshift.conf con los datos correctos, ya que vamos a obtener 19.4326° N, 99.1332° W es decir en decimal, 19.43 y -99.13 que si los entramos solo como enteros terminamos en lugar de en ciudad de México en algún lugar de Tailandia y con el reloj volteado lo cual me trajo tres días con la pantalla en un tono muy azul ya entrada la noche.

O como lo estuve haciendo a mano, cuando no entendía que me faltaba lo de los negativos, por ejemplo si está uno de viaje puede uno (sé que pudiera uno crearse varias configuraciones para las ciudades que va a visitar pero me da más fiaca).

$redshift -O 3900 # night / one time
$redshift -x # reset

redshift -l 55.7:12.6 -t 5700:3600 -g 0.8 -m randr -v # Example for Copenhagen, Denmark, from man

redshift -l 19.43:-99.13 -t 6700:3800 -m randr -v  # Mexico City, note the – sign

Entonces, que aunque supongo que lo mejor sería levantar el ticket en redshift o redshift-gtk y darle +packages o +depends geoclue-2.0 como no recuerdo bien como es y en ingles no creo que quede como esta entrada, prefiero ponerlo acá mientras veo si lo puedo sintetizar en ingles.

[1] http://jonls.dk/redshift/
[2] https://packages.debian.org/bookworm/redshift
[3] https://gitlab.freedesktop.org/geoclue/geoclue/wikis/home
[4] https://en.wikipedia.org/wiki/Mozilla_Location_Service
[5] https://discourse.mozilla.org/t/retiring-the-mozilla-location-service/128693
[6] http://jonls.dk/redshift/

July 17, 2024 01:51 AM


Gwolf

Scholarly spam • «Wulfenia»

I just got one of those utterly funny spam messages… And yes, I recognize everybody likes building a name for themselves. But some spammers are downright silly.

I just got the following mail:

From: Hermine Wolf <hwolf850@gmail.com>
To: me, obviously 😉
Date: Mon, 15 Jul 2024 22:18:58 -0700
Subject: Make sure that your manuscript gets indexed and showcased in the prestigious Scopus database soon.
Message-ID: <CAEZZb3XCXSc_YOeR7KtnoSK4i3OhD=FH7u+A5xSMsYvhQZojQA@mail.gmail.com>

This message has visual elements included. If they don't display, please   
update your email preferences.

*Dear Esteemed Author,*


Upon careful examination of your recent research articles available online,
we are excited to invite you to submit your latest work to our esteemed    
journal, '*WULFENIA*'. Renowned for upholding high standards of excellence 
in peer-reviewed academic research spanning various fields, our journal is 
committed to promoting innovative ideas and driving advancements in        
theoretical and applied sciences, engineering, natural sciences, and social
sciences. 'WULFENIA' takes pride in its impressive 5-year impact factor of 
*1.000* and is highly respected in prestigious databases including the     
Science Citation Index Expanded (ISI Thomson Reuters), Index Copernicus,   
Elsevier BIOBASE, and BIOSIS Previews.                                     
                                                                           
*Wulfenia submission page:*                                                
[image: research--check.png][image: scrutiny-table-chat.png][image:        
exchange-check.png][image: interaction.png]                                
.                                                                          

Please don't reply to this email                                           
                                                                           
We sincerely value your consideration of 'WULFENIA' as a platform to       
present your scholarly work. We eagerly anticipate receiving your valuable 
contributions.                                                             

*Best regards,*                                                            
Professor Dr. Vienna S. Franz                                              

Scholarly spam

Who cares what Wulfenia is about? It’s about you, my stupid Wolf cousin!

July 17, 2024 12:23 AM

June 26, 2024


Gwolf

Many terabytes for students to play with. Thanks Debian!

LIDSOL students receiving their new hard drives

My students at LIDSOL (Laboratorio de Investigación y Desarrollo de Software Libre, Free Software Research and Development Lab) at Facultad de Ingeniería, UNAM asked me to help them get the needed hardware to set up a mirror for various free software projects. We have some decent servers (not new servers, but mirrors don’t require to be top-performance), so…

A couple of weeks ago, I approached the Debian Project Leader (DPL) and suggested we should buy two 16TBhard drives for this project, as it is the most reasonable cost per byte point I found. He agreed, and I bought the drives. Today we had a lab meeting, and I handed them over the hardware.

Of course, they are very happy and thankful with the Debian project 😃 In the last couple of weeks, they have already set up an Archlinux mirror (https://archlinux.org/mirrors/fi-b.unam.mx), and now that they have heaps of storage space, plans are underway to set up various other mirrors (of course, a Debian mirror will be among the first).

June 26, 2024 02:32 AM