Skip to main content

Blog

Notas:

Diapositivas - https://github.com/fiqus/FIT-talk-en

 

## FACTTIC - Federación Argentina de Cooperativas de Trabajo de Tecnología, Innovación y Conocimiento

* Lista de correo sólo para miembros

* Mattermost (chat de código abierto)

* Reunión mensual de la junta virtual (cualquier miembro puede asistir)

* Reuniones anuales cara a cara

 

## FIT

* Un proyecto dentro de FACTTIC donde las cooperativas comparten el estado de los proyectos en los que están trabajando

* Evolucionado a un área donde las cooperativas comparten proyectos

* Para unirse a la FIT, tienes que ser un miembro FACTTIC

* Reuniones virtuales mensuales

* Canal Mattermost para el diálogo en curso

* Las cooperativas tienen diferentes habilidades/servicios, pero cuando hay superposición, trata de no competir entre sí y determina las "necesidades" de cada cooperativa.

 

### Escenario 1: El proyecto demanda más trabajadores de los que tiene la cooperativa

* Cuando hay una necesidad de ayuda, el proyecto se comparte en FIT

* Las cooperativas pueden solicitar unirse al proyecto

* Los candidatos son evaluados y uno es elegido

* El cliente es informado y debe estar de acuerdo

* La coordinación del proyecto está dirigida por la cooperativa inicial

* El acuerdo comercial es manejado sólo por la cooperativa inicial

 

### Escenario 2: El cliente necesita que se haga el trabajo, pero Coop decide no tomarlo

* Esto podría suceder porque la cooperativa inicial no tiene los recursos o declina por una razón estratégica

* El proyecto se comparte con la FIT

* Si no hay cooperativas interesadas, se le dice al cliente que no hay nadie disponible.

* Si una cooperativa está interesada, el contacto de esa cooperativa se comparte con el cliente.  

* Si más de una cooperativa está interesada, entonces preguntamos, ¿este proyecto requiere más de un trabajador?

  * Si sólo necesita un trabajador, entonces la cooperativa que más lo necesita lo recibe.

  * Si requiere más de un trabajador, entonces las cooperativas se coordinan entre sí para completar el trabajo.

 

## Case Studies

 

### Betterez

* Cliente canadiense

* Plataforma de gestión de reservas y billetes

* Tecnologías: MongoDB, NodeJS, VueJS y Elixir

* Necesitaba más trabajo del que Fiqus podía proporcionar

* 30 desarrolladores con 7 cooperativas diferentes

* Fiqus maneja las cuestiones financieras como las diferentes tarifas de los diferentes servicios

 

### Receptivi

* Cliente canadiense

* La página web muestra en tiempo real las percepciones psicológicas del personal

* Tenía más trabajo, pero Fiqus se negó a asumir el trabajo

* El trabajo se compartió en la FIT

* 3 desarrolladores de 2 cooperativas

 

### Mall Plaza

* Cliente chileno

* Aplicación móvil que muestra los servicios del centro comercial

*Técnica: Reaccionar Nativo, PostgreSQL, Frasco

 

## Onapsis

* Cliente argentino

* Sistema web que muestra alertas de vulnerabilidad en los servidores

* 2 cooperativas

 

## FIT Internacional

* Queremos replicar este modelo a nivel internacional.

1. Compartir este modelo con otros a fin de mejorarlo y difundir la conciencia

  * Presentando en el Show and Tell

2. Construir relaciones de confianza

3. Conocerse en persona, pasar tiempo juntos

  * Viajando al Reino Unido, reunión con la federación, COTECH

  * Compartir experiencias después del viaje

 

## Preguntas y respuestas:

P: ¿Alguna vez ha tenido la resistencia de un cliente al entregar el trabajo a otra cooperativa?

  R: Hay veces que los clientes no entienden las cooperativas y la cooperación entre ellas. Explicamos el beneficio y compartimos estudios de casos. Si hay una fecha límite que debe cumplirse, es más rápido traer un equipo con experiencia previa trabajando con la empresa original que tratar de encontrar una empresa completamente diferente.

P: ¿Cuánto comparten acerca de las múltiples cooperativas que trabajan en un proyecto?

  R: Si son sólo unas pocas horas, no vale la pena hablar de ello. Sin embargo, la mayoría de las veces es importante compartir esa información y usarla como una oportunidad educativa para demostrar la fuerza de las cooperativas trabajando juntas.

* Una vez que los clientes ven el resultado de la cooperación se dan cuenta de que es una buena manera de enfocar el trabajo.    

* La simplicidad del proceso es hermosa.

P: ¿Cómo se comparten los costos de desarrollo de los negocios?

  R: La cooperativa que comparte el proyecto puede bajar sus tarifas durante el proceso de aceleración.

  * Este es un aspecto que podría mejorarse.

  * Lo más importante es ser transparente y comunicar mucho.

  * Mantener el espíritu de generosidad fluyendo.

* Cuando la cooperación es exitosa, se construye la confianza con el cliente.

* Usar una herramienta para analizar los presupuestos y el progreso de los proyectos y prever la disponibilidad.

* La cooperación también asegura la calidad, los trabajadores de confianza se unirán al proyecto.

 

 

I have watched in sadness and sometimes anger as large non-profit after large non-profit collectively poured enough money into Raiser's Edge and other Blackbaud licenses and consulting services to fund many feature enhancements for the main FLOSS alternative, CiviCRM— improvements which would then be free for everyone, forever.

I have never met anyone who actually likes Blackbaud products and services. However, many organizations felt they were the only safe option, in the sense of claiming to have everything an enterprise needs.

Now, Blackbaud failed to secure its servers sufficiently and large amounts of its clients' donor data, including personally identifying information, was obtained in a ransomware attack. This was back in May. Blackbaud ultimately paid the ransomer to allegedly destroy the data they obtained— and only late in July finally told their customers what happened.

As the American Civil Liberties Union wrote to all its supporters, current and past (including myself), this is a rotten situation:

In all candor, we are frustrated with the lack of information we've received from Blackbaud about this incident thus far. The ACLU is doing everything in our power to ascertain the full nature of the breach, and we are actively investigating the nature of the data that was involved, details of the incident, and Blackbaud's remediation plans.

We are also exploring all options to ensure this does not happen again, including revisiting our relationship with Blackbaud.

Fortunately, none of Agaric's clients are affected. But we hope everyone using or considering using Blackbaud and other proprietary services for their most important data will look at free/libre open source solutions. Code you (or your technology partner) can see and contribute to means you truly can do anything. And if you put aside the money that would be gouged out of your organization by the eTapestry, Kintera, and Convio-swallowing monopolist Blackbaud, you probably can afford to.

At Agaric, we have recently been working with CiviCRM more recently (building on experience dating back fifteen years!) and we know our friends at Palante Technology Cooperative and myDropWizard are well-versed in CiviCRM, as are many others. Please consider this when weighing your options for maintaining a strong, ethical relationship with your supporters, and let us know if you have any thoughts or questions!

In the next few weeks, Mauricio Dinarte (dinarcon on drupal.org) will be traveling to deliver his expertise to multiple Drupal events in Europe and America. He is on a mission to continue sharing the knowledge gained from many years as an active member of the Drupal community. Over the last few years he has presented numerous sessions and full day trainings at more than 18 Drupal camp— so you may have been at one of his presentations about Drupal basic concepts, twig recipes, or D8 migrations!

In addition to touring, Mauricio is very active in both local and global communities. He serves as a lead organizer of the Nicaraguan Drupal community where he has trained dozens of people, some of whom have made Drupal their career. He is also a member of the Drupal Global Training - Community Working Group and was recently added to Drupal's MAINTENANERS.txt as part of the mentoring team.

Here is where Mauricio will be presenting next:

Driven by passion to teach others what he has learned, Mauricio's skills go way beyond coding and he has been on a mission to take part in as many International Drupal Cons and Camps as humanly possible. If you happen to be in any of the cities on Mauricio's itinerary, please say hello to him and shake his hand for me. He has touched the lives of many developers and would-be developers, and started some on a path to follow in his footsteps.

Find It websites help residents find all that their communities have to offer.

Cities and towns everywhere offer children and adults myriad programs, events, and places for enriching experiences. These activities and services come from various levels and agencies of government—operating schools, libraries, parks, and more—as well as from not-for-profit organizations, civic groups, private educational institutions, and others. However, any given person—say a single parent with three kids—has no time-efficient way of knowing about all of these opportunities.

Cambridge, Massachusetts, took on this problem. No software or website can solve this by itself, but an easily searchable directory with built-in reminders and tools to help keep it up to date makes finding all available opportunities achievable. Developed based on hundreds of hours of research and interviews led by the Cambridge Kids' Council, Find It Cambridge makes it easier for parents and other care-giving adults to find the amazing array of activities, services, and resources that are available for children, youth, and families in Cambridge.

This year, Agaric gave the site a major upgrade and made Find It capabilities freely available for other cities and towns.

If this is of interest to you for your city or region, especially if you work in an afterschool network or are otherwise in the thick of bringing opportunities to children, please get in touch by e-mail, at 1 508 283 3557, or through our contact form!

Sign up below to get (very) occasional updates.

All Improvements Are Shared Freely as Free Software

Everything we do at Agaric uses software that is free as in freedom - free to install, use and repurpose for your own needs.

Our work with Portside has already translated into improving and even creating the following Drupal modules:

* Give - on-site donation forms and reporting
* Social Post Twitter - Re-post content from your website to your Twitter account
* Social Share Facebook - Re-post contnt from your website to your Facebook page
* Minimal HTML - A text format handy for short text fields

So, when you donate to Portside's fundraising campaign, you are both supporting independent journalism and the open-source software that benefits other independent outlets and websites.

Donate to Portside

Ben Melançon attending an Ujima workshop.

Benjamin Melançon and Clayton Dewey volunteer on the leadership team of Drutopia, an initiative to bring Drupal-powered websites to grassroots organizations. 

more graffiti in spain

Keyboard with the enter key renamed to "revolution."

 

Saturday, February 2nd, 1:00 - 4 p.m.

Encuentro5 Community Space
9A Hamilton Place, Boston, MA 02108

encuentro5 (e5), DigBoston, UjimaBoston and Agaric Cooperative invite your participation in an important discussion on Technology and Revolution. The event is part of a series of discussions being held nationwide and coordinated by May First/People Link and the Center for Media Justice—leading up to an international convergence in Mexico City later this year.

Notable participants include: Alfredo Lopez, author, Puerto Rican independista, and co-director of May First/People Link; and Rajesh Kasturirangan, mathematician, cognitive scientist, and professor at the National Institute of Advanced Studies in India.

What is Our Response to the Rise of Tech Giants?

Over the last few decades, technological advances have not only radically changed methods of human communication but have also started to change humanity itself in ways that grassroots organizations on the political left have been slow to address. To the extent we have done so, it has been mostly to advocate for disenfranchised communities’ access to computers and broadband internet service.

But we have largely failed to grapple with issues beyond the rise of the internet and huge corporate social media platforms like Facebook and Twitter. And we’ve barely scratched the surface of those key changes, let alone put much thought into analyzing the effects of newer technologies like robotics, artificial intelligence, big data, and genetic engineering on our communities. This is all the more alarming because rapid technological has aggravated the inequalities about which the left has traditionally cared.

Nonetheless, social-change movements continuously emerge, often in unexpected spaces, but especially in artistic and youth spaces or from insurgent social movements of the oppressed and exploited. They create campaigns to challenge potentially negative technological developments and propose more helpful community-centered technologies in their place.

Questions We're Discussing

In the interest of promoting these movements and their just agendas, this gathering will convene organizers for an afternoon of sharing and thinking together. We will be sharing information and analyses about these topics in short, plain-spoken, manageable conversations. Our thinking together will be strategic, asking and answering straightforward questions:

  • What are the most urgent and important challenges connected with technology?
  • What are the key areas for intervention?
  • Who are our allies?
  • What are our resources?
  • Before we can talk about joint and/or coordinated campaigns and targeting, what do we need?

More information at https://techandrev.org

 

Register

Today we complete the user migration example. In the previous post, we covered how to migrate email, timezone, username, password, and status. This time, we cover creation date, roles, and profile pictures. The source, destination, and dependencies configurations were explained already. Therefore, we are jumping straight to the process transformations in this entry.

Example field mapping for user migration

Getting the code

You can get the full code example at https://github.com/dinarcon/ud_migrations The module to enable is UD users whose machine name is ud_migrations_users. The two migrations to execute are udm_user_pictures and udm_users. Notice that both migrations belong to the same module. Refer to this article to learn where the module should be placed.

The example assumes Drupal was installed using the standard installation profile. Particularly, we depend on a Picture (user_picture) image field attached to the user entity. The word in parenthesis represents the machine name of the image field.

The explanation below is only for the user migration. It depends on a file migration to get the profile pictures. One motivation to have two migrations is for the images to be deleted if the file migration is rolled back. Note that other techniques exist for migrating images without having to create a separate migration. We have covered two of them in the articles about subfields and constants and pseudofields.

Migrating user creation date

Have a look at the previous post for details on the source values. For reference, the user creation time is provided by the member_since column, and one of the values is April 4, 2014. The following snippet shows how the various user date related properties are set:

created:
  plugin: format_date
  source: member_since
  from_format: 'F j, Y'
  to_format: 'U'
changed: '@created'
access: '@created'
login: '@created'

The created, entity property stores a UNIX timestamp of when the user was added to Drupal. The value itself is an integer number representing the number of seconds since the epoch. For example, 280299600 represents Sun, 19 Nov 1978 05:00:00 GMT. Kudos to the readers who knew this is Drupal's default expire HTTP header. Bonus points if you knew it was chosen in honor of someone’s birthdate. ;-)

Back to the migration, you need to transform the provided date from Month day, year format to a UNIX timestamp. To do this, you use the format_date plugin. The from_format is set to F j, Y which means your source date consists of:

  • The full textual representation of a month: April.
  • Followed by a space character.
  • Followed by the day of the month without leading zeros: 4.
  • Followed by a comma and another space character.
  • Followed by the full numeric representation of a year using four digits: 2014

If the value of from_format does not make sense, you are not alone. It is actually assembled from format characters of the date PHP function. When you need to specify the from and to formats, you basically need to look at the documentation and assemble a string that matches the desired date format. You need to pay close attention because upper and lowercase letters represent different things like Y and y for the year with four-digits versus two-digits respectively. Some date components have subtle variations like d and j for the day with or without leading zeros respectively. Also, take into account white spaces and date component separators. To finish the plugin configuration, you need to set the to_format configuration to something that produces a UNIX timestamp. If you look again at the documentation, you will see that U does the job.

The changed, access, and login entity properties are also dates in UNIX timestamp format. changed indicates when the user account was last updated. access indicates when the user last accessed the site. login indicated when the user last logged in. For brevity, the same value assigned to created is also assigned to these three entity properties. The at sign (@) means copy the value of a previous mapping in the process pipeline. If needed, each property can be set to a different value or left unassigned. None is actually required.

Migrating user roles

For reference, the roles are provided by the user_roles column, and one of the values is forum moderator, forum admin. It is a comma separated list of roles from the legacy system which need to be mapped to Drupal roles. It is possible that the user_roles column is not provided at all in the source. The following snippet shows how the roles are set:

roles:
  - plugin: skip_on_empty
    method: process
    source: user_roles
  - plugin: explode
    delimiter: ','
  - plugin: callback
    callable: trim
  - plugin: static_map
    map:
      'forum admin': administrator
      'webmaster': administrator
    default_value: null

First, the skip_on_empty plugin is used to skip the processing of the roles if the source column is missing. Then, the explode plugin is used to break the list into an array of strings representing the roles. Next, the callback plugin invokes the trim PHP function to remove any leading or trailing whitespace from the role names. Finally, the static_map plugin is used to manually map values from the legacy system to Drupal roles. All of these plugins have been explained previously. Refer to other articles in the series or the plugin documentation for details on how to use and configure them.

There are some things that are worth mentioning about migrating roles using this particular process pipeline. If the comma separated list includes spaces before or after the role name, you need to trim the value because the static map will perform an equality check. Having extraneous space characters will produce a mismatch.

Also, you do not need to map the anonymous or authenticated roles. Drupal users are assumed to be authenticated and cannot be anonymous. Any other role needs to be mapped manually to its machine name. You can find the machine name of any role in its edit page. In the example, only two out of four roles are mapped. Any role that is not found in the static map will be assigned the value null as indicated in the default_value configuration. After processing the null value will be ignored, and no role will be assigned. But you could use this feature to assign a default role in case the static map does not produce a match.

Migrating profile pictures

For reference, the profile picture is provided by the user_photo column, and one of the values is P01. This value corresponds to the unique identifier of one record in the udm_user_pictures file migration, which is part of the same demo module.  It is important to note that the user_picture field is not a user entity property. The field is created by the standard installation profile and attached to the user entity. You can find its configuration in the “Manage fields” tab of the “Account settings” configuration page at /admin/config/people/accounts. The following snippet shows how profile pictures are set:

user_picture/target_id:
  plugin: migration_lookup
  migration: udm_user_pictures
  source: user_photo

Image fields are entity references. Their target_id property needs to be an integer number containing the file id (fid) of the image. This can be obtained using the migration_lookup plugin. Details on how to configure it can be found in this article. You could simply use user_picture as your field mapping because target_id is the default subfield and could be omitted. Also note that the alt subfield is not mapped. If present, its value will be used for the alternative text of the image. But if it is not specified, like in this example, Drupal will automatically generate an alternative text out of the username. An example value would be: Profile picture for user michele.

Technical note: The user entity contains other properties you can write to. For a list of available options, check the baseFieldDefinitions() method of the User class defining the entity. Note that more properties can be available up in the class hierarchy.

And with that, we wrap up the user migration example. We covered how to migrate a user’s mail, timezone, username, password, status, creation date, roles, and profile picture. Along the way, we presented various process plugins that had not been used previously in the series. We showed a couple of examples of process plugin chaining to make sure the migrated data is valid and in the format expected by Drupal.

What did you learn in today’s blog post? Did you know how to process dates for user entity properties? Have you migrated user roles before? Did you know how to import profile pictures? Please share your answers in the comments. Also, I would be grateful if you shared this blog post with others.

Next: Migrating dates into Drupal

This blog post series, cross-posted at UnderstandDrupal.com as well as here on Agaric.coop, is made possible thanks to these generous sponsors. Contact Understand Drupal if your organization would like to support this documentation project, whether it is the migration series or other topics.

Personas de pie junto a iconos gigantes para la productividad.

La gente a menudo pregunta por las herramientas de software libre que Agaric utiliza para administrar su negocio cooperativo. En este artículo, compartiremos los recursos que elegimos para las tareas diarias de oficina y administración, así como para las comunicaciones en nuestras operaciones comerciales.   

 

Agaric utiliza software libre siempre que es posible. Por esta razón, creamos sitios web con Drupal, una plataforma  de gestión de contenido que destaca por la calidad de su código y por su amplia variedad de funcionalidades.  Como miembros de la Comunidad Drupal, buscamos contribuir activamente con los grupos que trabajan en encontrar opciones para su mejora y ampliación. 

La necesidad de una tecnología responsable - Parte 1 

Quizás podrán preguntarse por qué decimos "Software Libre" y no "Código Abierto", ya que en ambos casos esencialmente es lo mismo. Nosotros preferimos este término porque incluye los principios éticos sobre el respeto a la libertad del usuario. La ética del software libre dice que los usuarios merecen control sobre el código que usan, mientras que el uso del término "Código abierto" se refiere solo  a permitir que los usuarios participen en el desarrollo. Nosotros apoyamos la idea de un software que proteja nuestros derechos y nos evite estar vulnerables. 

A wave splashing over a migrating loggerhead sea turtle on a beach.

Work

Sign up to be notified when Agaric gives a migration training:

Coordinate with all of the city's service providers together on one platform

Add service providers to the platform and check for gaps and redundancies in services offered throughout the city.

 

V. Auxiliary Tech Projects

CoopGuide

Coop Guide - Cooperative Collaborative Development

Working together on projects is one of the most important goals of our tech coop. It is also the 6th Cooperative Principle, Cooperation among Cooperatives.  CoopGuide is a work in progress being built to facilitate team members in locating each other and getting familiar with each other's skills. The idea for this site came from discussions at Agaric's weekly Show and Tell gatherings. 

SnowDrift

Snowdrift Cooperative

A crowdmatching platform that is a fund raising source for public goods. The first project will be to fund the building of Snowdrift itself. Micky is on the board and is working with the team to guide the formation of this cooperative effort.

IEEE.org SA Open

IEEE SA Open.

The SA Open is a platform, by the IEEE and managed by LeadingBit, that
aims to create a set of agreed upon standards to help people, both technical and organic, co-work more effectively to build Free Software with proper documentation and support materials on using and changing it. Agaric volunteers as a member of the Community Advisory Group, where we offer our expertise on this very subject. You can get involved with SA Open and help make it happen.

meet.coop

meet.coop logo.

Meet.coop is an online meeting co-operative dedicated to hosting BigBlueButton video chat servers in multiple locations around the world. Agaric is a member.  We meet weekly in different teams to work out the governance and member issues. There is an operational team that builds and maintains the hardware and software for providing an excellent video conference network structured in Sociocracy, also called dynamic governance. Meet.coop has forums where you can mingle with members and get up to date information on the development and learn more about the project.

Mastodon

mastodon logo.

Mastodon is a federated social network made up of affinity groups. The functionality is much like Twitter, where you can message other members and share information or "Toots" as they are called, in a group or one-on-one. You can join a sub-community or create your own. Agarics are members of the social.coop sub-community. Members can contact members of other sub-communities and there is a directory where you can browse the groups in the whole federation.

Mass Mesh

MassMesh.org logo.

Mass Mesh is a high-tech social club building community-owned mesh networks throughout Boston. These networks enable home Internet access that is fairer, more secure, and more locally resilient than traditional cable. The purpose of this wiki is to provide you with all of the information you need to join the mesh by setting up your own mesh node. All of the information on their site and all of the code in their software is free to use share and edit.

Blog

A brindle rabbit coming out of a rabbit hole in desert-like dirt.

Turning off links to entities that have been Rabbit Holed in modern Drupal

You have used Rabbit Hole module to prevent people from being able to directly visit to select content items, but when you include those items in a reference list Drupal is still linking to them.

Here is one way to fix that.

Knowledge is not power.  Power is coordination.

Scaling Community Conversations and Decisions presentation @ FluConf

How can a group of thousands of people talk about and decide anything? How's this 'community' concept supposed to work at scale, even in theory?

Any Free/Libre Open Source Software project will have elements of do-ocracy (rule of those who do the work), but not all decisions should devolve to implementors. A better ideal is that decisions should be made by the people who are most affected.

Is Drutopia right for you? Drutopia versus other low-cost options

Building your website on Drutopia has the advantage of allowing multiple people to create content of different defined types that can be clearly related related to one another, listed and presented in different ways, and filtered.

When There's Not a Module for That: How to Make (and Maintain) a New Module

You've built sites with Drupal and know that with a few dozen modules (and a ton of configuring), you can do nearly everything in modern Drupal.

But what do you do when there's not a module for that? When the modules that exist don't meet your needs, and cannot be made to by contributing changes?

You make your own.

This blog post accompanies helps you take that step. Making a module is something that anyone can do. Every person developing a module is still learning.

The Nonprofit Technology Conference (NTC) is one of the largest of its kind and is happening in Portland from March 13th-15th. On March 12th, the day before NTC a "Pre-Conference Day" is taking place to take a deeper dive into working with specific tools such as Drupal and Wordpress.

If you haven't already, you can register for NTC and the Pre-Conference Day at http://nten.org/ntc/registration/.

Ben and I will be presenting on migrating your website to Drupal 8. Here are the full details. Hope to see you there!

Migrating to Drupal 8 with Confidence

March 12th, 2:15-3:15pm

Drupal 8 is a powerful platform, with features many nonprofits are using to deepen their impact. However, migrations to any new platform can be hard. Fortunately, Drupal 8 comes with a suite of migration tools built-in, helping organizations migrate their website from previous versions of Drupal or any other source. As of Drupal 8, Drupal has also changed its development process so that features are continually added and upgrades to future versions will no longer require migration, so this may be the last migration you need to do!

We’ll walk through what is needed to effectively prepare for a migration, touching upon the specifics for WordPress and Drupal 7. Using real world examples, we’ll then look at what migrating users, blog posts and other content looks like. The session will wrap up with important “gotchas”, a list of further resources and time for Q&A. By the end you’ll have the tools and resources needed to migrate confidently.