Tennis – Australian Open 2025 – Lorenzo Sonego : “Ben Shelton has changed a lot in these two years”
Please join us (in French/ en français) for the Moodle Academy webinar ‘La gestion des rôles dans Moodle’ on 5 February, 13:00 UTC
We invite you to join us for our next Moodle Academy webinar, which is free to attend. Please note: This webinar will be in French.
Webinaire: La gestion des rôles dans Moodle
5 février, 13:00-14:00 UTC
Inscrivez-vous!
Les rôles de Moodle sont une des clefs de la flexibilité de son utilisation. Cependant, la gestion de ces rôles est complexe et assez difficile d’accès. Ce webinaire, destiné avant tout aux administrateurs et administratrices de Moodle, mais aussi à toute personne curieuse du fonctionnement interne de Moodle, se donne comme objectif d’améliorer la compréhension de l’architecture des rôles de Moodle et, à l’aide d’exemples, de trucs et d’astuces, de rendre plus digeste l’administration de ces rôles. Des bonnes pratiques de gestion des rôles dans Moodle seront également présentées.
Ce webinaire fait partie du cours ‘Moodle Academy webinars‘. Il faut vous inscrire au cours pour participer au webinaire.
Dries Buytaert: I gave an AI agent edit access to my website

I’m often asked, Will AI agents replace digital marketers and site builders?
. The answer is yes
, at least for certain kinds of tasks.
To explore this idea, I prototyped two AI agents to automate marketing tasks on my personal website. They update meta descriptions to improve SEO and optimize tags to improve content discovery.
Watching the AI agents in action is incredible. In the video below, you’ll see them effortlessly navigate my Drupal site — logging in, finding posts, and editing content. It’s a glimpse into how AI could transform the role of digital marketers.
The experiment
I built two AI agents to help optimize my blog posts. Here is how they work together:
- Agent 1: Content analysis: This agent finds a blog post, reviews its content, and suggests improved summaries and tags to enhance SEO and increase discoverability.
- Agent 2: Applying updates: After manual approval, this agent logs into the site and updates the summary and tags suggested by the first agent.
All of this could be done in one step, or with a single agent, but keeping a ‘human-in-the-loop’ is good for quality assurance.
This was achieved with just 120 lines of Python code and a few hours of trial and error. As the video demonstrates, the code is approachable for developers with basic programming skills.
The secret ingredient is the browser_use
framework, which acts as a bridge between various LLMs and Playwright, a framework for browser automation and testing.
The magic and the reality check
What makes this exciting is the agent’s ability to problem-solve. It’s almost human-like.
Watching the AI agents operate my site, I noticed they often face the same UX challenges as humans. It likely means that the more we simplify a CMS like Drupal for human users, the more accessible it becomes for AI agents. I find this link between human and AI usability both striking and thought-provoking.
In the first part of the video, the agent was tasked with finding my DrupalCon Lille 2023 keynote. When scrolling through the blog section failed, it adapted by using Google search instead.
In the second part of the video, it navigated Drupal’s more complex UI elements, like auto-complete taxonomy fields, though it required one trial-and-error attempt.
The results are incredible, but not flawless. I ran the agents multiple times, and while they performed well most of the time, they aren’t reliable enough for production use. However, this field is evolving quickly, and agents like this could become highly reliable within a year or two.
Native agents versus explorer agents
In my mind, agents can be categorized as “explorer agents” or “native agents”. I haven’t seen these terms used before, so here is how I define them:
- Explorer agents: These agents operate across multiple websites. For example, an agent might use Google to search for a product, compare prices on different sites, and order the cheapest option.
- Native agents: These agents work within a specific site, directly integrating with the CMS to leverage its APIs and built-in features.
The browser_use
framework, in my view, is best suited for explorer agents. While it can be applied to a single website, as shown in my demo, it’s not the most efficient approach.
Native agents that directly interact with the CMS’s APIs should be more effective. Rather than imitating human behavior to “search” for content, the agent could retrieve it directly through a single API call. It could then programmatically propose changes within a CMS-supported content editing workflow, complete with role-based permissions and moderation states
I can also imagine a future where native agents and explorer agents work together (hybrid agents), combining the strengths of both approaches to unlock even greater opportunities.
Next steps
A next step for me is to build a similar solution using Drupal’s AI agent capabilities. Drupal’s native AI agents should make finding and updating content more efficiently.
Of course, other digital marketing use cases might benefit from explorer agents. I’d be happy to explore these possibilities as well. Let me know if you have ideas.
Conclusions
Building an AI assistant to handle digital marketing tasks is no longer science fiction. It’s clear that, soon, AI agents will be working alongside digital marketers and site builders.
These tools are advancing rapidly and are surprisingly easy to create, even though they’re not yet perfect. Their potential disruption is both exciting and hard to fully understand.
As Drupal, we need to stay ahead by asking questions like: are we fully imagining the disruption AI could bring? The future is ours to shape, but we need to rise to the challenge.
JRuby 9.4.10.0 Released
The JRuby community is pleased to announce the release of JRuby 9.4.10.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 9.4.x targets Ruby 3.1 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward!
- Dani Smith @danini-the-panini
- Karol Bucek @kares
- mrnoname1000 @mrnoname1000
Ruby Compatibility
- Fixed a NegativeArraySizeException crash parsing heredocs. #8355, #8557
- Users can now opt into Ruby 3.3 behavior for NoMethodError and NameError that no longer inspects the target object. This inspect frequently led to memory issues. Specify JRuby flag
-XnameError.inspect.object=false
or JVM propertyjruby.nameError.inspect.object=false
to disable the inspect call. #216, #8384, #8538 - Implemented the missing
Process.argv0
method, used by recent Bundler releases. #8568, #8570
Standard Library
- The jar-dependencies gem, responsible for fetching jar file dependencies of Ruby gems, can now be updated independently of JRuby. #7262, #8488, #8502
- An upcoming release of jar-dependencies, will fix issues sourcing jar dependencies in container deployments (partially fixed previously by an updated ruby-maven-libs gem). #7059, #8366
- The psych gem is updated to version 5.2.3, including a fix for YAML aliases from SnakeYAML-Engine version 2.9. #8352, #8575
- The reline gem is updated to 0.5.12. #8481
Java Integration
- Only JVM classes imported from the same classloader hierarchy as JRuby will be bound to constants in JRuby’s package hierarchy. #8156
- Implementing a Java interface no longer leads to constant redefinition warnings. #8349, #8503
- Precompiled Ruby scripts now properly prepare optimized homogeneous case/when statements. Previously they would deserialize incorrectly and garble the branches. #8421, #8424
Performance and Usability
- Additional runtime data structures are eagerly cleared when tearing down a JRuby runtime, aiding GC. #8343, #8566
- The JRuby shell-based launcher script now properly handles JRuby installed in a path with spaces. #8441, #8442
- The
Class#subclasses
method has been optimized to eliminate it as a bottleneck in complex ActiveRecord STI queries. #8457, #8462 - Integer multiplication operations that overflow outside of int64 range have been optimized to eliminate heavy exception raises. #8516, #8523
Issues and PRs resolved for 9.4.10.0
- #7059 Issue of Jar dependency with Jruby-9.3.3.0
- #7262 jar-dependencies cannot be updated out-of-band from jruby
- #8156 JRuby adds Java proxy classes to the Java module even if they are not from JRubyClassLoader
- #8343 Free up memory memory used by JRuby during teardown
- #8349 internal proxy class is stored in Ruby land and prints warning
- #8352 Cyclic references in Set objects raise exception with
YAML#load
- #8355 NegativeArraySizeException while parsing Heredoc in irb in JRuby 9.4.8.0
- #8366 Jruby 9.4.8.0 fails to install psych
- #8384 OutOfMemoryError while constructing a NameError in the context of a large object
- #8398 ruby2_keywords + forwarding to native does not properly check arity
- #8412 Intermittent exceptions with ‘Java::JavaLang::NoClassDefFoundError : org/jruby/gen/RubyObject13’
- #8415 Skip extension builds for default gems
- #8416 [Possible bug] Can not start jruby-swing applications since 9.4.9.0 – or rather, the window auto-closes almost instantly
- #8417 Trivial refactoring for match
- #8421 Incorrect case tree selection when comparing long Symbols during compiled Ruby code execution
- #8424 Sort the jump tables based on new values
- #8425 Don’t clear the ThreadGroup when Thread terminates
- #8431 jruby/thread_dump.rb seems to be broken
- #8433 Root specialized object classloader at JRuby classloader
- #8436 Pass Enumerable#uniq arguments properly
- #8438 Remove rogue exit(0) that shuts down JVM
- #8441 Spaces in the path cause
bin/jruby
script to build an invalid command string - #8442 jruby.sh: Use array to handle option files
- #8457 Class#subclasses slows down with larger sets
- #8462 Optimize Class#subclasses
- #8466 jirb 9.4.9.0 – reline “cannot convert parameter to native pointer”
- #8469 fix –jdb -sourcepath command
- #8477 Update to jar-dependencies 0.5.0
- #8478 Avoid re-polling while reporting a Thread#raise
- #8479 Thread interrupt requests can overwrite each other
- #8480 Provide concrete-only traversal for Class#subclasses
- #8481 Update reline to 0.5.12
- #8488 Issues bundling psych related to the jar-dependencies bump
- #8502 Avoid loading jar-dependencies to install gem hook
- #8503 [ji] do not expose InterfaceImpl classes in Ruby land
- #8511 Update to jruby-maven-plugins 3.0.4
- #8512 Disable Maven download progress output on CI jobs
- #8515 Update jruby-maven-plugins to 3.0.5
- #8516 Strange performance difference?
- #8523 Revert multiply to use non-intrinsic exactness checks
- #8538 Backport no-inspect NameError logic
- #8557 Fixes #8355: wallpaper crash in heredoc eof error
- #8562 Use same logic as IR for kwarg handling in IO#write
- #8566 Additional teardown to aid GC and release resources
- #8567 Update thread dump hook for modern JRuby
- #8568 Process.argv0 missing
- #8570 Add Process.argv0
- #8571 Update to jcodings 1.0.59
- #8572 Use warning instead of warning when adding attr as module_function
- #8573 Update jcodings to 1.0.61 and joni to 2.2.3
- #8575 Update psych to 5.2.3
Supercharge your day: Firefox features for peak productivity
Hi, I’m Tapan. As the leader of Firefox’s Search and AI efforts, my mission is to help users find what they are looking for on the web and stay focused on what truly matters. Outside of work, I indulge my geek side by building giant Star Wars Lego sets and sharing weekly leadership insights through […]
The post Supercharge your day: Firefox features for peak productivity appeared first on The Mozilla Blog.
parallel @ Savannah: GNU Parallel 20250122 (‘4K-AZ65’) released [stable]
GNU Parallel 20250122 (‘4K-AZ65’) has been released. It is available for download at: lbry://@GnuParallel:4
Quote of the month:
GNU Parallel too. It is my map/reduce tool with built in support to retry failed jobs.
— Dhruva @mechanicker.bsky.social
New in this release:
- No new features. This is a candidate for a stable release.
- Bug fixes and man page updates.
News about GNU Parallel:
- How to Implement Parallelism and Concurrency Control (Queue) in Shell https://www.alibabacloud.com/blog/how-to-implement-parallelism-and-concurrency-control-queue-in-shell_601908?spm=a2c65.11461433.0.0.4ee35355IOL2MZ
GNU Parallel – For people who live life in the parallel lane.
If you like GNU Parallel record a video testimonial: Say who you are, what you use GNU Parallel for, how it helps you, and what you like most about it. Include a command that uses GNU Parallel if you feel like it.
About GNU Parallel
GNU Parallel is a shell tool for executing jobs in parallel using one or more computers. A job can be a single command or a small script that has to be run for each of the lines in the input. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables. A job can also be a command that reads from a pipe. GNU Parallel can then split the input and pipe it into commands in parallel.
If you use xargs and tee today you will find GNU Parallel very easy to use as GNU Parallel is written to have the same options as xargs. If you write loops in shell, you will find GNU Parallel may be able to replace most of the loops and make them run faster by running several jobs in parallel. GNU Parallel can even replace nested loops.
GNU Parallel makes sure output from the commands is the same output as you would get had you run the commands sequentially. This makes it possible to use output from GNU Parallel as input for other programs.
For example you can run this to convert all jpeg files into png and gif files and have a progress bar:
parallel –bar convert {1} {1.}.{2} ::: *.jpg ::: png gif
Or you can generate big, medium, and small thumbnails of all jpeg files in sub dirs:
find . -name ‘*.jpg’ |
parallel convert -geometry {2} {1} {1//}/thumb{2}_{1/} :::: – ::: 50 100 200
You can find more about GNU Parallel at: http://www.gnu.org/s/parallel/
You can install GNU Parallel in just 10 seconds with:
$ (wget -O – pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ ||
fetch -o – http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 883c667e01eed62f975ad28b6d50e22a
12345678 883c667e 01eed62f 975ad28b 6d50e22a
$ md5sum install.sh | grep cc21b4c943fd03e93ae1ae49e28573c0
cc21b4c9 43fd03e9 3ae1ae49 e28573c0
$ sha512sum install.sh | grep ec113b49a54e705f86d51e784ebced224fdff3f52
79945d9d 250b42a4 2067bb00 99da012e c113b49a 54e705f8 6d51e784 ebced224
fdff3f52 ca588d64 e75f6033 61bd543f d631f592 2f87ceb2 ab034149 6df84a35
$ bash install.sh
Watch the intro video on http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Walk through the tutorial (man parallel_tutorial). Your command line will love you for it.
When using programs that use GNU Parallel to process data for publication please cite:
O. Tange (2018): GNU Parallel 2018, March 2018, https://doi.org/10.5281/zenodo.1146014.
If you like GNU Parallel:
- Give a demo at your local user group/team/colleagues
- Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
- Get the merchandise https://gnuparallel.threadless.com/designs/gnu-parallel
- Request or write a review for your favourite blog or magazine
- Request or build a package for your favourite distribution (if it is not already there)
- Invite me for your next conference
If you use programs that use GNU Parallel for research:
- Please cite GNU Parallel in you publications (use –citation)
If GNU Parallel saves you money:
- (Have your company) donate to FSF https://my.fsf.org/donate/
About GNU SQL
GNU sql aims to give a simple, unified interface for accessing databases through all the different databases’ command line clients. So far the focus has been on giving a common way to specify login information (protocol, username, password, hostname, and port number), size (database and table size), and running queries.
The database is addressed using a DBURL. If commands are left out you will get that database’s interactive shell.
When using GNU SQL for a publication please cite:
O. Tange (2011): GNU SQL – A Command Line Tool for Accessing Different Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29-32.
About GNU Niceload
GNU niceload slows down a program when the computer load average (or other system activity) is above a certain limit. When the limit is reached the program will be suspended for some time. If the limit is a soft limit the program will be allowed to run for short amounts of time before being suspended again. If the limit is a hard limit the program will only be allowed to run when the system is below the limit.