<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Antonio</title>
    <description>The latest articles on DEV Community by Antonio (@antoniogamiz).</description>
    <link>https://dev.to/antoniogamiz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F32464%2Fd25449d3-653d-43d2-9295-8283bb00d8ff.jpg</url>
      <title>DEV Community: Antonio</title>
      <link>https://dev.to/antoniogamiz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/antoniogamiz"/>
    <language>en</language>
    <item>
      <title>How to create big aggregates in DDD</title>
      <dc:creator>Antonio</dc:creator>
      <pubDate>Tue, 10 May 2022 13:29:50 +0000</pubDate>
      <link>https://dev.to/antoniogamiz/how-to-create-big-aggregates-in-ddd-1fno</link>
      <guid>https://dev.to/antoniogamiz/how-to-create-big-aggregates-in-ddd-1fno</guid>
      <description>&lt;p&gt;Hi! My name is Antonio and I have been reading about DDD for quite some time. I think Domain Driven Design is the right tool for some enterprise applications, so recently I have been trying to use it on my company. &lt;/p&gt;

&lt;p&gt;Before continuing reading, I'm assuming you have a good knowledge about DDD and related concepts (sorry for not including an introduction, but I think there are already too many introductory articles about DDD, so I don't feel like writing another one).&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem
&lt;/h2&gt;

&lt;p&gt;So, what problem am I facing with DDD? &lt;strong&gt;Big aggregates implementation&lt;/strong&gt; (emphasis on implementation and not design).  When I say big, I do not mean they contain a lot of different entities or a lot of dependencies, but many instances of the same entity. For example, a bank account aggregate has one child entity: a transaction. Now, that bank aggregate can have hundreds or thousands instances of that entity. &lt;/p&gt;

&lt;p&gt;Let's suppose that my company domain is about &lt;code&gt;Roads&lt;/code&gt; and &lt;code&gt;Stops&lt;/code&gt; (this is just an example). Both things are entities because they have an identity. In this case, &lt;code&gt;Road&lt;/code&gt; would be the root aggregate and &lt;code&gt;Stop&lt;/code&gt; would be a child entity of that aggregate. Let's say they have two or three fields each, it does not really matter. Here is a quick implementation of that model in Python (I have not used dataclasses and a lot of the logic is missing because it's not important for this discussion):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Road&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;stops&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;latitude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;longitude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So now, you need to create a repository to retrieve those entities from storage. That's easy enough, just a couple of SQL queries or reading a file or whatever you want to choose. Let's suppose this is our repository (let's avoid interfaces, dependency injection and so on because it's not relevant in this case):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RoadRepository&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
     &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Road&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
         &lt;span class="p"&gt;...&lt;/span&gt;
     &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;road&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Road&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
         &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Easy enough, right? Okay, let's continue implementing our model. The &lt;code&gt;get&lt;/code&gt; method is really easy, but the &lt;code&gt;save&lt;/code&gt; method has a lot of hidden complexity. Let's suppose we are using a relational database like &lt;code&gt;postgres&lt;/code&gt; to store our entities. Let's say we have two tables: &lt;code&gt;roads&lt;/code&gt; and &lt;code&gt;stops&lt;/code&gt; and they have a relationship and so on.&lt;/p&gt;

&lt;p&gt;In order to implement the &lt;code&gt;save&lt;/code&gt; method, we would need to update all of our child entities. &lt;strong&gt;And that's the problem&lt;/strong&gt;.  What happens if our &lt;code&gt;Road&lt;/code&gt; instance has 345 different stops? How do we update them? I have not a final answer for that, but I have some proposals!&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution 1
&lt;/h3&gt;

&lt;p&gt;This would be the equivalent of solving the problem by brute force: delete everything and recreate it again. &lt;/p&gt;

&lt;h4&gt;
  
  
  Props
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Easy to implement&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Cons
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Not sure about the efficiency of this one. but I estimate is not that good. &lt;/li&gt;
&lt;li&gt;If you set the unique identifiers on the database level, you are going to have a problem keeping the same identifiers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Solution 2
&lt;/h3&gt;

&lt;p&gt;Keep track of all the changes at the aggregate level. Something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Road&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;stops&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update_stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="n"&gt;some&lt;/span&gt; &lt;span class="n"&gt;logic&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_changes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
           &lt;span class="s"&gt;'type'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'UPDATE'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
           &lt;span class="s"&gt;'stop'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we would read that list of changes on the repository and apply them individually (or in bulk, depending on the change type, for instance, we can group together the deletions, creations, etc.).&lt;/p&gt;

&lt;h4&gt;
  
  
  Props
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;It's more efficient than the first solution because in average requires less db operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Cons
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Our domain has been contaminated with logic not related to the business.&lt;/li&gt;
&lt;li&gt;A lot of code is necessary to keep track of the changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Time to discuss!
&lt;/h3&gt;

&lt;p&gt;What do you think about this problem? Have you faced it before? Do you have any additional solutions? Please comment it and we can discuss it :)&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>ddd</category>
      <category>aggregate</category>
      <category>domain</category>
    </item>
    <item>
      <title>Work report. Week 8</title>
      <dc:creator>Antonio</dc:creator>
      <pubDate>Wed, 24 Jul 2019 08:28:51 +0000</pubDate>
      <link>https://dev.to/antoniogamiz/work-report-week-8-48ll</link>
      <guid>https://dev.to/antoniogamiz/work-report-week-8-48ll</guid>
      <description>&lt;p&gt;Welcome to a new work report! Sorry for being two days late, I've had a lot on my plate these days. Let's see what happened this week :D.&lt;/p&gt;

&lt;h3&gt;
  
  
  P6DOC
&lt;/h3&gt;

&lt;p&gt;I am not sure if you know this tool: &lt;a href="https://github.com/noisegul/perl6-p6doc"&gt;p6doc&lt;/a&gt;. It's being improved by one of my partners in #gsoc2019, Joel. It's a command line interface to consult the Official Perl6 Documentation. Something similar to &lt;code&gt;man&lt;/code&gt; but for Perl6! &lt;/p&gt;

&lt;p&gt;I tested it out this week and I thought it would be nice to integrate my project with that tool to improve the consulting time. So I write down my ideas in a &lt;a href="https://github.com/noisegul/perl6-p6doc/issues/17"&gt;issue&lt;/a&gt; and Joel and I are currently discussing this new feature!&lt;/p&gt;

&lt;p&gt;In a few days some new changes will come (see &lt;a href="https://github.com/noisegul/perl6-p6doc/tree/next"&gt;next branch&lt;/a&gt;), so be alert!&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Templates
&lt;/h3&gt;

&lt;p&gt;I did not realize I did not have any template to use by issues or pull requests, so I have added them to the repository :D. I also have realized that perl6/doc was using the old template system so I made an issue to update it! One of the things I am enjoying the most about #gsoc19 is the huge amount of things that I am learning about &lt;code&gt;git&lt;/code&gt; and &lt;code&gt;github&lt;/code&gt;. There are so many features to help you develop your ideas like projects, milestones, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Big TODO list
&lt;/h3&gt;

&lt;p&gt;A few days ago, my mentor revised my code and suggested a lot of improvements on this &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable/blob/master/TODO.md"&gt;TODO list&lt;/a&gt;. It's kind of long, but I am trying to complete it item by item.&lt;/p&gt;

&lt;p&gt;A lot of them have already been made, but others, like generate documents in parallel, has proved impossible to me to resolve. It turns out that &lt;code&gt;pod2html&lt;/code&gt; (used to convert all pods to HTML) cannot be executed in parallel. I tried it by all means without any results. I have reported &lt;a href="https://github.com/perl6/Pod-To-HTML/issues/63"&gt;this problem&lt;/a&gt;, but as you can see the error is a segfault. So this looks like a bug in Rakudo rather than the module itself. Debug this problem is the definition of hell, there are so many functions being called, several threads, etc. Hence, generate the documents in parallel will have to wait until this bug is resolved or a new HTML module is developed.&lt;/p&gt;

&lt;p&gt;I have also refactored and deleted some modules, to improve the readability and understanding of the process. I have also made a new documentation under &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable/tree/master/docs"&gt;docs/reference&lt;/a&gt; explaining how the things are made. I did this because the previous docs were too much technical and it was hard for people to see the big picture. I hope that with this approach, the system will be easier to understand.&lt;/p&gt;

&lt;p&gt;And that's has been my work this week. It does not look a lot, but the refactor and some items of the TODO list have caused several problems because some things were highly coupled (my fault). Now everything is more modular and less prone to errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Perl6 goodies!
&lt;/h3&gt;

&lt;p&gt;Now is when I tell you something interesting about perl6! If you are a programmer, you are bound to work with Arrays, Lists, etc. Perl6 gives you everything you need to work with these data structures very easily.&lt;/p&gt;

&lt;p&gt;One function I use a lot is &lt;code&gt;grep&lt;/code&gt; (see the &lt;a href="https://docs.perl6.org/routine/grep"&gt;docs&lt;/a&gt;). This function is like a filter. You can filter by type, using regexes, functions, everything you can think of. Let's see some examples.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;say ('hello', 1, 22/7, 42, 'world').grep: Int; 
# OUTPUT: «(1 42)␤» 

say ('hello', 1, 22/7, 42, 'world').grep: Rat; 
# OUTPUT: «(3.142857)␤» 

say ('hello', 1, 22/7, 42, 'world').grep: {.Str.chars &amp;gt; 3};
# OUTPUT: «(hello 3.142857 world)␤» 
~~~

![simply perl6](https://thepracticaldev.s3.amazonaws.com/i/x6smko21cv1tovbchlrc.jpg)

You will see how amazing is this once you start using it.

### Closing

And that's have been everything for today. I hope you give Perl6 a try and start using these amazing features.

See you next week with a new report and a new thing about Perl6! :D.






&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>perl6</category>
      <category>opensource</category>
      <category>gsoc</category>
    </item>
    <item>
      <title>Work report, week 7.</title>
      <dc:creator>Antonio</dc:creator>
      <pubDate>Mon, 15 Jul 2019 14:39:27 +0000</pubDate>
      <link>https://dev.to/antoniogamiz/work-report-week-7-4dna</link>
      <guid>https://dev.to/antoniogamiz/work-report-week-7-4dna</guid>
      <description>&lt;h3&gt;
  
  
  New feautres
&lt;/h3&gt;

&lt;p&gt;Here I am another week! This week I have improving a lot of aspects of &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable"&gt;Perl6::Documentable&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Now it has a very useful &lt;code&gt;update&lt;/code&gt; option to only regenerate the HTML documents coming from pod6 files that have been actually modified. This is a characteristic in the &lt;a href="https://github.com/perl6/doc/issues/2668"&gt;documentation's wishlist&lt;/a&gt;. Before this feature, if you wanted to see a change in the HTML you had to regenerate everything, what takes 2:30' approximately, plus processing the pod collection again. Now, with the cache and update option, it only takes around 10 seconds to see a change (and half of that time is spent is reprocessing the collection).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I have also made some little refactoring to distribute the responsibilities in a better way. In addition, you will find a new &lt;code&gt;setup&lt;/code&gt; option. The aim of this feature is to initialize the directory where the documentation will be generated. What needs to be setup? Nothing, really, but if you want your freshly generated documentation to have an style sheet, search capabilities, etc., you need to download the necessary files or provide ones yourself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Some minor bug fixes like: &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable/issues/43"&gt;leading whitespaces files&lt;/a&gt; or the &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable/issues/34"&gt;correct detection of subkinds&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CI testing! This is an important change because I made a terrible mistake! I did not test if the module actually could be installed, and it could not! Thanks to @ugexe for noticing this and tell me. I do not know if you remember &lt;a href="https://github.com/antoniogamiz/Perl6-LinkHealth"&gt;Perl6::LinkHealth&lt;/a&gt; and the &lt;a href="https://github.com/antoniogamiz/mini-doc"&gt;mini-doc repository&lt;/a&gt;, but they have also been integrated in this CI testing so now almost everything is covered :D.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's all the work I have made this week, if you want me to introduce whatever new feature you find interesting or useful, just tell me!&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;Mmm, what should I do next? &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable"&gt;Perl6::Documentable&lt;/a&gt; is in a good state right now, so I will continue fixing bugs and make general improvements.&lt;/p&gt;

&lt;p&gt;Nonetheless, I also want to start the work with &lt;a href="https://github.com/perl6/Pod-To-HTML"&gt;Pod::To::HTML&lt;/a&gt; and &lt;a href="https://github.com/perl6/perl6-pod-to-bigpage"&gt;Pod::To::BigPage&lt;/a&gt;. What needs to be done? Well, currently indexing is made in three different ways so it would be nice if we unify them into one. Moreover, the last two modules use different ways to convert a pod file into html, so it does not make a lot of sense to have duplicated logic. I may even create only one module joining both functionalities. I still do not know, I still have to discuss this with my mentors!&lt;/p&gt;

&lt;h2&gt;
  
  
  Perl6 curiosity
&lt;/h2&gt;

&lt;p&gt;I have been thinking these weeks that write an article telling what I have done in a specific week is not that funny, so I will tell you about some characteristic of Perl6 that I have found useful and interesting.&lt;/p&gt;

&lt;p&gt;Today: CLI! This week, I have had to add different options to the CLI version of &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable"&gt;Perl6::Documentable&lt;/a&gt;, and I thought this would be a little tedious, but I could not be more mistaken! As always, Perl6 makes your life easier and provides you with a very simple way of doing it. &lt;/p&gt;

&lt;p&gt;Suppose you want to create your own CLI program, for instance, one that reproduces the &lt;code&gt;zef&lt;/code&gt; command. First you should create a new file containing that functionality, let's call it &lt;code&gt;Perl6::Zef&lt;/code&gt;. Now you need to create a new file where you will read the arguments the user has specified, &lt;code&gt;Perl6::Zef::CLI&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This new file would be something like this:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Oh, what a weird code!. It really is not that weird, we only define "the skeleton" of the &lt;code&gt;MAIN&lt;/code&gt; function (this function is called every time a file is executed) because it will have several different definitions.&lt;/p&gt;

&lt;p&gt;After that, we simply specify two definitions of &lt;code&gt;MAIN&lt;/code&gt;, but wait, you have written &lt;code&gt;install&lt;/code&gt; and &lt;code&gt;update&lt;/code&gt; as arguments, is that correct? YEP, in Perl6 this compiles and works. This is an amazing feature because it gives you the possibility to deal with the cases you need in an easy way.&lt;/p&gt;

&lt;p&gt;I have also written &lt;code&gt;#|&lt;/code&gt; and &lt;code&gt;#=&lt;/code&gt;. These two are called &lt;em&gt;declarator blocks&lt;/em&gt;. What does this kind of comment? The comment you write after that is attached to the source code below it. Why this is useful? Because, for instance, with those comments, you do not need to specify a &lt;code&gt;--help&lt;/code&gt; option or something alike, because if you try to use this module with incorrect arguments, &lt;code&gt;perl6&lt;/code&gt; will tell you this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ &amp;gt; perl6 zef.pm6

Usage:
  zef.pm6 [--name=&amp;lt;install&amp;gt;] -- Install a new package
  zef.pm6 [--name=&amp;lt;update&amp;gt;] -- Updates a package

    --name=&amp;lt;install&amp;gt;    Name of the package to install
    --name=&amp;lt;update&amp;gt;     Name of the package to update

~~~

![simply perl6](https://i.pinimg.com/originals/7b/4f/6a/7b4f6a993a37feba36efd20910d03920.jpg)

I know, quite handy, isn't it? :D.

Summing up, I hope you try give a change to Perl6 because it has a lot of incredible characteristics!

See you next Monday :DDD.






&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>opensource</category>
      <category>perl6</category>
      <category>gsoc</category>
    </item>
    <item>
      <title>GSoC report. Week 6</title>
      <dc:creator>Antonio</dc:creator>
      <pubDate>Mon, 08 Jul 2019 10:20:01 +0000</pubDate>
      <link>https://dev.to/antoniogamiz/gsoc-report-week-6-28i4</link>
      <guid>https://dev.to/antoniogamiz/gsoc-report-week-6-28i4</guid>
      <description>&lt;h2&gt;
  
  
  First release is coming!
&lt;/h2&gt;

&lt;p&gt;Here I am another week! This week I have made a lot of progress in the project! &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable"&gt;Perl6::Documentable&lt;/a&gt; now has a command line version with a lot of options to customize the build process or only generate the parts you want to.&lt;/p&gt;

&lt;p&gt;I also want to release the &lt;code&gt;1.0.0&lt;/code&gt; version of this module`. In order to that, I made a &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable/projects"&gt;project in GitHub&lt;/a&gt;, to manage the related issues, where you can see a detailed report of my work this week. &lt;/p&gt;

&lt;p&gt;But, why do I want to make a release? Because now it only contains the current logic, without any changes (well, there are some, but they do not change the final result), including the errors. So now it's the time to fix those errors, modify the current behavior and start to keep track of the changes. When that's done, we will have a stable system where we will be able to move towards the &lt;a href="https://github.com/perl6/doc/wiki"&gt;new documentation system&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Those errors/problems are described &lt;a href="https://github.com/perl6/doc/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aissue+is%3Aopen+label%3Abuild+"&gt;here&lt;/a&gt; and &lt;a href="https://github.com/perl6/doc/issues?q=is%3Aissue+is%3Aopen+label%3Asite"&gt;here&lt;/a&gt;. You can see there is a considerable amount of them. My intention is to fix them while I upgrade the initial version, releasing several patches (&lt;code&gt;1.x.x&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;In addition, I have started a &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable/wiki"&gt;wiki&lt;/a&gt; in the repo to explain more deeply some functionality, because in the README I have only added the API docs. At this moment it only contains one post about how &lt;code&gt;Perl6::Documentable::Registry&lt;/code&gt; is initialized and what kinds of &lt;code&gt;Perl6::Documentable&lt;/code&gt; objects you will find there. I will complete it with the following pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Working with the registry: some examples about how to use &lt;code&gt;lookup&lt;/code&gt; or &lt;code&gt;grouped-by&lt;/code&gt; to fully understand what's going on under the hoods.&lt;/li&gt;
&lt;li&gt;Attributes: if you take a look at &lt;code&gt;Perl6::Documentable&lt;/code&gt; you will see a lot of strange attributes like &lt;code&gt;categories&lt;/code&gt;, &lt;code&gt;kind&lt;/code&gt;, &lt;code&gt;subkinds&lt;/code&gt;, etc. In the API docs is described how they are set but not what they mean or why they are chosen like that.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's all for this week! Among others things, the results of the Perl 6 annual survey has already been published &lt;a href="https://github.com/perl6/p6survey/blob/master/processed-data/data-2018-2019.csv"&gt;here&lt;/a&gt;, check them out!&lt;/p&gt;

&lt;h3&gt;
  
  
  Thanks for reading
&lt;/h3&gt;

&lt;p&gt;Don't be shy, let me know what you think of this project in the comments ☺️. &lt;/p&gt;

</description>
      <category>opensource</category>
      <category>perl6</category>
      <category>gsoc</category>
    </item>
    <item>
      <title>Work report! Week 5</title>
      <dc:creator>Antonio</dc:creator>
      <pubDate>Mon, 01 Jul 2019 19:20:47 +0000</pubDate>
      <link>https://dev.to/antoniogamiz/work-report-week-5-26c7</link>
      <guid>https://dev.to/antoniogamiz/work-report-week-5-26c7</guid>
      <description>&lt;p&gt;Here I am again! This week I have been a little busy with personal matters so I have not been able to work as hard as expected. Anyway, quite a few progress has been made.&lt;/p&gt;

&lt;h1&gt;
  
  
  Spinf Off Pod::Convenience &lt;a href="https://github.com/perl6/doc/issues/2696" rel="noopener noreferrer"&gt;issue #2696&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;This module is used at a lot of different files in &lt;a href="https://github.com/perl6/doc" rel="noopener noreferrer"&gt;perl6/doc&lt;/a&gt;. Its main aim is to provide functions to work with Pod objects: create them, modify them, etc. I have spun it off in &lt;a href="https://github.com/antoniogamiz/Pod-Utilities" rel="noopener noreferrer"&gt;Pod::Utilities&lt;/a&gt;, where code have been split between functions that modify pod structure and functions which create Pod objects.&lt;/p&gt;

&lt;h1&gt;
  
  
  Pod::To::Cached
&lt;/h1&gt;

&lt;p&gt;As you can see in some issues ( &lt;a href="https://github.com/perl6/doc/issues/1952" rel="noopener noreferrer"&gt;#1952&lt;/a&gt;, &lt;a href="https://github.com/perl6/doc/issues/717" rel="noopener noreferrer"&gt;#717&lt;/a&gt;, ... ), we really need a cache system to decrease testing and build time. Parse all pods to get Perl6 code takes a while and currently this is being made around three times in the process.&lt;/p&gt;

&lt;p&gt;What we want with a cache system is something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fs2v4lc1s7awwlhu7ryxr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fs2v4lc1s7awwlhu7ryxr.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That means, compiles the pod once and use them everywhere. Luckily, &lt;a href="https://github.com/finanalyst" rel="noopener noreferrer"&gt;@finanalyst&lt;/a&gt; made a module to compile and cache pod files =&amp;gt; &lt;a href="https://github.com/finanalyst/pod-cached" rel="noopener noreferrer"&gt;Pod::Cached&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Last Friday, my mentor, &lt;a href="https://github.com/JJ" rel="noopener noreferrer"&gt;@JJ&lt;/a&gt;, and I were taking a look to how it was made and solving some issues (you can see my handsome face &lt;a href="https://twitter.com/jjmerelo/status/1144514758701395968" rel="noopener noreferrer"&gt;here&lt;/a&gt;).&lt;/p&gt;

&lt;h1&gt;
  
  
  Mini-doc set
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/antoniogamiz/Perl6-Documentable" rel="noopener noreferrer"&gt;Perl6::Documentable&lt;/a&gt; was published last week with all processing related logic so I already know almost all things being considered to generate the doc site.&lt;/p&gt;

&lt;p&gt;Because of that, I have updated the doc set in the &lt;a href="https://github.com/antoniogamiz/mini-doc" rel="noopener noreferrer"&gt;mini-doc repo&lt;/a&gt;, adding a Feature check list to the README.md (suggested by &lt;a class="mentioned-user" href="https://dev.to/jj"&gt;@jj&lt;/a&gt;), containing all things that should be present in that set.&lt;/p&gt;

&lt;h1&gt;
  
  
  Closing
&lt;/h1&gt;

&lt;p&gt;Ant that has been all! I know this week has not been so productive but well, some work has been done. This week I will be working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add index generation logic to Perl6::Documentable.&lt;/li&gt;
&lt;li&gt;Start and hopefully finish the new module responsible of taking a &lt;code&gt;Perl6::Documentable::Registry&lt;/code&gt; and generate the HTML files needed for the site.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>perl6</category>
      <category>gsoc</category>
    </item>
    <item>
      <title>First work report of GSoC!</title>
      <dc:creator>Antonio</dc:creator>
      <pubDate>Mon, 24 Jun 2019 09:52:13 +0000</pubDate>
      <link>https://dev.to/antoniogamiz/first-work-report-of-gsoc-3gk4</link>
      <guid>https://dev.to/antoniogamiz/first-work-report-of-gsoc-3gk4</guid>
      <description>&lt;p&gt;I'm back, as promised! Time to talk about what I have been doing all this time. Three weeks have passed since the coding period started and some work has been done since then:&lt;/p&gt;

&lt;h1&gt;
  
  
  Perl6::LinkHealth &lt;a href="https://github.com/antoniogamiz/Perl6-LinkHealth"&gt;repo&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;This was my first module! I tried to do a basic tool to check if some files stopped being generated. It needs improvement and it's not finished yet, but my mentor recommended me to leave this project aside for a while.&lt;/p&gt;

&lt;h1&gt;
  
  
  Mini doc repository &lt;a href="https://github.com/perl6/doc/issues/2529"&gt;issue #2529&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;As you can see in the &lt;a href="https://github.com/perl6/doc"&gt;doc directory&lt;/a&gt; of Perl6 documentation repo, there are 383 pod files approximately. It takes quite a long time (~20 minutes) to process them all and build the doc site. This leads to one problem: if you want to make any change to the build process, first you need to follow these easy steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Code the change.&lt;/li&gt;
&lt;li&gt;Build the site waiting 20 minutes.&lt;/li&gt;
&lt;li&gt;Yep in this step you are still waiting.&lt;/li&gt;
&lt;li&gt;See that you forgot a semicolon, come back to step 1.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Quite frustrating, isn't it? So, in order to change this, as discussed in  &lt;a href="https://github.com/perl6/doc/issues/2529"&gt;issue #2529&lt;/a&gt;, a mini doc repository would be quite helpful. So I create it &lt;a href="https://github.com/antoniogamiz/mini-doc"&gt;here&lt;/a&gt;, but, once the environment was set up and I started to search for the correct self-contained subset of pod6 files, I realized I did not know what needed to be in it! So to discover what was necessary I did the following:&lt;/p&gt;

&lt;h1&gt;
  
  
  Spin off Perl6::Documentable &lt;a href="https://github.com/perl6/doc/issues/1937"&gt;Issue #1937&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;In order to know what we need, first we need to know what it's being used and how. So, how are pod files being processed and where? &lt;/p&gt;

&lt;p&gt;First they are read and parsed, then we get a data structure of &lt;code&gt;Pod::*&lt;/code&gt; objects in an array. These objects contain the text written in the pod files, but to generate indexes and have a search system, an additional layer is necessary. That's where &lt;code&gt;Perl6::Documentable&lt;/code&gt; and &lt;code&gt;Perl6::Registry&lt;/code&gt; (&lt;a href="https://github.com/perl6/doc/tree/master/lib/Perl6"&gt;source code&lt;/a&gt;) take part. A &lt;code&gt;Documentable&lt;/code&gt; object is whatever piece of a pod file that is documented, but, what's being documented? Several things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pod files: every pod file in the &lt;a href="https://github.com/perl6/doc/tree/master/doc"&gt;doc directory&lt;/a&gt; is represented by a &lt;code&gt;Documentable&lt;/code&gt; object with the following attributes:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$name&lt;/code&gt;: By default is set to the filename. If the pod is representing a type, then it's set to the last word of the filename. Otherwise, it's set to the content of &lt;code&gt;=TITLE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$url&lt;/code&gt;: This is set to &lt;code&gt;/$kind/$link&lt;/code&gt;. &lt;code&gt;$kind&lt;/code&gt; is the name of the folder where the pod file is allocated and &lt;code&gt;$link&lt;/code&gt; can be set to the value you want adding &lt;code&gt;link&amp;lt;your-link&amp;gt;&lt;/code&gt; just after of &lt;code&gt;=begin pod&lt;/code&gt;. If you don't, then it's set to the filename.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$pod&lt;/code&gt;: array containing &lt;code&gt;Pod::*&lt;/code&gt; objects with the data.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$summary&lt;/code&gt;: value of &lt;code&gt;=SUBTITLE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$kind&lt;/code&gt;: is the name of the folder where the pod file is allocated (&lt;code&gt;Language&lt;/code&gt;, &lt;code&gt;Type&lt;/code&gt; or &lt;code&gt;Programs&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$subkinds&lt;/code&gt; and &lt;code&gt;$categories&lt;/code&gt;: If it's a type, set to the value obtained from &lt;code&gt;Perl6::Typegraph&lt;/code&gt;. If not, then &lt;code&gt;$subkind&lt;/code&gt; is set to &lt;code&gt;class&lt;/code&gt; and &lt;code&gt;$categories&lt;/code&gt; is not set.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pod-is-complete&lt;/code&gt;: Set to &lt;code&gt;true&lt;/code&gt; because they represent an entire pod file.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When all of this is set, the new &lt;code&gt;Documentable&lt;/code&gt; object is added to &lt;code&gt;Perl6::Registry&lt;/code&gt;, which is that exactly, a registry where all &lt;code&gt;Documentable&lt;/code&gt; objects are stored to be used later.&lt;/p&gt;

&lt;p&gt;Next thing that needs to be done is search for definitions to be indexed. This a key part of the process because this definitions will be used to create TOCs, a search file for the site and intra-links. Let's start explaining what is a definition: a definition is a header, more precisely, a &lt;code&gt;Pod::Heading&lt;/code&gt; object. They are something like this: &lt;code&gt;=head2 Some text&lt;/code&gt; (the heading level does not matter). But as you can suppose, not all headings are valid definitions. There are two different types of valid ones: ambiguous and unambiguous. You can check more info about them &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable#method-parsedefinitionheader"&gt;here&lt;/a&gt;. Every new found definition is stored in a &lt;code&gt;Documentable&lt;/code&gt; object and added to the registry.&lt;/p&gt;

&lt;p&gt;But there's more: references. A reference is a &lt;code&gt;X&amp;lt;&amp;gt;&lt;/code&gt; element. All and each one of &lt;code&gt;X&amp;lt;&amp;gt;&lt;/code&gt; elements are processed as references, stored in a &lt;code&gt;Documentable&lt;/code&gt; object and added to the registry as well.&lt;/p&gt;

&lt;p&gt;Well, all this work is made in &lt;code&gt;htmlify.p6&lt;/code&gt; by three different funtions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/perl6/doc/blob/612fcacea0f1f56dfc4b8c8909fdbc6c2d34f9ac/htmlify.p6#L315"&gt;process-pod-source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/perl6/doc/blob/612fcacea0f1f56dfc4b8c8909fdbc6c2d34f9ac/htmlify.p6#L543"&gt;find-definitions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/perl6/doc/blob/612fcacea0f1f56dfc4b8c8909fdbc6c2d34f9ac/htmlify.p6#L369"&gt;find-references&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you take a look at that functions, you will see that global variables are involved. Moreover, that code could be parallel (currently is parallel but the number of threads is set to 1). And, as you may know, global variables and parallelism, need monitors or some alike exclusion mechanism. It looks like monitors are not working as expected (by that reason the numbers of threads is set to 1). To fix that, I have moved all the logic described here to the &lt;code&gt;Perl6::Documentable&lt;/code&gt; class, where there is not any global variable so no monitors are needed. You can check the new module &lt;a href="https://github.com/antoniogamiz/Perl6-Documentable"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Perl6::Typegraph &lt;a href="https://github.com/perl6/doc/issues/2573"&gt;Issue #2573&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;I spinned this module to test it and document it. In addition, we want to get rid of the &lt;code&gt;type-graph.txt&lt;/code&gt; file and get all the information necessary through introspection. This &lt;a href="https://github.com/perl6/doc/blob/master/lib/Perl6/TypeGraph/Viz.pm6"&gt;file&lt;/a&gt; should be added to that module too.&lt;/p&gt;

&lt;h1&gt;
  
  
  Pod::Load &lt;a href="https://github.com/JJ/p6-pod-load"&gt;repo&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;This module is going to be used to read every pod file in the documentation, so I have been using it and finding some bugs.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;a href="https://eslib.re/2019/"&gt;esLibre19&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;Three days ago was #esLibre19! A congress about open source where I hosted a devroom about Perl and Perl6!&lt;/p&gt;

&lt;h1&gt;
  
  
  What's next?
&lt;/h1&gt;

&lt;p&gt;This week I want to focus in several things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Publish and polished &lt;code&gt;Perl6::Documentable&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Spin off &lt;code&gt;Pod::Convenience&lt;/code&gt;, which will be renamed to &lt;code&gt;Pod::Utilities&lt;/code&gt;. In addition, all scattered functions related to this topic found in the repo, will be moved there to keep consistency.&lt;/li&gt;
&lt;li&gt;Discuss where to move logic that reads and initializes the pod and the registry (it's not trivial because in the next weeks a cache system will be made and that logic will use it).&lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;Perl6::RegistryToDoc&lt;/code&gt; module, where the rest of the logic of &lt;code&gt;htmilify.p6&lt;/code&gt; will be moved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have not explained several things, but if you go to the repository of each module, you will find a documentation explaining all the necessary!&lt;/p&gt;

&lt;p&gt;And that's all for this week! See you next week, hopefully :D.&lt;/p&gt;

</description>
      <category>gsoc</category>
      <category>opensource</category>
      <category>perl6</category>
    </item>
    <item>
      <title>GSoC 2019!</title>
      <dc:creator>Antonio</dc:creator>
      <pubDate>Wed, 19 Jun 2019 20:21:33 +0000</pubDate>
      <link>https://dev.to/antoniogamiz/gsoc-2019-1k1h</link>
      <guid>https://dev.to/antoniogamiz/gsoc-2019-1k1h</guid>
      <description>&lt;h1&gt;
  
  
  About me
&lt;/h1&gt;

&lt;p&gt;My name is Antonio Gámiz, I'm a student at the University of Granada, where I'm studying a double degree in Computer Science and Mathematics. I have been programming in quite a few languages like JS, Python, C/C++ and Java, but I had never used Perl6 before!&lt;/p&gt;

&lt;p&gt;I have been selected to work at the &lt;a href="https://perl6.org/"&gt;Perl6 organization&lt;/a&gt;! My mentors for this project are &lt;a href="https://github.com/JJ"&gt;JJ Merelo&lt;/a&gt; (my main mentor), &lt;a href="https://github.com/finanalyst"&gt;Richard Hainsworth&lt;/a&gt;, &lt;a href="https://github.com/tbrowder"&gt;Tom Browder&lt;/a&gt; and &lt;a href="https://github.com/Tyil"&gt;Patrick Spek&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Brief introduction
&lt;/h1&gt;

&lt;p&gt;First of all I need to tell you what is Perl6: is a language entirely made by the community and completely open source! So all the work has been made by people willing to improve it and support it. The community is very friendly and is always welcoming to new members willing to learn (you can join us in the &lt;a href="https://webchat.freenode.net/?channels=#perl6"&gt;IRC channel&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;But why it's so cool? Because it &lt;em&gt;unifies many great ideas that aren't usually found in other programming languages&lt;/em&gt; (quote from &lt;a href="https://docs.perl6.org/language/faq#Why_should_I_learn_Perl_6?_What's_so_great_about_it?"&gt;here&lt;/a&gt;). In addition, Perl6 is multi-paradigm! That means you can learn OOP at the same time you play with FP and a lot of more like declarative or imperative paradigms!&lt;/p&gt;

&lt;p&gt;In addition, from my point of view, it's one of the best scripting languages at the moment, because it has a wide set of tools to make your life easier. Nonetheless, at the beginning, you can feel a bit scared of the syntax, but if you use it for a while, you will discover how amazing and powerful it is!&lt;/p&gt;

&lt;h1&gt;
  
  
  So what is your project?
&lt;/h1&gt;

&lt;p&gt;Well, as I have said earlier, Perl6 is great, but in order to learn this incredible language you need an even better documentation. In Perl6, the documentation is also code and there is a special syntax to write i t, called &lt;a href="https://docs.perl6.org/language/pod"&gt;Pod6 format&lt;/a&gt;. This is an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=begin pod

=TITLE Perl6

=head1 First article

Some comments

=end pod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Official documentation is entirely written using this format (you can see the source code &lt;a href="https://github.com/perl6/doc"&gt;here&lt;/a&gt;) and then is processed by a huge and scaring file: &lt;code&gt;htmlify.p6&lt;/code&gt; (this &lt;a href="https://github.com/perl6/doc/blob/master/htmlify.p6"&gt;one&lt;/a&gt;) and a few &lt;a href="https://github.com/perl6/doc/tree/master/lib"&gt;modules&lt;/a&gt;. All of this code have been developed and maintained by the community along the past years, patching the problems whenever they appear and hoping anything stopped working.&lt;/p&gt;

&lt;p&gt;So here is where I take part! My project aims to document the generation process, test it and spin off all the modules involved in the process. This is necessary due to there is a high level of coupling between the parts involved and it's quite hard to make changes by two reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You cannot know if the changes you make will break some parts of the system because there is not enough test coverage.&lt;/li&gt;
&lt;li&gt;If you want to change a specific behavior, you do not know where to modify it because the same task is made along several different files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, when all the process is documented, tested and we know why things are being made the way they are, will be time to create a doc specification. As my main mentor, JJ, said in this &lt;a href="https://github.com/perl6/doc/wiki/Document-file-specification"&gt;post&lt;/a&gt;, &lt;em&gt;we need to settle on a specification of the document page format first&lt;/em&gt;. If we do that, generate the docs will be a lot easier because all documents will have the same format and there will not be strange situations prone to errors.&lt;/p&gt;

&lt;p&gt;And that's the main part of my project, feel free to ask me anything about it!&lt;/p&gt;

&lt;h1&gt;
  
  
  Coming soon
&lt;/h1&gt;

&lt;p&gt;I will be keeping a weekly blog explaining my work during that week and why do what I do. I will publish the first one next Monday, where I will talk about the work made these past weeks.&lt;/p&gt;

&lt;h1&gt;
  
  
  Closing
&lt;/h1&gt;

&lt;p&gt;I know this article is a bit late but, in Spain, university tests are around this time and I have been terribly busy studying for them. Luckily, I have already finished and I'm totally free the rest of the summer! (huge thanks to my mentors, who have been very understanding with this problem).&lt;/p&gt;

&lt;p&gt;Also, in two days is &lt;a href="https://eslib.re/2019/acerca/"&gt;esLibre&lt;/a&gt;, a Spanish meetup where amazing people will be talking about open source! I will be hosting a &lt;a href="https://github.com/antoniogamiz/devroom-perl-eslibre"&gt;devroom about Perl6 and Perl&lt;/a&gt;. Feel free to stop by and learn something new :).&lt;/p&gt;

&lt;p&gt;See you again next Monday!&lt;/p&gt;

</description>
      <category>gsoc</category>
      <category>perl6</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
