Jeffrey A. McGuire 0:00
Welcome to Application the TYPO3 Community Podcast.
Annett Jähnichen 0:07
I'm Annett Jähnichen, and this is Application, the TYPO3 Community Podcast, sharing your stories, your projects, and the difference you make. One to
Jeffrey A. McGuire 0:20
Welcome to Application, the TYPO3 Community Podcast. I'm Jeffrey A.. McGuire, you can call me jam. And this is where we celebrate the TYPO3 community sharing your stories, talking about your projects, and the difference you make in around and with TYPO3 CMS.
Annet Jähnichen 1:48
I work in middle agency in Dresden called Webit. We are about 70 employees. We did websites and applications for our customers. And for example, we work with TYPO3 and Sitecore or we produce Ruby applications. And I'm working on the TYPO3 department and we did some websites for local tourism agencies or some transport companies. If you know in Germany Verkehrsverbund Rhein Ruhr (VRR). Oh, yes. Yeah. And we did the website for them.
Jeffrey A. McGuire 2:38
I use their trains and their data feeds regularly. I have an app for that hear. Yes. But we did not do the app, but the website. Nice. So do you do TYPO3, only TYPO3 at work?
Annett Jähnichen 2:51
Yes. The whole time? Yes, I'm working as integrator and developer. So I'm on my daily work is to transport the HTML and CSS stuff we get from our front end department and transport it to templates for TYPO3. And we also developing applications for our customers. So if they have individual stuff to do, so we could code some extensions, TYPO3 extensions for them.
Jeffrey A. McGuire 3:28
And that's taking whatever business logic they need and whatever custom features they need, and putting them together in a package. So that TYPO3, oh, Allah produce that and let them let them get on with their work and doing their business. Right. For people who are less familiar with TYPO3, this is a TYPO3 community podcast, but other people are allowed to listen. We're TYPO3 has a really, really interesting, I guess, I wouldn't, it's not exactly a quirk. But on the one hand, it's always been a so called headless system TYPO3 out of the box, you can get some starter versions where you fire it up, and there's a website, but out of the box, it doesn't have a front end, which is interesting. So it's been headless, quote, unquote, forever. And that means that when it outputs the result of your business logic, you have always been able to choose, is it going to be a web service? Is it going to be HTML? Is it going to be whatever you like, which is really cool. And obviously, since it's API driven, it'll ingest data and queries from wherever and then and deal with them. So that's neat. The cork the unique feature is that TYPO3 has an integration layer and its own templating language to connect the front end and the back end or do some other tricks along the way. Can you talk about working in that layer, like talk about the job of the integrator a little bit,
Annett Jähnichen 4:53
you have to choose an engine or an extension, which you can use For templating we work with fluid style content,
Jeffrey A. McGuire 5:06
for example. And, and fluid is TYPO3 own open source language for that,
Annet Jähnichen 5:13
right? Yeah, we wrote our own custom content elements, for example, which offers the needs the customer had, right? We did some integration stuff for that. So you have to also write tcaa stuff,
Jeffrey A. McGuire 5:33
Table configuration array,
Annett Jähnichen 5:37
the template part, the TS config part for content elements and the TypeScript part for content elements. So you have to know many configurations stuff, and also have to know, for the templates, we use fluid fuel helpful in which offers with TYPO3 our ship with TYPO3, and you have to know if you help us what you could do with them, and how you could format or manipulate your data you get from the back end, right? To have a good look on the front end.
Jeffrey A. McGuire 6:17
Right. And I find it really interesting that when you're implementing the whatever you need for a specific project. So TYPO3 comes with a lot of functionality out of the box to make content rich client websites, it's a kind of a tool by agencies, for agencies, I find it really interesting that when you then need to add or change functionality, you have a choice of writing extensions, that go into the backend and affect or change or extend core functionality. Or you have this layer in the middle where you can change and influence inputs and outputs without actually touching the core, right? The integration layer does translations and additions, what things have come out of the back end, and they can affect what goes into the back end at the same time. So it's kind of like an extension wrapper somehow at the same time, right?
Annett Jähnichen 7:08
It's easy to extend this stuff. Because if you did not get or that does not exist, if you help, which do your work or your job, then you can use given few helper and extend them and adapt to your needs. And it's easy, because it's PHP, and
Jeffrey A. McGuire 7:30
and essentially, you're dealing with with base classes and and extending the classes on top of them. And it's totally programmatic and totally familiar if you're at all, you know, if you've seen object oriented code before, right? So when did you discover TYPO3 And how did that happen?
Annett Jähnichen 7:49
When in I guess it was in 2010. Because I finished my university degree, then I work for an agency and they used TYPO3 in one project was the first time I get in contact with TYPO3. And since then, I am using it every day.
Jeffrey A. McGuire 8:13
Since 2010.
Annett Jähnichen 8:15 Yeah, was 2012, I switched the agency to weapons. And since 2012, I'm working for weapons and use TYPO3. Yes.
Jeffrey A. McGuire 8:27
So coming up on 11 years of working in TYPO3 full time, right? What is it that caught your eye? I mean, so somebody told you to use this thing, right? It just happened? Why did you stick with it? What was it that you liked about TYPO3, and that you're still doing it? A decade later?
Annett Jähnichen 8:48
Yeah, I like that TYPO3 very flexible in the use, because you could use it for very small websites. Or you could use it for very huge websites where you did many extensions for your customer. And you could start with a very small website and use something like a bootstrap package also for your front end output. And it's very easy to implement and to adapt them in the next steps or in the next years. You could extend the whole website and use it and it's very stable. Many installations work on the same version since Yes, and it works.
Jeffrey A. McGuire 9:36
It's great that it's so stable but if you're running a typo three version for site live today. I'd like to know why you've stayed there because it's not supported and maybe not and secure like it should be. And because TYPO3 three stability includes really, really solid upgrade paths. So upgrading between the versions, if you don't do anything crazy with your extensions is pretty straightforward.
Annett Jähnichen 10:07
I think it was worse since TYPO3 six, two, but it's even getting better. an upgrade between version nine and 10 is very easy and very delightful. And also between eight and nine is also, okay, not so hard, then switching from 4.5 to 6.2. And from 6.2 to another version, yes,
Jeffrey A. McGuire 10:36
those were the big hurdles, obviously 6.2 is the rebirth of TYPO3 and the beginning of all of the PSR standards and the sort of roadmap and professional development strategy that's been going on for for a while now in the community. So part of what I think would be great for the project is there was a downtime, there was a hiccup in between version four and version six. And it's because there was a fork, there were some differences in opinion about how the project should go forward. And another project was born out of that time. I think that it's a great time now to introduce people to TYPO3. And I would really, really like to see it spread beyond Central Europe again. And I think it has a legitimate place on the open source CMS landscape. And it could really, really help a lot of companies do do really great things. So that's part of what I want people to learn by listening to conversations like this. Yeah, so you're in the TYPO3 department you said of 70 person agency, which is a, which is a decent sized agency, that's, um, you know, dies. In Germany, I was wondering if you have any insight into how and when you choose you being the agency and your clients, when you choose Sitecore when you choose TYPO3, when you write a custom application.
Annett Jähnichen 12:00
We are not so involved in the whole process. But we ask our if a customer came and said I want a website with disentis functionalities. Yeah. And then we could say, Okay, what TYPO3 we could do this, and this, or we could do it like that. And it costs an amount. rent and decision is in our chief.
Jeffrey A. McGuire 12:29
Aha. So you would you would talk with the with the sales team, and you'd say, for the thing that they're asking for, we would need three months work and five developers and and that means such and such time, money, whatever. And then I guess the Sitecore team could go and also give the same sort of information, right? And the custom application team maybe as well. Yeah, I'd love to have a conversation with somebody who is happy to sell both, I'd really really like to know the differentiation because from an open source perspective, right, and knowing that a CMS, like TYPO3 can really handle a great number of use cases on the web. Well, we'll we say, hey, the money you spend goes into features, every piece of the budget goes into actual work, actual feature development, actual design, and we get this whole base system for free. Right. And then when you talk about Adobe web experience manager, when you talk about Sitecore, when you talk about the proprietary systems, the first money you spend is to buy permission to try to use it, and then see if it's going to do the job. It feels way less efficient to me. So I'd love to have a conversation with someone who will tell me why that's a good idea sometimes, too, because because I don't see it right now. Obviously, we're biased. So I should give you the number of my heart, right. And then and then we have the follow up episode. Yeah, right. You're already looking it up. Okay, cool. That could be a fun panel discussion as well, because maybe like the people from the different teams could also compare notes on that. That might be fun. If anyone listening thinks that would be fun or interesting, please let us know, in comments or social media or what have you. And that'd be great to know. I would like to know what your favorite features are of TYPO3.
Annett Jähnichen 14:21
I like that it's multilingual. Well, yeah, regenerate. I also like to configuration in the back end. So you could configure or, let's say, user roles or user access, and very small parts so that you can give your editors only permissions for the right things. And that you could extend the core. You could use functionality from the core and extended for your use cases.
Jeffrey A. McGuire 14:57
I also like that you can apply hierarchy organization to a lot of different parts of the system. And you can configure your access on the page tree hierarchy. So you could have groups of editors working on only on one website, or only in one language or only on something, you know. And that feels really, really powerful to me. And that hierarchical structure can be so many other things as well. I think that's I think that's really cool that, that gets me excited every time. What is something that people don't know about TYPO3, that they should?
Annett Jähnichen 15:34
I think it's not so complicated how they think they are now some people had it in mind.
Jeffrey A. McGuire 15:41
Right? The back end, years ago, was was very complicated and not very friendly. It's got really clear icons and colors. It's a great user experience. Now, the balance between flexibility and complexity, and usability is quite good, you know, for for a professional system
Annett Jähnichen 16:00
could be better. Yeah. But it's not so complicated how most people think, because they only know the back end from version 4.5 or 612. And that was a little bit more complicated. And now it's more clear. And
Jeffrey A. McGuire 16:18
yeah, yeah. And the backend now is, is also responsive out of the box, and it works great on a phone, it works great on a tablet, that's pretty, that's pretty powerful. Not that I want to work on a website all day on my phone. But if there's something I need to do, I it's actually it works quite well. It's easier than you think, hey, that could be the new project, moto moto turbo three. It's not as it's not as hard as you thought. Maybe you've been involved in title three for more than a decade now. And you also contribute to the system, would you talk about so what the TYPO3 initiatives are and why someone should join an initiative?
Annett Jähnichen 17:01
Yeah, and the TYPO3 initiatives are interest groups, forTYPO3, maybe accessibility, or in our, in my case, structure content, if you want to get some progress in this field, so you could join with other who are interested in this topic. And then you could create or found an official initiative for TYPO3, and then work on the topic and get some progress or some improvements like the PVA or pw a initiative or the Accessibility Initiative and structure content. And we had the routing initiative, I guess, and they did a great job. And the last words,
Jeffrey A. McGuire 17:49
how do I find these initiatives? If I'm not sure? What are what do I how do I go and dive into something?
Annett Jähnichen 17:54 You could search on the TYPO3.org web page, there's a whole page about all existing initiatives. And you can find information on how to create or how to found a new initiative, if you like?
Jeffrey A. McGuire 18:09
Or if you have that much free time.
Annett Jähnichen 18:12
Yeah. And you could also find connections to existing initiatives. So every initiative has its own Detail page on TYPO3dom. org, where you find information about group members, and what are the goals of the initiatives? And in which time frame they would like to achieve? Get up? Or get projects and so on?
Jeffrey A. McGuire 18:36
Yeah, great. Okay, so we'll put the link to that page in the, in the post in the show notes for this episode. Talk about the structured content initiative, what is it? Why did you join it and what's going on there?
Annett Jähnichen 18:50
and 2018 on the TYPO3 camp, MIT, Germany,
Jeffrey A. McGuire 18:57
central central Germany,
Annett Jähnichen 18:59
and for Germany, we held a presentation about template engines and extensions, like Grid Elements or flux are, there's a lot of competition. And yeah, we compare them a little bit. And in our agency, we use for the most projects, Grid Elements or template Allah in old projects, right. And there was always the opportunity to create container elements like two column and so on. amused is often for our customers to get them or to let them create their own layout for the web pages. So it's a huge part in our daily work. So and we ask, why is it not part of the TYPO3 core to ship that content elements and that was 2018 and 2019. How Another presentation on the TYPO3 camp central Germany get an overview what's happened in this last year and what's not quite much. So, yeah. And then Matthias Shreiber, co
Jeffrey A. McGuire 20:17
CEO of the TYPO3 GmbH company,
Annett Jähnichen 20:20
yes, give us the advice to do some slack calls for interesting people and talk about the topic. So we start with secours in 2019 and discuss the first stuff, we compare different CMS and how they deal with this topic. And we compare, for example, WordPress, or Sitecore, or NEOs. And, yeah, and then we discuss what we understand when we say structured content, for example, right, is for us and what we want to achieve.
Jeffrey A. McGuire 21:00
Right? So my question there is exactly what is structured content in this case, because for me, having lived in CMS is in content management for a long time, I see a separation between content and presentation. And if you say content element to me, I can understand that we want semantic elements like this field is a phone number, this field is an image with all data. This is a title, this is a text, right. And that's semantic structure, that I can then present how I want. And as soon as you tell me, Well, my editor in the same place can choose two columns, or three or something that's presentation. And I wonder, I wonder where the how that how that gets sort of safely taken care of?
Annett Jähnichen 21:45
Yeah, because I also this presentation is related to a hierarchical structure of content elements. And you have to save this also, in the back end? How is this phone number related to a text box or a menu are? Is it before? or after? Is it mobile or not? And something like that? So yeah, it's really hard to explain. And we all have different opinions also in our initiative. Ah, yeah, we discussed that a lot. And we tried to find some topics to do for TYPO3 due to even get it better for editors. We working also, for a user experience better UI for back end, we work on maybe a solution for a dynamic grid system in the backend built in. And we also work for creation, or create new content elements via composer extensions. So you had a composer package for your own content element, and you could registrate them with composer installation.
Jeffrey A. McGuire 22:59
So then you can manage them as dependencies, and you can version control them and export them to other projects, I guess.
Annett Jähnichen 23:05
Right. We also are working on rendering, we try to find a better solution for fluid style content. The idea is to ship rendering extension with every version of TYPO3. So you have the new stuff in the new version of TYPO3 and not fluid state content in every version. It's also a goal from our initiative. And yeah, we're working on that. And it's hard because we are not so much people.
Jeffrey A. McGuire 23:36
As that makes it easier to come to consensus, but harder to get the work done.
Annett Jähnichen 23:42 Yeah. Because many of us are more related on the concept. We did at first, for example, create some personas. Yep. And and now we are working on user stories, to find ways to explain how the behavior in the back end could be better. Do you have an example user story there? And editor want to create a custom content element? With the custom content, new custom content element wizard? I don't know. Sorry, I have to look up. But you could find some user stories in our GitHub
Jeffrey A. McGuire 24:25
project. Great. But I mean, the fundamental, the fundamental is somewhere how the developers and the business needs structured data that we can use for every purpose now and later. And the editors and the website, visitors need to put it somewhere and know where it's going and make sure that it's easy and usable to consume, right so that the marketing team can convince them to to buy a demo to get a demo or buy a widget or whatever. So there's a it's a really, really interesting crossover have problems there, you know, you can make it super easy for the editors and make it terrible for developers like some systems do. But making it great for everyone. That's really, really interesting challenge.
Annett Jähnichen 25:12
Yeah, but I guess in the last few versions of TYPO3, the focus was more on developers and integrators, to get some new stuff for them. And it's also important to get some output for the editors. So the better behavior when they do their job,
Jeffrey A. McGuire 25:31
I've been in the CMS and open source world a little longer than you and I come from the time where it was all developers and only developers, and open source stuff never looked pretty, because who cares about pretty it has to function right? Over time, when that sort of person who was was the only sort of person who could build your website, then you got what you got. But now, people have really, really beautiful experiences on these on these supercomputers that we carry in our pockets. And they expect things to be easy, and they expect things to work. So we really, really have to live up to that sort of expectation, because otherwise, if they start complaining, somebody will hear that complaining, and then they'll be like, let's find something else. And then if we care about our system, or the sustainability, the project that we have to focus on that as well.
Annett Jähnichen 26:16
Yeah. Also, sales arguments for marketers is important. So if they have to explain why the customer have to choose a TYPO3 version 10 instead of nine or eight, right, and we have to find some arguments. Yeah, then you could do this and this better?
Jeffrey A. McGuire 26:36
That's an interesting question in because at some point in late 2020, I would only ever offer someone a TYPO3 10 site first. And why would I offer them a version nine site right now? It's still supported for a while. But
Annett Jähnichen 26:52
yeah, to get documents for the upgrade? So
Jeffrey A. McGuire 26:56
Ah, and then it's tricky. Depending on the sale, you have to make I can sell the upgrade easier to a developer who knows, oh, well, now we cover middleware, the PSR middleware standard. And now we do this and this, and we've reimplemented, the such and so like, that's all easy, but I'm explaining the business value of upgrades is trickier, right? Do you ever do ever talk with the end clients about that sort of thing.
Annett Jähnichen 27:20
And we did use a survey for our initiative. And we asked editors, many questions about how they do things in the back end, and how they create content elements and how long they need for this topic, and was interesting. The results were very interesting. Yeah. And we worked with this results to get better decisions on what we plan to do with each module and something like that.
Jeffrey A. McGuire 27:54
The other the other old problem was we built what we thought people wanted without asking him what, what they did. That's what we did not want to do. What was the first version of TYPO3 that you encountered? 4.5? Is 4.5. Is it? So your first glove? Or do you have a give a favorite version to version 10? version 10 is your favorite version 11 is going to be your favorite and version 12 is going to be your favorite. Yeah, it works. Yeah. Because, yeah, improvements are even getting better. Yeah. What's the best thing about version 10? That is better than version? None
Annett Jähnichen 28:31 better than version nine? Oh, I did not know if there's so much visual difference between nine and 10. But there are some improvements. Yeah, but under the hood, it's more more improvements for developers, like PSR standards or implementations for extensions.
Jeffrey A. McGuire 28:52
Right. So version 10, was a cleanup release in the grand semantic versioning tradition. deprecated stuff was dropped. And everything was made as stable and as clean as possible. And because TYPO3 does semantic versioning then during the major release cycles, the core team can actually add functionality within the major version, which is pretty cool. So so then the big, the big development jump doesn't come at 10.0, it comes getting to the long term support version. That's the thing that I hear there is lots under the hood for developers that's that's nicer and cleaner. And frankly, for end users, the fact that it doesn't look much different at all to version eight or nine is great, right? There's a usability concept that you actually concept that's really familiar, and you don't have to spend time, you know, teaching and helping people cope with something radically different. So I think that stability, it that goes to what you were saying about installations that run for a long time, about consistency about easy upgrades. I think that adds to the sustainability of the system and it's a good it's a good argument for why to invest in this because I think you can get a lot out of it over the years. Right? I like to do it little thing on the podcast called the suggested guest. And I'd like to know who you think I should talk with, apart from your sales team, because that's super interesting.
Annett Jähnichen 30:12
Okay, then I have to give you the phone number of my boss, maybe. Yeah. And for instance, my suggestion would be hashtag for QA. Yes. BOARD MEMBER. She's great, right. And she's working also for our initiative since last year, right, and do a lot of work in UI and UX experience as a user experience, and did a great job for our initiative and menu work. And she's an interesting person from France. And so,
Jeffrey A. McGuire 30:49
yes, she's great. I know her and like her very much. And she will definitely be on this podcast. So okay, thank you for that. You have used TYPO3 a long time and contributed to it and part of your contribution is now in this structured content initiative. Can you tell me about a time that the community helped you?
Annett Jähnichen 31:08
A lot, because I was participate on many TYPO3 events like developer days, or bar camps. And in if I had a problem of a project, then I could go to the people from the community and ask them, What could I do? And they give me advice and say, Look there or use this function or get this an extension for that? And yeah,
Jeffrey A. McGuire 31:36
so people are generous with with help and information, sharing. Nice. who stands out? I don't know, is that is there someone in particular, you said, everyone is ready to help
Annet Jähnichen 31:45 everyone? Yeah, because I get help for solo extension, I get help for security issues, I get help for front end groups in rehab, I get help for using TYPO3 of PostgreSQL instead of MySQL. I get help for using Grid Elements. And what could I do with that? And what could I not do with that?
Jeffrey A. McGuire 32:13
For example, are you just as helpful? Are you also answering people's questions and ready to help them when that when that comes up? When I was asked from someone, then yes, you are just as generous with sharing what you learn when you get the chance to share it right? If somebody comes to your needs to know something,
c 32:31
yeah, because for example, in our agency, we also had new people or new employees, and I'm sharing my knowledge with them, and try to get them involved into TYPO3 and explain TypeScript or Ts config and something. So I share my knowledge with them. Also, if you ask me something about our initiative, I could give you an answer. Right? I present our progress on bar cams, for example.
Jeffrey A. McGuire 33:02
Yeah. Plus, when you get the juniors in your office, the first thing you tell them is clearly, look, it's not as hard as you think. Right. I wish I could do that.
Annett Jähnichen 33:17 Yeah, because the most points I get from them is why we have to use TypeScript. Yeah.
Jeffrey A. McGuire 33:26
Like, what do you tell them?
Annett Jähnichen 33:28
Yeah, because it's part of TYPO3 since use and works. Yeah. But maybe in the future, we get better solutions for that. And yeah, make,
Jeffrey A. McGuire 33:39
and that's a typo script is, is an essential part of that integration layer that we touched on earlier in the conversation.
Annett Jähnichen 33:46
Yeah, we also had to go in our initiative for the content blocks, registration API, or of the content block registration, to use more Symfony types in your definition of your content element. Now, we have to map this with tcaa. Yes, maybe in the future, we get more together with Symphony types. For example, set of tcaa.
Jeffrey A. McGuire 34:12
That would be interesting. From a compatibility angle. I think that it would be a more, quote, unquote, standardized way to work nowadays. And I wonder if it would help build shareable applications and extensions, that's so interesting. Can I have to think about that? Now I'd like to, I'd like to share a personal moment. And that's family name has my favorite sound in German and the one that I worked on really, really hard. When I was learning German. There's this very soft gentle sound. And, and yeah, and as a foreigner, you have to learn to say ish, right? And then urination is so and then the other thing of course, I live in Cologne, and I am I am a proud what we call an Emmy. Do you know what an Emmy is? No, an Emmy greater culture. Yeah. Okay, and so the Cologne dialect there are several German dialects that do this but cologne they use the what? In German it's called the phonetically shown a lot which is like you take the little version like like I don't know when Scotland you say like oh we something you know a little bit in Cologne you don't have a Carter you have a caption, whatever I youngish is right, then you have a year in Russian and it just feels like Ah, so nice. It could almost be something something Highlanders. So okay, good. So we only had friends in in one, punch and curls are very similar. But they're not, they're not quite the same that that little, they're right on the border with the Rhineland plants. And they're still rhinelander you know, not pizza, but it's already. Plus, they got to have the government for all those years. So they think that there's something special in bond, you have to have to keep your eye on those. But hey, it's been really really, really great talking with you. I've really, really enjoyed it. I'm really, really grateful that you could take the time to talk with us. And on your week off as well. Thank you so so much for having me. Yeah, thank you for your contribution. And I hope if we can ever travel or do events, again, I would love to hang out at the TYPO3 capital Dutchman that would be super, super fun.
Annett Jähnichen 36:38
Yeah, maybe next year. It's in Leipzig, if it's possible, right. Exactly. Yeah. Yeah. But if you had the opportunity to come to trace and I will go with you and show you my city and tastic.
Jeffrey A. McGuire 36:54
And can we drink a typical speaker? Yeah, maybe. Okay, it's a deal. So and anyone who dresses is a really, really, really beautiful city, and it was terribly terribly damaged in the war. And they have spent the entire time since then fixing it and it is wonderful. There are some of the best museums in the whole country, especially if you like art. resin was the first place that I drank a beer called speckle and a few beers. Speaker is a Pilsner, but it's not filtered. So it's cloudy like a wheat there. But it's a Pilsner. And it's great. And Annette is there. So there are many, many reasons to go to dressing. Yeah. Alright. Hey, thank you so much. Yeah. Bye.
Thanks to the TYPO3 Association for sponsoring this podcast. Thank you, b 13. And Stefanie Kreuzer for our logo. Now see, beaucoup de como, TYPO3 developer and Maestro Patrick Gaumond the noun for our theme music. Thanks again to today's guest. If you liked what you heard, don't forget to subscribe in the podcast app of your choice and share application the TYPO3 community podcast with your friends and colleagues. If you didn't like it, please share it with your enemies. Would you like to play along and suggest a guest for the podcast? Do you have questions or comments? reach out to us on Twitter at TYPO3 podcast. You can find show notes, links and more information in our posts on TYPO3.org. Remember, open source software would not be what it is without you. Thank you all for your contributions.