{"@attributes":{"version":"2.0"},"channel":{"title":"Renata's blog","link":"https:\/\/rsip22.github.io\/blog\/","description":{},"lastBuildDate":"Fri, 01 Nov 2267 10:00:00 -0300","item":[{"title":"Achievement unlocked! I spoke at PythonBrasil[14]","link":"https:\/\/rsip22.github.io\/blog\/achievement-unlocked-I-spoke-at-PythonBrasil-14.html","description":"<h2>PyLadies (and going to PythonBrasil)<\/h2>\n<p><img alt=\"PythonBrasil logo. Yellow and light blue with a map of Rio Grande do Norte. It features the date of the conference\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_logo.png\"><\/p>\n<p><a href=\"https:\/\/2018.pythonbrasil.org.br\">PythonBrasil<\/a> is the national Python community conference that happens every year, usually in October, in Brazil.<\/p>\n<p>I attended PythonBrasil for the first time in 2016, the year we had started <a href=\"https:\/\/pyladiespoa.pythonanywhere.com\/\">PyLadies Porto Alegre<\/a>. Back then, we were a very small group and I was the only one to go. It was definitely one of the best experiences I ever had, which, of course, set a very high standard for every single tech event I attended afterwards.<\/p>\n<p>Because of the great time I had there, I wanted to bring more and more women from PyLadies Porto Alegre to experience PythonBrasil in the next editions. So, during the <a href=\"http:\/\/pyladiespoa.pythonanywhere.com\/post\/19\/\">PyLadies Porto Alegre 1st birthday party<\/a>, I encouraged the other women to submit activities to try and to go to the conference that would happen in Belo Horizonte.<\/p>\n<p>When attending it for the second time, I didn't go alone. Daniela Petruzalek had her talk accepted. Claudia, also from PyLadies Porto Alegre, was able to go, for the first time, thanks to the support of the PyLadies Brazil crowdfunding campaign. To me, one of the most memorable things about this PythonBrasil was \"The (unofficial) PyLadies House\", where I stayed. It was a huge house that we rented and shared between about 18 people to help with the accomodation costs for all of us. We shared breakfasts and rides and stories. We watched other PyLadies rehearse their talks, made lightning tech talks late at the night and we even had a birthday party!<\/p>\n<p>So, this year? The idea of encouraging PyLadies POA submissions, something that had came up almost spontaneously last year, matured and we have worked to make Pyladies Porto Alegre <a href=\"http:\/\/pyladiespoa.pythonanywhere.com\/post\/35\/\">2nd Birthday Party<\/a> an all-day event with that purpose. The schedule? Lightning talks about Python projects from its members, talks about experiences as participants and as speakers at Python Brasil and... we also had a help from Vinta Software's Flavio Juvenal, who acted as mentor to the women who were considering to submit an activity to PythonBrasil. He even made a great <a href=\"https:\/\/github.com\/pyladiespoa\/checklist-para-propostas-pybr\">Github repo<\/a> with a proposal checklist to assist us - and he made himself available for reviewing the proposals we wrote.<\/p>\n<p>The result? We had more than 6 women from PyLadies Porto Alegre with activities accepted to PythonBrasil[14]. Some of them even had more than one activity (tutorial and talk) accepted.<\/p>\n<p>I was among the ones who had been accepted. Ever since attending the conference for the first time, it had been a goal of mine to give a talk at PythonBrasil. But not any talk. I wanted for it to be a technical talk. At last, what I learned during Outreachy and how I had used it for a real task in a job finally gave me the confidance to do so. I felt ready, so I submitted and I was accepted.<\/p>\n<p><img alt=\"picture of the PythonBrasil name tag\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_tag.JPG\"><\/p>\n<p>I made my way to Natal, the capital of the Rio Grande do Norte (RN) state (in the Northeast of Brazil) two days before the conference was to start, since it was the cheapest ticket I could find. Besides, the PyLadiesBRConf was scheduled to happen on the day before and I was hoping I would be able to attend. PyLadiesBRConf was a full day of talks organized by what one could have called \"the original PyLadies Brazil\", since the Pyladies community in Brazil actually started in Natal and was named so (afterwards we started naming the group with cities' names).<\/p>\n<p><img alt=\"picture of PyLadiesBRConf. Three women sitting in front of a table, on stage, speaking\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pyladies_br_conf.JPG\"><\/p>\n<p><img alt=\"picture of PyLadies Porto Alegre at PyLadiesBRConf, four women sitting together in the audience\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_pybladiesbrconf_pyladies_poa.jpg\"><\/p>\n<h2>The PythonBrasil[14] conference<\/h2>\n<p>On the next day, PythonBrasil[14] started. It was the biggest PythonBrasil to happen yet, with over 700 atendees (plus staff). Like many PyCons, the conference days are usually split between tutorials, talks and sprints.<\/p>\n<h3>Day 1 - tutorials<\/h3>\n<p>The tutorials have free admitance and are open to anyone to attend (no matter if they have bought a ticket to the conference or not). Unfortunatelly, due to the capacity of the rooms where they would be held, there was a limit for 100 registrations for each tutorial. When I went to register for the tutorials of the first day, they were already all booked. Even so, the tutorial I was most interested in, \"Builting REST APIs with Django REST Framework\", had to be cancelled anyway because the presenter missed his flight. :( On this first day, I met with a few PyLadies and people from the Python community who were in Natal, I walked on the beach and I focused on the preparation for my talk.<\/p>\n<h3>Day 2 - tutorials<\/h3>\n<p>I must confess that I had registered for the tutorial on Pandas (\"It's not witchcraft, it's Pandas\", by Fernando Masanori) merely because Flavio Juvenal had mentioned Pandas on the feedback for my proposal. I had no idea what that was actually about and why would one even use Pandas. By noon on that second day, though, I was so very glad that I did (and that I got a spot in it!). I learned a bit about Pandas and I also learned about how to use Jupyter Notebooks, something I had never tried before either. I found both Pandas and Jupyter easy and interesting and I look forward to do some projects using them.<\/p>\n<p>Back when we (PyLadies) were discussing submissions to PythonBrasil with Professor Masanori, Data Structures was something that both I and another PyLady (Debora) had mentioned we had been meaning to focus on and study more. So, he came up with the idea for a tutorial about it, called: \"Data Structures are &lt;3\".<\/p>\n<p>On this tutorial, I found it quite interesting learning and playing with recursive functions and with algorithms for searching. I was quite impressed with learning about heapsort (who knew doing such a thing could be so cool?).<\/p>\n<p><img alt=\"An animation demonstrating how the heapsort algorithm works\" src=\"https:\/\/rsip22.github.io\/blog\/img\/Sorting_heapsort_anim.gif\"><\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/File:Sorting_heapsort_anim.gif\">Image Licensed CC BY-SA 3.0 Attribution: RolandH<\/a><\/p>\n<p>Everything at PythonBrasil (tutorials, talks and sprint) happened in the same hotel. So, after the tutorials were over, I hung around with some of the people of the community who were staying at the same hostel. The organizing team asked for help in putting together the conference kit (bag, t-shirt, IDs and flyers). We made sort of a production line and cut the time considerably short for the volunteer team.<\/p>\n<p>Afterwards, I was still processing everything that I had learned and I wanted to try the new things, so I went back to the hostel to code some more. I confess that I was so hooked that I stayed up until 2 am to create the code with Pandas that I would incorporate in my talk as a bonus content.<\/p>\n<h3>Day 3 - talks<\/h3>\n<p>On this day, I had the opportunity to meet and socialize with a lot of people who were coming to Python Brasil for the first time. It was particularly delightful to see a lot of students from a public technical school (Instituto Federal) attending the conference with their teachers. They had been given tickets, which allowed them to attend the (otherwise very expensive) conference and I must say that this is the kind of inclusion that I always want to see in tech events.<\/p>\n<p>From the talks, I want to highlight these moments: I learned about Scrapy (which I have been playing around a bit since then), I watched an awesome talk about using Python with Physics (although I don't have a depth knowledge of Physics, I count as a success that I could follow the talk in it's entirety, so cheers to the presenter, Ana Maria, from PyLadies Teresina) and I must mention that I was quite impressed by Elias Dorneles' talk - about developing software for the command line. Even his \"slides\" were made there - and there was drawings and music too, all made with Python and using the command line!<\/p>\n<p><img alt=\"Elias' talk. In the background, slides show a colors table, to use in the terminal\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_cli_development.JPG\"><\/p>\n<h3>Day 4 - talks<\/h3>\n<p>The second day of talks brought us the much needed talk about <a href=\"https:\/\/www.afropython.org\">AfroPython<\/a>, a initiative that was created to increase representation of black and native brazilian people in our community.<\/p>\n<p>A talk that gathered a lot of attention (and overcrowded the room it was being given at!) was the one about using Python to understand data about suicides to help preventing them. It's a hard subject for many people, but it is one that we definitely need to talk about.<\/p>\n<p>Andreza Rocha's talk \"Dear White People (from HR)\" also touched a lot of people. She drew from her own experiences as a tech recruiter to question about the homogenity that we (still) have in tech. \"Who are the ones who recruit the people?\" she asked. \"For us to be recruited, we (black people) have to be alive.\"<\/p>\n<p>It was on this day that a violation of Python Brasil's Code of Conduct happened. After a PyLady gave her talk, a male participant used the time for questions not to ask a question, but to <em>let's say<\/em>... eulogize the woman who had given the talk... by demeaning all other women who had presented before her and weren't \"technical enough\" or something like that. Oh, how thick we must make our skin for us to be able to come up to a stage knowing we might to be subjected to a moment like that... I am glad the PyLady was experienced and level-headed enough to own the moment and give him the deserving come back. * sigh * (<em>After<\/em> the conference, the organization published a note about the CoC violation.)<\/p>\n<p>Contrary to popular belief, yes, I did watch the last keynote of the day, even though it was Facebook's. And it did surprised me. Rainer Alves spoke about the shifts in corporate culture that happened when they merged infrastructure and development people into a \"Production Engineering\" departament. What I found most relevant, though, was the slide below, about \"Blameless postmortens\". After all, how to actually correct a malpractice or an error other than working collectivelly to figure out the way? \"It's not about what you did, it's about what went wrong.\"<\/p>\n<p><img alt=\"Picture of Facebook's keynote. The slide about blameless postmortens. Some points include 'how can we make sure that whenever this happens again will not have the same outcome' and 'It's a collaborative, blameless meeting, where no one is allowed to point fingers at each other' \" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_facebook_keynote.JPG\"><\/p>\n<p>This was the day we took the official photo of Python Brazil:<\/p>\n<p><img alt=\"PythonBrasil official photo, with hundreds of people sitting in the keynote room\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_official_photo.JPG\"><\/p>\n<p>It was also the day we took a picture with the women who were at the conference:<\/p>\n<p><img alt=\"picture of the women at PythonBrasil, about hundred, in front and up the stage\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_women.JPG\"><\/p>\n<h3>Day 5 - talks<\/h3>\n<p>Sunday arrived and it was time for: <strong>'But can you open it on Excel?' Exporting to TXT, CSV and JSON with Python (\"'Mas d\u00e1 pra abrir no Excel?'' Exportando para TXT, CSV e JSON com Python\")<\/strong>. The focus of my talk was how to export data to those formats using mainly the tools offered by the Python Standard Library. But, as I mentioned before, thanks to what I learned during the PythonBrasil tutorials, I was able to add some extra content and show how the export to CSV could be done with Pandas as well. I was very glad about this, even though I felt like there was so little time to go over all the content I wanted to present (I had time to go through all my slides and for a very brief demonstration, but that was it). I think it went well. I even managed to speak briefly about Free Software (since I don't use Excel, and I made my demonstration with LibreOffice).<\/p>\n<p><img alt=\"picture of myself giving the talk at PythonBrasil\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_renata_davila.JPG\"><\/p>\n<p>When they opened time for questions, I explicitily said \"Questions, not comments, please\" hoping to avoid mansplaing or another incident like the one that had happened the day before. And I know people judged me for that, but... I am also aware they judged me more harshly because I am a woman. After all, in previous editions we have had male keynotes making the very same comment without people being offended by it.<\/p>\n<p>This did not stop people from coming to talk to me afterwards with comments about their experiences anyway - that was definitely better, because I felt like I could talk to them more properly and personally about it, having more time than the 5 minutes alotted to questions and not having to answer under a full audience's scrutiny.<\/p>\n<p>Other than my own talk, I would like to mention some other talks I attended. There was a talk about advanced functional programming (\"Going further than map, filter and reduce\"), which is something that I find interesting to have some idea about it, even though I don't quite fully grasp yet. There was also the PyLadies' talk, where a group representing each region of Brazil with a PyLadies group talked about the work we have been doing. Andressa went on for PyLadies Porto Alegre and talked about all the work we have been doing in particular regarding <a href=\"https:\/\/blog.djangogirls.org\/post\/166221911403\/django-girls-rio-grande-do-sul\">all the Django Girls workshops<\/a> we have helped at in Rio Grande do Sul since the last PythonBrasil.<\/p>\n<p><img alt=\"PyLadies on stage, Andressa speaking. The slides show a map of Brazil, marked in all the cities that have hosted Django Girls so far\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_pyladies_django_girls.JPG\"><\/p>\n<p>Ana Paula made a fun talk about Genetic Algorithm with Python, which uses the language to work with Biology data. Another subject that I am not very familiar with, but that I found quite interesting. And I also saw Camilla Martins live coding to run Python with Node.js on the big stage.<\/p>\n<p>During the lightning talks, something amazing happened: the Instituto Federal students went up on the stage and talked about their experience at PythonBrasil using a regional sung-poetry called Cordel. It was really remarkable.<\/p>\n<p>Also during the lightning talks, we had Thrycia Oliveira, a former participant of Django Girls, calling to attention the fact that we need to have spaces that are inclusive to parents in the community, in particular to moms. She said that PythonBrasil organization tried to arrange so, and she thanked them for that, but it had not been possible. I also remember when she told me about her participation in Python Nordeste (a regional conference that preceeded PythonBrasil) and how she had to alternate with her husband the days she went to, because one of them had to stay at home to watch over their kids (it wasn't really a kids-inclusive event).<\/p>\n<p><img alt=\"Thrycia and her kids\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_thrycia.jpg\"><\/p>\n<p>This day ended with Betina's keynote \"Does this algorithm have a soul?\", a very relevant question for the state of software development today. Her talk spoke to me and to a lot of people in the audience and I can't picure a more welcoming community to be given to.<\/p>\n<h3>Day 6 - sprints<\/h3>\n<p>Sadly, Python Brazil had to come to an end. Day 6 happened on a Monday, and that meant that the majority of the people, including almost all the Pyladies, had already returned home. :( For personal reasons that I would rather not talk about publicly, I chose not to take part on the coding sprint to help with APyB's site. Instead, because I am looking for work, I used this day mostly for networking and applying to jobs I had heard about during PythonBrasil. I don't have wifi at home and I need to take any opportunity I can get to use the internet to send CVs and taking technical tests, so that is what I did.<\/p>\n<h2>Wrapping things up...<\/h2>\n<p>And, of course, to finish this post I ought to mention the beach... On my last two days in Natal, I was gifted with the awesomeness that it is the ocean at Ponta Negra during the full moon. There are no words to describe the beauty of it (I am sorry I couldn't take a good picture of it).<\/p>\n<p><img alt=\"picture of Natal's beach at night\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pybr_natal.jpg\"><\/p>\n<h2>Thank you notes<\/h2>\n<p>I know this post ended up being extensive, but how can one summarize an experience with an event as huge as PythonBrasil? It's hard. I think it's safe to say that to be part of something like that has a lasting impact in my life. All the technical content I have heard about gives me motivation to keep studying and learning new things. All the people I have met, friends old and new, give meaning to the work to make the Python community more open and inclusive.<\/p>\n<p>So, I cannot thank <a href=\"https:\/\/outreachy.org\">Outreachy<\/a> enough for making my participation in Python Brasil possible!<\/p>\n<p>This whole journey would not be possible without the awesome people below, so I would like to also thank:<\/p>\n<ul>\n<li>My Outreachy mentors Daniel Pocock and Bruno for the support during the internship and beyond<\/li>\n<li>Flavio Juvenal for the feedback on my proposal and giving the golden tip about Pandas<\/li>\n<li>Andreza Rocha for not letting me give up on my dream to go to this PythonBrasil<\/li>\n<li>Felipe de Morais and Betina Costa for sitting in the very front row and nodding when I was unsure during my talk<\/li>\n<li>Elias Dorneles for the support when applying to Outreachy and for reviewing my slides<\/li>\n<li>PyLadies Brazil for being the safety net so many women can rely on<\/li>\n<\/ul>","pubDate":"Mon, 12 Nov 2018 00:49:00 -0200","guid":"tag:rsip22.github.io,2018-11-12:\/blog\/achievement-unlocked-I-spoke-at-PythonBrasil-14.html","category":["blog","personal","outreachy","python","pythonbrasil","community"]},{"title":"Debian Women in Curitiba","link":"https:\/\/rsip22.github.io\/blog\/debian-women-in-Curitiba.html","description":"<p>This post is long overdue, but I have been so busy lately that I didn't have the time to sit down and write it in the past few weeks. What have I been busy with? Let's start with this event, that happened back in March:<\/p>\n<h2>Debian Women meeting in Curitiba (March 10th, 2018)<\/h2>\n<p><img alt=\"The eight women who attended the meeting gathered together in front of a tv with the Debian Women logo\" src=\"https:\/\/rsip22.github.io\/blog\/img\/debian_women_05.JPG\"><\/p>\n<p>At MiniDebConf Curitiba last year, few women attended. And, as I mentioned on a <a href=\"..\/women-in-minidebconf\">previous post<\/a>, there was not even a single women speaking at MiniDebConf last year.<\/p>\n<p>I didn't want MiniDebConf Curitiba 2018 to be a repeat of last year. Why? In part, because I have involved in other tech communities and <em>I know<\/em> it doesn't have to be like that (unless, of course, the community insists in being mysoginistic...).<\/p>\n<p>So I came up with the idea of having a meeting for women in Curitiba one month before MiniDebConf. The main goal was to create a good enviroment for women to talk about Debian, whether they had used GNU\/Linux before or not, whether they were programmers or not.<\/p>\n<p>Miriam and Kira, two other women from the state of Parana interested in Debian, came along and helped out with planning. We used a collaborative pad to organize the tasks and activities and to create the text for the folder about Debian we had printed (based on Debian's documentation).<\/p>\n<p>For the final version of the folder, it's important to acknowledge the help Luciana gave us, all the way from Minas Gerais. She collaborated with the translations, reviewed the texts and fixed the layout.<\/p>\n<p><img alt=\"A pile with folded Debian Women folders. The writings are in Portuguese and it's possible to see a QR code.\" src=\"https:\/\/rsip22.github.io\/blog\/img\/folder_Debian_women.JPG\"><\/p>\n<p>The final odg file, in Portuguese, can be downloaded here: <a href=\"https:\/\/github.com\/debianwomenbr\/debianwomenbr.github.io\/raw\/master\/img\/folder_debian_30cm.odg\">folder_debian_30cm.odg<\/a><\/p>\n<p>Very quickly, because we had so little time (we settled on a date and a place a little over one month before the meeting), I created a web page and put it online the only way I could at that moment, using Github Pages. <a href=\"https:\/\/debianwomenbr.github.io\">https:\/\/debianwomenbr.github.io<\/a><\/p>\n<p>We used Mate Hackers' instance of <a href=\"https:\/\/github.com\/engageis\/nos.vc\">nos.vc<\/a> to register for the meeting, simply because we had to plan accordingly. This was the address for registration:\n<a href=\"https:\/\/encontros.matehackers.org\/pt\/projects\/60-encontro-debian-women\">https:\/\/encontros.matehackers.org\/pt\/projects\/60-encontro-debian-women<\/a><\/p>\n<p>Through the <a href=\"https:\/\/github.com\/training-center\">Training Center<\/a>, a Brazilian tech community, we got to Lucio, who works at Pipefy and offered us the space so we could hold the meeting. Thank you, Lucio, Training Center and <a href=\"https:\/\/www.pipefy.com\/\">Pipefy<\/a>!<\/p>\n<p><img alt=\"Pipefy logo\" src=\"https:\/\/rsip22.github.io\/blog\/img\/Pipefy2.png\"><\/p>\n<p>Because Miriam and I weren't in Curitiba, we had to focus the promotion of this meeting online. Not the ideal when someone wants to be truly inclusive, but we worked with the resources we had. We reached out to TechLadies and invited them - as we did with many other groups.<\/p>\n<p>This was our schedule:<\/p>\n<p><strong>Morning<\/strong><\/p>\n<p>09:00 - Welcome coffee<\/p>\n<p>10:00 - What is Free Software? Copyright, licenses, sharing<\/p>\n<p>10:30 - What is Debian?<\/p>\n<p>12:00 - Lunch Break<\/p>\n<p><strong>Afternoon<\/strong><\/p>\n<p>14:30 - Internships with Debian - Outreachy and Google Summer of Code<\/p>\n<p>15:00 - Install fest \/ helping with users issues<\/p>\n<p>16:00 - Editing the Debian wiki to register this meeting <a href=\"https:\/\/wiki.debian.org\/DebianWomen\/History\">https:\/\/wiki.debian.org\/DebianWomen\/History<\/a><\/p>\n<p>17:30 - Wrap up<\/p>\n<p>Take outs from the meeting:<\/p>\n<ul>\n<li>\n<p>Because we knew more or less how many people would attend, we were able to buy the food accordingly right before the meeting - and ended up spending much less than if we had ordered some kind of catering.<\/p>\n<\/li>\n<li>\n<p>Sadly, it would be almost as expensive to print a dozen of folders than it would be to print out hundred of them. So we ended up printing 100 folders (which was expensive enough). The good part is that we would end up handing them out during MiniDebConf Curitiba.<\/p>\n<\/li>\n<li>\n<p>We attempted a live stream of the meeting using Jitsi, but I don't think we were very successful, because we didn't have a microphone for the speakers.<\/p>\n<\/li>\n<li>\n<p>Most of our public ended up being women who, in fact, already knew and\/or used Debian, but weren't actively involved with the community.<\/p>\n<\/li>\n<li>\n<p>It was during this meeting that the need for a mailing list in Portuguese for women interested in Debian came up. Because, yes, in a country where English is taught so poorly in the schools, the language can still be a barrier. We also wanted to keep in touch and share information about the Brazilian community and what we are doing. We want next years' DebConf to have a lot of women, specially Brazilian women who are interested and\/or who are users and\/or contribute to Debian. The request for this mailing list would be put through by Helen during MiniDebConf, using the bug report system. If you can, please support us:\n<a href=\"https:\/\/bugs.debian.org\/cgi-bin\/bugreport.cgi?bug=895575\">https:\/\/bugs.debian.org\/cgi-bin\/bugreport.cgi?bug=895575<\/a><\/p>\n<\/li>\n<\/ul>\n<p>Pictures from the meeting:<\/p>\n<p><img alt=\"The breakfast table with food\" src=\"https:\/\/rsip22.github.io\/blog\/img\/debian_women_01_breakfast.jpg\"><\/p>\n<p>Our breakfast table!<\/p>\n<p><img alt=\"Miriam telling the women about Free Software, six women listening\" src=\"https:\/\/rsip22.github.io\/blog\/img\/debian_women_02_what_is_free_software.JPG\"><\/p>\n<p>Miriam's talk: What is Free Software? Copyright, licenses, sharing<\/p>\n<p><img alt=\"Renata and Miriam talking about What is Debian a tv among them shows the title of the talk\" src=\"https:\/\/rsip22.github.io\/blog\/img\/debian_women_03_what_is_Debian.JPG\"><\/p>\n<p>Miriam and Renata's talk: What is Debian?<\/p>\n<p><img alt=\"Renata talking about internships with Debian\" src=\"https:\/\/rsip22.github.io\/blog\/img\/debian_women_04_internships_with_Debian.JPG\"><\/p>\n<p>Renata talking about internships with Debian<\/p>\n<p><strong>Thank you to all the women who participated!<\/strong><\/p>\n<p><img alt=\"The participants with the two men who helped with the meeting.\" src=\"https:\/\/rsip22.github.io\/blog\/img\/debian_women_06_Debian_Women_with_staff.JPG\"><\/p>\n<p>And to our lovely staff. Thank you, Lucio, for getting us the space and thank you, <a href=\"https:\/\/www.pipefy.com\/\">Pipefy<\/a>!<\/p>\n<p>This has been partly documented at Debian Wiki (DebianWomen\/History) because the very next day after this meeting, Debian Wiki completely blocked ProtonVPN from even accessing the Wiki. Awesome. If anyone is able to, feel free to copy\/paste any of this text there.<\/p>","pubDate":"Sun, 13 May 2018 17:49:00 -0300","guid":"tag:rsip22.github.io,2018-05-13:\/blog\/debian-women-in-Curitiba.html","category":["blog","personal","debian","debian women"]},{"title":"Pushing a commit to a different repo","link":"https:\/\/rsip22.github.io\/blog\/pushing-a-commit-to-a-different-repo.html","description":"<p><img alt=\"Photo taken from the top of a hill, overlooking light green ocean beaches\" src=\"https:\/\/rsip22.github.io\/blog\/img\/trilha_da_galheta_florianopolis.JPG\"><\/p>\n<p><em>View from the Barra-Galheta beach trail, in Florianopolis, Brazil<\/em><\/p>\n<p>My Outreachy internship with Debian is over. I'm still going to write an article about it, to let everyone know what I worked on towards the ending, but I simply didn't have the time yet to sit down and compile all the information.<\/p>\n<p>As you might or might not have noticed, right after my last Outreachy activity, I sort of took a week off in the beach. \\o\/<\/p>\n<p><img alt=\"Renata's picture, a white woman sitting on the grass, overlooking the beach below. She pets a brown stray that sits next to her\" src=\"https:\/\/rsip22.github.io\/blog\/img\/renata_with_dog.JPG\"><\/p>\n<p><em>Mila, a cute stray dog that accompanied us during a whole trail<\/em><\/p>\n<p>For the past weeks, I've also been involved in the organization of three events (one of them was a <a href=\"https:\/\/debianwomenbr.github.io\">Debian Women meeting in Curitiba<\/a> that took place two Saturdays ago and another one is <a href=\"https:\/\/djangogirls.org\/portoalegre\/\">Django Girls Porto Alegre<\/a>, which starts tonight). Because of this last one, I was reviewing their <a href=\"https:\/\/tutorial.djangogirls.org\/pt\">Brazilian Portuguese tutorial<\/a> and adding some small fixes to the language. After all, we are talking to women who read the tutorial during the workshop, so why all the mentions to programmers and hackers and such should mention the male counterpart in Portuguese? Women program, too!<\/p>\n<p>When I was going to commit my fixes, though, I got an error:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"nl\">remote<\/span><span class=\"p\">:<\/span> <span class=\"nl\">error<\/span><span class=\"p\">:<\/span> <span class=\"nl\">GH006<\/span><span class=\"p\">:<\/span> <span class=\"n\">Protected<\/span> <span class=\"n\">branch<\/span> <span class=\"n\">update<\/span> <span class=\"n\">failed<\/span> <span class=\"k\">for<\/span> <span class=\"n\">refs<\/span><span class=\"o\">\/<\/span><span class=\"n\">heads<\/span><span class=\"o\">\/<\/span><span class=\"n\">master<\/span><span class=\"p\">.<\/span>\n<span class=\"n\">To<\/span> <span class=\"nl\">https<\/span><span class=\"p\">:<\/span><span class=\"c1\">\/\/github.com\/DjangoGirls\/tutorial<\/span>\n<span class=\"o\">!<\/span> <span class=\"p\">[<\/span><span class=\"n\">remote<\/span> <span class=\"n\">rejected<\/span><span class=\"p\">]<\/span>   <span class=\"n\">master<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">master<\/span> <span class=\"p\">(<\/span><span class=\"n\">protected<\/span> <span class=\"n\">branch<\/span> <span class=\"n\">hook<\/span> <span class=\"n\">declined<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Oops?<\/p>\n<p>Yup, as it so happens more often than not, I forgot to fork the repository before starting to change the files! I just did 'git clone' straight to Django Girls' tutorial repository. But, since I had already done all the steps towards the commit, what could I do to avoid losing the changes? Could I just push this commit to another repository of my own and try and open a Pull Request to DjangoGirls\/tutorial?<\/p>\n<p>Of course I had to go and search for that. Isn't that what all programmers do? Go and find someone else who already had the same problem they have to try and <a href=\"https:\/\/stackoverflow.com\/questions\/15616133\/pushing-a-commit-from-one-repository-into-another-repository\">find a solution<\/a>?<\/p>\n<p>Quick guide to the solution I've found:<\/p>\n<ul>\n<li>\n<p>Fork the original repository to my collection of repos (on Github, just clicking 'Fork' will do).<\/p>\n<\/li>\n<li>\n<p>Get the branch and the id of the commit that had been created. For instance, on this case:<\/p>\n<\/li>\n<\/ul>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">[master 4d314550] Small fixes for pt-br version<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>The branch is: master<\/p>\n<p>The id is: 4d314550<\/p>\n<ul>\n<li>Use the URL for the new repository (your fork), the branch and the commit id for a new git push command, like this:<\/li>\n<\/ul>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">git push URL_FOR_THE_NEW_REPO commit_id:branch<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Example with my repo:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">git push https:\/\/github.com\/rsip22\/tutorial 4d314550:master<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>And this was yet another article for future reference.<\/p>","pubDate":"Fri, 23 Mar 2018 00:49:00 -0300","guid":"tag:rsip22.github.io,2018-03-23:\/blog\/pushing-a-commit-to-a-different-repo.html","category":["blog","personal","git","github","djangogirls"]},{"title":"Women in MiniDebConf Curitiba campaign","link":"https:\/\/rsip22.github.io\/blog\/women-in-minidebconf.html","description":"<p>This is the text of the crowdfunding campaign I am organizing with five other extraordinary women: Alice, Ana Paula, Anna, Luciana and Miriam.<\/p>\n<p><img alt=\"Women in MiniDebConf. Let's show that, yes, there are many women with potential that are interested in the world of free technologies and who use Debian! Help with the campaign for diversity at MiniDebConf: https:\/\/catarse.me\/mulheres_na_minidebconf\" src=\"https:\/\/rsip22.github.io\/blog\/img\/women_in_minidebconf.png\"><\/p>\n<p>Here is what <a href=\"https:\/\/anna.flourishing.stream\">Anna<\/a> has to say about Debian: \"Debian is one of the strongest GNU\/Linux distributions with the free software philosophy, and that's why it's so impressive. Anyone who comes in contact with Debian necessarily learns more about free software and the FLOSS culture.\"<\/p>\n<p>The Debian project provides <a href=\"https:\/\/wiki.debian.org\/Teams\/DPL\/AskingForMoney\">travel grants<\/a> for participation in conferences - for people who are considered project members.<\/p>\n<p>And how many of these are women? Very few.<\/p>\n<p>Women interested in attending <a href=\"http:\/\/minidebconf.curitiba.br\/\">MiniDebConf Curitiba<\/a> are many, but most of them do not have the means to travel to Curitiba, specially in a big country like Brazil.<\/p>\n<p>It is a fact that women do not have the same opportunities in the IT world as men, but we can change that history. For this, we need your help.<\/p>\n<p>Let's show that, yes, there are many women with potential interested in the world of free technologies and who use Debian. At MiniDebConf, women who could already be contributing to the community will have an opportunity to interact with it, taking part in tutorials, workshops and talks. It is in everyone's best interest that the community get itself ready to include them.<\/p>\n<p>So, our way of helping to increase diversity in MiniDebConf - and perhaps among the people who contribute to Debian as well - is by giving these women the conditions they need to participate in the conference.<\/p>\n<p>The Debian Women community is well developed in other countries, but in Brazil there were still no registered groups.<\/p>\n<p>At last year's MiniDebConf, there was <a href=\"http:\/\/br2017.mini.debconf.org\/programacao.shtml\">not one single woman speaker<\/a>.<\/p>\n<p>But it does not have to be this way.<\/p>\n<p>To be able to increase diversity and to change the current situation of exclusion that we currently have in the Brazilian community, we must act on many fronts. We are already working to foster the local community and to engage other women in the use and development of Debian.<\/p>\n<p>That is why we want to also bring in women who are already Debian users, so they can share their experiences, so they can act as mentors to the newbies and so we can integrate all of them into the Debian development community.<\/p>\n<p>There have already been successful campaigns in Brazil to include women in conferences and technology communities, both as participants and as speakers: <a href=\"https:\/\/www.catarse.me\/pyladiesnofisl17\">PyLadies in FISL<\/a>, <a href=\"https:\/\/www.catarse.me\/pyladies_na_python_brasil_12\">PyLadies in Python Brazil 12<\/a>, <a href=\"https:\/\/www.catarse.me\/pyladies_na_pythonbrasil_13\">PyLadies in Python Brazil 13<\/a> and the <a href=\"https:\/\/www.catarse.me\/gophercon_br_diversity_scholarship_0b8f\">Gophercon BR Diversity Scholarship<\/a>.<\/p>\n<p>With your collaboration, this will be another goal achieved - and the Debian and free software communities will become a bit more representative of our own society.<\/p>\n<p>Bitcoin - 15YFYKHr6CfYmBCyf4JM2g8WFkCmNGDGi5<\/p>\n<p><img alt=\"Women in MiniDebConf. Let's show that, yes, there are many women with potential that are interested in the world of free technologies and who use Debian! Help with the campaign for diversity at MiniDebConf: https:\/\/catarse.me\/mulheres_na_minidebconf\" src=\"https:\/\/rsip22.github.io\/blog\/img\/who_are_the_women_in_minidebconf.png\"><\/p>\n<p>Link to the campaign: <a href=\"https:\/\/www.catarse.me\/mulheres_na_minidebconf\">https:\/\/www.catarse.me\/mulheres_na_minidebconf<\/a><\/p>","pubDate":"Mon, 05 Mar 2018 12:49:00 -0300","guid":"tag:rsip22.github.io,2018-03-05:\/blog\/women-in-minidebconf.html","category":["blog","personal","debian","debian women","women not in tech"]},{"title":"Woman. Not in tech.","link":"https:\/\/rsip22.github.io\/blog\/woman-not-in-tech.html","description":"<p><em>Thank you, <a href=\"https:\/\/twitter.com\/liviagabos\">Livia Gabos<\/a>, for helping me to improve this article by giving me feedback on it.<\/em><\/p>\n<p>Before I became an intern with <a href=\"https:\/\/outreachy.org\">Outreachy<\/a>, my Twitter bio read: \"Woman. Not in tech.\" Well, if you didn't get the picture, let me explain that meant.<\/p>\n<p>It all began with a simple request I received almost an year ago:<\/p>\n<blockquote>\n<p><em>Hey, do you want to join our [company] event and give a talk about being a women in tech?<\/em><\/p>\n<\/blockquote>\n<p>I don't have a job in the tech industry. So, yes, while society does put me in the 'woman' column, I have to admit it's a little hard to give a talk about being 'in tech' when I'm not 'in tech'.<\/p>\n<p>What I can talk about, though, it's about all the <strong>women<\/strong> who <strong>are not in tech<\/strong>. The many, many friends I have who come to <em>Women in Tech<\/em> events and meetings, who reach out to me by e-mail, Twitter or even in person, who are struggling to get into tech.<\/p>\n<p>I can talk about the only other girl in my class who, besides me, managed to get an internship. And how we both only got the position because we had passed a written exam about informatics, instead of going through usual channels such as referrals, CV analysis or interviews.<\/p>\n<p>I can talk about the women who are seen as <em>lazy<\/em>, or that <em>they just don't get it<\/em> the lessons in tech courses because they don't have the same background and the same amount of time available to study or to do homework at home as their male peers do, since they have to take care of relatives, take care of children, take care of the housework for their family, most of the times while working in one or two jobs just to be able to study.<\/p>\n<p>I can talk about the women and about the mothers who after many years being denied the possibility for a tech career are daring to change paths, but are denied junior positions in favor of younger men who \"can be trained on the job\" and have \"so much more willingness to learn\".<\/p>\n<p>I can talk about the women who are seen as <em>uninterested<\/em> in one or more FLOSS technologies because they don't contribute to said technology, since the men in FLOSS projects have continuously failed in engage and - most importantly - keep them included (but maybe that's <em>just because<\/em> women lack role models).<\/p>\n<p><img alt=\"A screenshot of the proposal made by the Brazilian community for DebConf19. Even though it lists a lot of women in tech groups, the all-male organizing team says &quot;There is an expectation that the coming of women DDs may spark the interest of these female students by Debian.&quot;\" src=\"https:\/\/rsip22.github.io\/blog\/img\/debconf_proposal.png\">\n<em>Even though there are so many Women in Tech communities in Curitiba, as listed above, the all-male 'core team' of the local Debian community itself couldn't find a single woman to work with them for the DebConf proposal. Go figure.<\/em><\/p>\n<p>I can talk about the many women I met not at tech conferences, but at teachers' conferences, that have way more experience with computers and programming than I. Women  who after years working on the field have given up IT to become teachers, not because it was their lifelong dream, but because they didn't feel comfortable and well-integrated in a male-dominated full-of-mysoginistic-ideals tech industry. Because it was - and is - almost impossible for them to break the <a href=\"http:\/\/geekfeminism.wikia.com\/wiki\/Glass_ceiling\">glass ceiling<\/a>.<\/p>\n<p>I can even talk about all the women who are lesbians that a certain community of Women In Tech <em>could not find<\/em> when they wanted someone to write an article about 'being homossexual in tech' to be published <strong>right on Brazil's Lesbian Visibility Day<\/strong>, so they had to go and ask a gay man to talk about his own experience. Well, it seems like those women aren't \"in tech\" either.<\/p>\n<blockquote>\n<p>Tokenization can be especially apparent when the lone person in a minority group is not only asked to speak for the group, but is consistently asked to speak <em>about being a member of that group<\/em>. <a href=\"http:\/\/geekfeminism.wikia.com\/wiki\/Tokenism\">Geek Feminism - Tokenism<\/a><\/p>\n<\/blockquote>\n<p>The things is, a lot of people don't want to hear any those stories. Companies in particular only want <em>token women<\/em> from outside the company (because, let's face it, most tech companies can't find the talent within) who will come up to the stage and inspire other women saying what a great experience it is to be in tech - and that \"everyone should try it too!\".<\/p>\n<p><img alt=\"&quot;Don't talk about diversity unless you're also commited to inclusion.&quot; Naomi Ceder\" src=\"https:\/\/rsip22.github.io\/blog\/img\/dont_talk_diversity_naomi_ceder.png\"><\/p>\n<p>I do believe all women should try and get knowledge about tech and that is what I work towards. We shouldn't have to rely only on the men in our life to get things done with our computers or our cell phones or our digital life.<\/p>\n<p>But to tell other women they should get into the tech industry? I guess not.<\/p>\n<p>After all, who am I to tell other women they should come to tech - and to stay in tech - when I know we are bound to face all this?<\/p>\n<h4>Addendum:<\/h4>\n<p>For Brazilian women <strong>not in tech<\/strong>, I'm organizing a crowdfunding campaign to get at least five of them the opportunity to attend <a href=\"http:\/\/minidebconf.curitiba.br\/\">MiniDebConf<\/a> in Curitiba, Parana, in April. None of these girls can afford the trip and they don't have a company to sponsor them. If you are willing to help, please get in touch or check this link: <a href=\"https:\/\/www.catarse.me\/mulheres_na_minidebconf\">Women in MiniDebConf<\/a>.<\/p>\n<h4>More on the subject:<\/h4>\n<ul>\n<li><a href=\"https:\/\/blog.ellenchisa.com\/why-do-women-in-tech-communities-thrive-while-women-in-tech-dont-472d0eb124c4\">Why Do 'Women in Tech' Communities thrive, while Women in Tech don't?<\/a>, by Ellen Chisa<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=q7nBeHBPZz0\">PyCon PL 2015 - Naomi Ceder 'Anti-patterns for diversity' (video)<\/a><\/li>\n<li><a href=\"https:\/\/ep2016.europython.eu\/media\/conference\/slides\/antipatterns-for-diversity-stop-doing-the-same-thing-but-expecting-different-results.pdf\">Anti-patterns for Diversity - EuroPython 2016 (slides)<\/a><\/li>\n<li><a href=\"http:\/\/www.latimes.com\/business\/la-fi-women-tech-20150222-story.html#page=1\">Why are women leaving the tech industry in droves?<\/a> - LA Times<\/li>\n<\/ul>","pubDate":"Tue, 27 Feb 2018 18:00:00 -0300","guid":"tag:rsip22.github.io,2018-02-27:\/blog\/woman-not-in-tech.html","category":["blog","personal","outreachy","women not in tech"]},{"title":"Working with git branches was the best decision I made","link":"https:\/\/rsip22.github.io\/blog\/git-branch-the-best-decision-I-made.html","description":"<p>This is a short story about how chosing to use git branches saved me from some trouble.<\/p>\n<h3>How did I decide to use a new branch?<\/h3>\n<p>Up until certain point, I was just commiting all the code (and notes) I wrote into the master branch, which is the default for Git. No big deal, if I broke something, I could just go back and revert one or more commits and it would be okay.<\/p>\n<p>It got to the point, though, that I would have send the code to people other than the mentors who had been seeing me breaking things: I would have to submit it for other developers to test it. While a broken code was the ideal for my mentors to see and help me in figuring out how to fix it, that wouldn't be useful for people seeing it in production and giving me feedback and suggestions for improvement. I had to send to them a good code that worked, and I had to do that while I worked on the last functionality needed, which is the recurrence rule for events.<\/p>\n<p>After working on the recurrence rule for a few hours I realized that, since it wasn't really functional yet, I couldn't simply commit it on top of the rest of the code that had already been commited\/published. Sure, I could have commented the function and commited the code that way, but it would be just too much trouble to have to comment\/uncomment it every time I would work on that part.<\/p>\n<p>That is how I chose to create a new git branch instead and starting commiting there the changes I had made.<\/p>\n<p>I created a new branch called \"devel\" and asked git to change to it:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">git checkout -b devel<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Then, I did a \"git status\" to check everything was as expected and the branch had been changed to devel:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">git status<\/span>\n<span class=\"err\">renata@debian:~\/foss_events$ git status<\/span>\n<span class=\"err\">On branch devel<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Next: staging the files and <a href=\"https:\/\/git-scm.com\/docs\/git-commit\">creating the commit<\/a>:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">git add --all .<\/span>\n<span class=\"err\">git commit -m &quot;COMMENTS FOR THE COMMIT&quot;<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Because the branch was created on my local machine, if I straight out try to just push the code upstream, it will give an error, because there is no \"devel\" branch on Github yet. So let's give some arguments to the git push command, asking it to set an upstream branch in the origin, which will receive the code:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">git push --set-upstream origin devel<\/span>\n<\/code><\/pre><\/div>\n\n\n<h3>How did this save me from some trouble?<\/h3>\n<p>Simply because, before I sent the code to the moin-devel list, I decided to clean out the repository of the old and repeated code... by deleting those files. I wanted to do that so anyone who came to try it out would be able to spot the macro easily and not to worry whether the other files had to be installed anywhere for the code to work.<\/p>\n<p>Once I had deleted those files using rm -r on the command line and right before I commited, I did a \"git status\" to check if the delete action had been recorded... that was when I noticed that I was still on the devel branch, and not on the master branch, where I wanted this change to take place! My development branch <em>should<\/em> stay the mess it was because it was stuff I used to try out.<\/p>\n<p>I had used \"rm -r\", though, so how did I get those files back to the devel branch? I mean, the easy way, not the downloading-the-repo-again way.<\/p>\n<p>Simple! I would have to <strong>discard<\/strong> the changes (deletes) I had made on the devel branch and change to the master branch to do it again:<\/p>\n<p><strong>BE CAREFUL, THIS COMMAND WILL DISCARD ANY CHANGES YOU HAVE MADE WHILE WORKING ON THE CURRENT BRANCH<\/strong><\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">git checkout -f<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>This will throw away the changes. Then, it's possible to move back to the master branch:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">git checkout master<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>And, yup, I'm totally writing this article for future reference to myself.<\/p>\n<h3>Read more<\/h3>\n<ul>\n<li><a href=\"https:\/\/guides.github.com\/introduction\/flow\/\">Understanding the GitHub Flow \u00b7 GitHub Guides<\/a><\/li>\n<\/ul>","pubDate":"Tue, 27 Feb 2018 00:00:00 -0300","guid":"tag:rsip22.github.io,2018-02-27:\/blog\/git-branch-the-best-decision-I-made.html","category":["blog","personal","outreachy","git","development","for beginners","git basics"]},{"title":"How to use the EventCalendar ical","link":"https:\/\/rsip22.github.io\/blog\/howto-use-the-ical.html","description":"<p>Hello!<\/p>\n<p>If you follow this blog, you should probably know by now that I have been working with my mentors to contribute to MoinMoin EventCalendar macro, adding the possility to export the events' data to an icalendar file.<\/p>\n<p><img alt=\"A screenshot of the code, with the function definition for creating the ical file from events from the macro\" src=\"https:\/\/rsip22.github.io\/blog\/img\/create_ical.png\"><\/p>\n<p>The code (<a href=\"https:\/\/github.com\/rsip22\/foss_events\/blob\/master\/macro\/EventCalendar-099b.py\">which can be found on this Github repository<\/a>) isn't quite ready yet, because I'm still working to convert the recurrence rule to the icalendar format, but other than that, it should be working. Hopefully.<\/p>\n<p>This guide assumes that you have the\n<a href=\"https:\/\/moinmo.in\/MacroMarket\/EventCalendar\">EventCalendar<\/a> macro installed on the wiki and that the macro is called on a determined wikipage.<\/p>\n<p>The icalendar file is now generated as an attachment the moment the macro is loaded. I created an \"ical\" link at the bottom of the calendar. When activated, this link prompts the download of the ical attachment of the page. Being an attachment, there is still the possibility to just view ical the file using the \"attachment\" menu if the user wishes to do so.<\/p>\n<p><img alt=\"Wiki page showing the calendar, with the 'ical' link at the bottom\" src=\"https:\/\/rsip22.github.io\/blog\/img\/eventcalendar_with_ical_menu.png\"><\/p>\n<p>There are two ways of importing this calendar on Thunderbird. The first one is to download the file by clicking on the link and then proceeding to import it manually to Thunderbird.<\/p>\n<p><img alt=\"Thunderbird screenshot, with the menus &quot;Events and Tasks&quot; and &quot;Import&quot; selected\" src=\"https:\/\/rsip22.github.io\/blog\/img\/events_and_tasks_import.png\"><\/p>\n<p>The second option is to \"Create a new calendar \/ On the network\" and to use the URL address from the ical link as the \"location\", as it is shown below:<\/p>\n<p><img alt=\"Thunderbird screenshot, showing the new calendar dialog and the ical URL pasted into the &quot;location&quot; textboxd\" src=\"https:\/\/rsip22.github.io\/blog\/img\/thunderbird_new_calendar_location.png\"><\/p>\n<p>As usual, it's possible to customize the name for the calendar, the color for the events and such...<\/p>\n<p><img alt=\"Thunderbird screenshot, showing the new calendar with it's events\" src=\"https:\/\/rsip22.github.io\/blog\/img\/ical_imported_to_thunderbird.png\"><\/p>\n<p>I noticed a few Wikis that use the EventCalendar, such as <a href=\"https:\/\/wiki.debian.org\">Debian wiki<\/a> itself and the <a href=\"http:\/\/wiki.fsfe.org\">FSFE wiki<\/a>. <a href=\"https:\/\/wiki.python.org\/moin\/PythonEventsCalendar#Python_Events_Calendar\">Python wiki<\/a> also seems to be using MoinMoin and EventCalendar, but it seems that they use a Google service to export the event data do iCal.<\/p>\n<p>If you read this and are willing to try the code in your wiki and give me feedback, I would really appreciate. You can find the ways to contact me in my <a href=\"https:\/\/wiki.debian.org\/RenataDAvila\">Debian Wiki profile<\/a>.<\/p>","pubDate":"Wed, 21 Feb 2018 19:49:00 -0300","guid":"tag:rsip22.github.io,2018-02-21:\/blog\/howto-use-the-ical.html","category":["blog","personal","outreachy","development","moinmoin-wiki","icalendar","eventcalendar"]},{"title":"Debugging MoinMoin and using an IDE","link":"https:\/\/rsip22.github.io\/blog\/debugging-moinmoin-and-using-an-IDE.html","description":"<h3>Debugging<\/h3>\n<p>When I was creating the cal_action, I didn't quite know how to debug MoinMoin. Could I use pudb with the wiki? I wasn't sure how. To figure out if the code I was writing worked, I ended up consulting the error logs from Apache. It sort of worked, but of course that was <em>very far<\/em> from the ideal. What if I wanted to check something that wasn't an error?<\/p>\n<p>Well, MoinMoin supposedly has a logging module, that lives on <code>moin-1.V.V\/wiki\/config\/logging\/<\/code>, but I simply couldn't get it to work as I wanted.<\/p>\n<p>I searched some more and found a guide on <a href=\"https:\/\/moinmo.in\/DebugWithWinpdb\">setting up Winpdb Source Level Debugger<\/a>, but I don't use Windows (really, where is the GNU\/Linux guide to debug?), so that didn't help. &#128557;<\/p>\n<p><em>But<\/em>... MoinMoin does offer a <a href=\"https:\/\/moinmo.in\/EclipseDevelopmentEnvironment\">guide on setting up a development enviroment with Eclipse<\/a> that I ended up following.<\/p>\n<h3>Using an IDE<\/h3>\n<p>Up until this point, most of the code I created in Python where simple scripts that could be ran and debugged in the terminal. I had used <a href=\"https:\/\/docs.python.org\/2\/library\/idle.html\">IDLE<\/a> while I was taking the <a href=\"https:\/\/www.pycursos.com\/python-para-zumbis\/\">Python para Zumbis<\/a> (Python for Zombies) course, but other than that, I just used a code editor (Sublime, then Vim and, finally, Atom) when programming in Python.<\/p>\n<p>When I was taking a tech vocational course, I used Eclipse, an <a href=\"https:\/\/en.wikipedia.org\/wiki\/Integrated_development_environment\">Integrated development environment, or IDE<\/a> to code in Java, but that was it. After I passed the course and didn't need to code in Java again, I simply let go of the IDE.<\/p>\n<p>As it turns out, going back to Eclipse, along with the <a href=\"http:\/\/www.pydev.org\/\">PyDev plugin<\/a> - both free software - was what actually helped me in debugging and figuring my way around the MoinMoin macro.<\/p>\n<p>The steps I had to take:<\/p>\n<ol>\n<li>Install eclipse-pydev and it's dependencies using Synaptic (Debian package manager)<\/li>\n<li>Define Python 2.7 as the interpreter in preferences<\/li>\n<li>Create a new workspace<\/li>\n<li>Create a new project<\/li>\n<li>Import the installed MoinMoin into the new project<\/li>\n<li>Configure the new wiki<\/li>\n<li>Run wikiserver.py<\/li>\n<\/ol>\n<p>To develop the plugins (macro and actions):<\/p>\n<ol>\n<li>Create a new workdir for the Plugins, that goes alongsite Moin<\/li>\n<li>Copy the contents from the plugin directory of the wiki to the new directory<\/li>\n<\/ol>\n<p>On step 2, though, instead of copying I just created a symbolic link to the files I had been working on that where in another directory. It would make no sense to have two copies of the same file in different places in the computer - besides, it would just complicate tracking what changes had been made ans where. To create a symbolic link:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code>$ ln -s PATH-TO-THE-ORIGINAL-FILE PATH-TO-THE-DESTINATION\/FILE_ON_DESTINATION\n<\/code><\/pre><\/div>\n\n\n<p>More on <a href=\"https:\/\/wiki.debian.org\/SymLink\">symbolic links<\/a> can be found using the command <code>man ln<\/code> on Debian's terminal.<\/p>\n<p>With the Eclipse console, I could use <code>print help(request)<\/code> to figure out what methods would be available to me with the request provided by the macro. With this, I finally began to figure out how to create the response we want (without returning the whole wiki page with it, just the event information in the icalendar format).<\/p>\n<p><img alt=\"Eclipse IDE running the wikiserver.py from MoinMoin and showing the debug output in a terminal\" src=\"https:\/\/rsip22.github.io\/blog\/img\/moin_with_eclipse.png\"><\/p>\n<p>If you don't know what I mean with request\/response: in simple terms, when you click something on a webpage (for instance, my ical link in the bottom of the calendar) in your internet browser, you are <em>requesting<\/em> a resource (the icalendar file). It's up to the server to <em>respond<\/em> with the appropriate resource (the file) or with an status code explaining why it can't fulfill your request (for instance, you get an 404 error when the page - resource - you're trying to access - <em>requesting<\/em> - can't be found).<\/p>\n<p><img alt=\"A simplified diagram of a static web server showing the request-response cycle.\" src=\"https:\/\/mdn.mozillademos.org\/files\/13841\/Basic%20Static%20App%20Server.png\"><\/p>\n<p>Here you can find more information on <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Learn\/Server-side\/First_steps\/Client-Server_overview\">client-Server overview, by Mozilla web docs<\/a>.<\/p>\n<p>So now I'm working on constructing that response. Thanks to the Eclipse console, now I know that just trying to use the response.write() method with the return value of my method I get a <code>TypeError: Expected bytes<\/code>. I will probably have to transform the result of the method to generate the icalendar into bytes instead of InstanceClass. Well, at least I can say that the choices that have been made when writing the ExportPDF macro come to me more clearly now.<\/p>","pubDate":"Wed, 14 Feb 2018 17:19:00 -0200","guid":"tag:rsip22.github.io,2018-02-14:\/blog\/debugging-moinmoin-and-using-an-IDE.html","category":["blog","personal","outreachy","development","eclipse","python","moinmoin-wiki"]},{"title":"Exporting EventCalendar data to ical","link":"https:\/\/rsip22.github.io\/blog\/exporting-eventcalendar-data-to-ical.html","description":"<p>I have been working on the EventCalendar code, to allow to export the events' data to icalendar.<\/p>\n<h3>A new cal_action<\/h3>\n<p>I started by creating a new cal_action (ical) that would call the function I created, download_events_ical(). I added it to the bottom menu of the calendar, along with with other views (Weekly, Daily, Simple) that also use cal_action to return the calendar.<\/p>\n<p><img alt=\"Wiki page showing the calendar, with the 'ical' link at the bottom\" src=\"https:\/\/rsip22.github.io\/blog\/img\/eventcalendar_with_ical_menu.png\"><\/p>\n<p>Afterwards, discussing it with my mentors, we figured out that this could be improved by always offering the .ics file as an attachment to the page.<\/p>\n<p>Either way, no matter if we decide to leave just the link at the bottom or put it up as an attachment, or both, the file must be properly constructed with the data gathered by EventCalendar from the wiki pages with event data. This is what I'm working on this past week.<\/p>\n<h3>Setting the headers<\/h3>\n<p>The 'download' or opening the icalendar file directly in the calendar application should happen automatically once the proper headers are set, so I had to specify the Content-Type that will be returned for the 'download ical' request.<\/p>\n<p>A bug error page with code that actually showed me how to do that in moinmoin: <a href=\"https:\/\/moinmo.in\/MoinMoinBugs\/EditorContentTypeHttpHeader\">EditorContentTypeHttpHeader<\/a><\/p>\n<p>Now the browser knows that this file should be opened by a software that handles calendars (this immediately prompts the open\/save dialog in browsers).<\/p>\n<h3>Debugging<\/h3>\n<p>To parse the data, I investigated the EventCalendar variables that had the event data stored.<\/p>\n<p>I knew there was a function loadEvents() already written in the code, that could unpack to dictionary variables (events, cal_events, labels) the info about the events. I needed to see how this data was constructed to figure out how to use it for the icalendar elements. With a print command, I ended up with this:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"c\">Events: {<\/span>\n<span class=\"c\">    u&#39;e_Workshops_2&#39;: {<\/span>\n<span class=\"c\">        &#39;date_len&#39;: 1,<\/span>\n<span class=\"c\">        &#39;startdate&#39;: u&#39;20180124&#39;,<\/span>\n<span class=\"c\">        &#39;time_len&#39;: 0,<\/span>\n<span class=\"c\">        &#39;enddate&#39;: u&#39;20180124&#39;,<\/span>\n<span class=\"c\">        &#39;description&#39;: u&#39;workshop test&#39;,<\/span>\n<span class=\"c\">        &#39;recur_freq&#39;: 0,<\/span>\n<span class=\"c\">        &#39;title&#39;: u&#39;workshop&#39;,<\/span>\n<span class=\"c\">        &#39;clone&#39;: 0,<\/span>\n<span class=\"c\">        &#39;recur_type&#39;: &#39;&#39;,<\/span>\n<span class=\"c\">        &#39;label&#39;: &#39;&#39;,<\/span>\n<span class=\"c\">        &#39;recur_until&#39;: &#39;&#39;,<\/span>\n<span class=\"c\">        &#39;bgcolor&#39;: u&#39;#000000&#39;,<\/span>\n<span class=\"c\">        &#39;hid&#39;: &#39;head-f5e173288ca20abb0a37e74aa035e6bbedc3e6ff-2&#39;,<\/span>\n<span class=\"c\">        &#39;starttime&#39;: &#39;&#39;,<\/span>\n<span class=\"c\">        &#39;endtime&#39;: &#39;&#39;,<\/span>\n<span class=\"c\">        &#39;id&#39;: u&#39;e_Workshops_2&#39;,<\/span>\n<span class=\"c\">        &#39;refer&#39;: u&#39;Workshops&#39;<\/span>\n<span class=\"c\">    },<\/span>\n<span class=\"err\">}<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Which shows that each 'events' item is an unicode object (e_Workshops_1, e_Conferences_1...) that contains another dictionary.<\/p>\n<p>In Python, dictionaries may be interacted with using the values method. So that is what I did, and, for each value, I called a make_todo function that would create a <a href=\"https:\/\/en.wikipedia.org\/wiki\/ICalendar#To-do_(VTODO)\">VTODO<\/a>. But scratch that. Even though I indeed created a 'to-do', that isn't what I <em>should have<\/em> created - I realize that as I write this post. We are talking about events, so I should've created a  <a href=\"https:\/\/en.wikipedia.org\/wiki\/ICalendar#Events_(VEVENT)\">VEVENT<\/a> component, as needed for icalendar format. I'm going to begin rectifying this as soon as I finish this post.<\/p>\n<h3>Next steps<\/h3>\n<p>As it is now, the cal_event does allow to download a file... but the file returned is an html page from the wiki, with the icalendar element inserted in it. This isn't what we need. We need just the icalendar file to be returned, no HTML, and certainly not the wiki page, so it can be understood properly by the calendar software\/application.<\/p>\n<p>This is caused both by how MoinMoin works and by the macro code itself. When the EventCalendar macro executes, it appends it's result to the page html. I thought for a bit that if this append didn't happen, the return result would be an empty page and that this might allow our .ics file 'take over', so I kept thinking of turning the download_ical function into a whole new macro which uses EventCalendar data, but MoinMoin doesn't actually work like that.<\/p>\n<p>I have found a macro called <a href=\"https:\/\/moinmo.in\/MacroMarket\/FormatConverter\">Format Converter<\/a> that 'allows instant single-file conversions from various input formats into various output formats'. Maybe icalendar could be added to it and that would solve the problem? If that so, anyone who wanted to use EventCalendar with the capacity to export to .ics, would need to install this macro as well. Doesn't seem like the most appopriate way to solve this. Maybe just copying part of FormatConverter to EventCalendar could work.<\/p>\n<p>I'm still investigating the issue of returning the file with my mentors. We will see how that works out.<\/p>\n<h2>Some thoughts<\/h2>\n<p>I remember how I thought it would be \"simple\", developing this functionality to the EventCalendar macro. Now I see that it is anything but simple, specially because of how much of MoinMoin wiki internals I have to learn in order to do so (and that is just a fraction of the whole system). If I didn't have mentors who patientily help me during the whole process (special thanks to Bruno!) and if I wasn't being paid for the time I spend learning all this - if I was just doing this on my own for the sake of doing it, it's very probable that I would have given up trying to contribute to this complex project a while ago. I'm very glad that <a href=\"https:\/\/outreachy.org\">Outreachy<\/a> came along and it's enabling this work - and my technical and personal growth.<\/p>\n<p>By the way, for anyone that might be interested, I have been commiting the changes to the macro to the EventCalendar-099.py file on my <a href=\"https:\/\/github.com\/rsip22\/foss_events\/blob\/master\/EventCalendar-099b.py\">foss_events Github repository<\/a>. I warn you that it is kind of messy because I leave there things I use to debug and things that I think might be useful.<\/p>\n<h3>Bonus: how to download attachments from MoinMoin using curl<\/h3>\n<p>I was bummed that I couldn't download the macro .py files using the terminal, it always gave me 403 (Forbidden) and returned HTML. I talked about this with my mentor Bruno and... there is actually a way! It turns out that the '&amp;' character in the URL probably confuses wget and curl, so we use quotes for the address and... it works!<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">curl &#39;https:\/\/moinmo.in\/MacroMarket\/FormatConverter?action=AttachFile&amp;do=get&amp;target=FormatConverter-1.0.py \u2026&#39; --output http:\/\/FormatConverter.py<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>I'm still curious to see if this won't be a problem when specifying the URL to download the .ics file using Thunderbird.<\/p>","pubDate":"Wed, 07 Feb 2018 14:49:00 -0200","guid":"tag:rsip22.github.io,2018-02-07:\/blog\/exporting-eventcalendar-data-to-ical.html","category":["blog","outreachy","development","icalendar","eventcalendar","moinmoin-wiki"]},{"title":"The right to be included in the conversation","link":"https:\/\/rsip22.github.io\/blog\/the-right-to-be-included-in-the-conversation.html","description":"<blockquote>\n<p>\"To be GOVERNED is to be watched, inspected, spied upon, directed, law-driven, numbered, regulated, enrolled, indoctrinated, preached at, controlled, checked, estimated, valued, censured, commanded, by creatures who have neither the right nor the wisdom nor the virtue to do so. To be GOVERNED is to be <em>at every operation, at every transaction<\/em> noted, registered, counted, taxed, stamped, measured, numbered, assessed, licensed, authorized, admonished, prevented, forbidden, reformed, corrected, punished. It is, under pretext of public utility, and in the name of the general interest, to be placed under contribution, drilled, fleeced, exploited, monopolized, extorted from, squeezed, hoaxed, robbed; then, <strong>at the slightest resistance, the first word of complaint, to be repressed<\/strong>, fined, vilified, harassed, hunted down, abused, clubbed, disarmed, bound, choked, imprisoned, judged, condemned, shot, deported, sacrificed, sold, betrayed; and to crown all, mocked, ridiculed, derided, outraged, dishonored. That is government; that is its justice; that is its morality.\"<\/p>\n<p><em>Pierre-Joseph Proudhon<\/em><\/p>\n<\/blockquote>\n<p>Lately, <em>to be<\/em> on the internet is to be governed. A lot of those actions Proudhon mentions might as well refer to our interactions with the companies that 'rule' the web.<\/p>\n<p>A while back, I applied to a tech event made for women, but I didn't get selected to attend it. I really, really wanted to attend it and because, for me, it wasn't clear on why I hadn't been selected (and what should I do next time to get to attend), I sent an email asking. Their answer? Even though the registration was put up on a public website (for the event) and anyone could sign up there, the spots for this event had been reserved for girls who had filled the form they had put up on the group's Facebook page. I didn't use Facebook and I wasn't one of these people, <em>so I had been excluded<\/em>. Okay.<\/p>\n<p>When I began PyLadies Porto Alegre, I insisted with Liliane that we didn't make the same mistake. That any information about our meetings should be open to anyone who wanted to join. That is why we set up an website which hopefully any person with internet access could visit and get the next meeting date. We also created a mailing list (indeed, with the third-party company MailChimp) which you only need an e-mail to subscribe to and get the next meeting date delivered to your inbox. We publish event dates on <a href=\"https:\/\/quitter.se\/pyladiespoa\">Quitter.se<\/a> (an instance of GNU Social), which then replicates to <a href=\"https:\/\/www.twitter.com\/pyladiespoa\">Twitter<\/a>.<\/p>\n<blockquote>\n<p>But the feedback we got on Python Brasil after presenting the work we've been doing with PyLadies Porto Alegre for the past year was the following:<\/p>\n<p>\"I didn't even know PyLadies Porto Alegre was so active, that it had organized this much stuff. You people don't divulge much.\"<\/p>\n<p>\"What do you mean?\"<\/p>\n<p>\"Well, I always check PyLadies Brazil Facebook and there is always stuff about other groups there, but there isn't anything about PyLadies Porto Alegre\".<\/p>\n<p>\"Yes, well, all our stuff is public in our website, that anyone can access without needing a Facebook account. We publish to GNU Social and Twitter. Our website link is on the PyLadies Brazil site. But if your only source of news is Facebook...\"<\/p>\n<\/blockquote>\n<p>If your only source of news is Facebook <strong>you will miss tons of all the amazing things<\/strong> that are happening out there and <strong>that are not on Facebook<\/strong>. The internet and the web itself are way more than Facebook (even though, <a href=\"https:\/\/www.theguardian.com\/technology\/2017\/jul\/27\/facebook-free-basics-developing-markets\">depending on your access<\/a>, it might be a bit complicated to get past this. This is not the case for the privileged people that I usually talk to and that simply <em>chose<\/em> to have Facebook as their 'internet portal\/newsfeed').<\/p>\n<p>The point is: regardless of which service the people looking to engage with PyLadies Porto Alegre had agreed to provide data for (Mailchimp, Twitter or their an email provider) - <strong>or even if they chose not to provide data at all<\/strong> simply visiting our site using proxy or VPNs or Tor or scriptblockers that allowed them to anonimize their location - we tried ensure that <em>anyone<\/em> could get the information about the meetings.<\/p>\n<p>Because Facebook actively excludes people that don't have an account there (requiring log in to even look at some posts or events), we didn't bother with a profile there at first (even though we do have a Facebook page now -.-).<\/p>\n<p>Even with all that, sometimes it feels like a one-women cruzade, to ensure that the information and participation stays open and free. Because it's a sad reality that if I don't take part and if I don't stir this conversation on this group, all these efforts are quickly forgotten and people easily fall back into the closed options \"that everyone uses\" (namely Facebook, Whatsapp, Google Hangouts).<\/p>\n<p>It's important to say that it's not just companies that exclude people. <em>We exclude people from the conversation<\/em>, from the ability to interact with us when we chose proprietary (and closed) services to communicate with each other.<\/p>\n<p>In name of using 'easy' and 'free' (as in beer) tools, people simply overlook that <strong>all these closed options<\/strong> require that you (and everyone else that want to contact you and has to use those plataforms) sign a contract with a company to use these services. And it's not even a contract that you can negotiate the terms, it's a contract that the company dictates the terms and it's terms that can be changed at at point in time, always to benefit these companies.<\/p>\n<p><img alt=\"A Google Map with several spots marked, linked by red lines. Those are places I had visited in my city during a whole month.\" src=\"https:\/\/rsip22.github.io\/blog\/img\/google_poa.jpg\"><\/p>\n<p>This is a picture of all the data Google collected about my movements during one month in Porto Alegre, simply because I owned an Android smartphone. <em>If a person, a company or a government knowing and cataloging every movement you make doesn't freak you out, I honestly don't know what would.<\/em><\/p>\n<p>People overlook that all those 'free' services aren't really free. They have a cost. A cost that is being paid by our actual freedom as human beings. They take away our freedom of having a really free internet and we are complicit. We are allowing them to do that. By giving away our privacy (and the privacy of other fellow human beings), we are allowing these companies (and, a lot of times, governments) to <a href=\"https:\/\/web.archive.org\/web\/20170330182053\/https:\/\/nakedsecurity.sophos.com\/2016\/12\/01\/uber-now-collecting-location-data-even-after-you-leave-a-drivers-car\/\">watch<\/a> and know <a href=\"https:\/\/web.archive.org\/web\/20180124200822\/https:\/\/qz.com\/1131515\/google-collects-android-users-locations-even-when-location-services-are-disabled\/\">every step we take<\/a>, to chose <a href=\"https:\/\/web.archive.org\/web\/20180122003021\/https:\/\/www.theguardian.com\/technology\/2016\/dec\/04\/google-democracy-truth-internet-search-facebook\">what we read<\/a> and <a href=\"https:\/\/www.eff.org\/deeplinks\/2012\/10\/privacy-ubuntu-1210-amazon-ads-and-data-leaks\">which websites we access<\/a>, <a href=\"https:\/\/web.archive.org\/web\/20180127082223\/https:\/\/gizmodo.com\/yes-google-uses-its-power-to-quash-ideas-it-doesn-t-li-1798646437\">how we think<\/a>, to limit <a href=\"https:\/\/web.archive.org\/web\/20180119183133\/https:\/\/theintercept.com\/2017\/12\/30\/facebook-says-it-is-deleting-accounts-at-the-direction-of-the-u-s-and-israeli-governments\/\">our freedom of expression<\/a>, <a href=\"https:\/\/web.archive.org\/web\/20161226232013\/http:\/\/www.foxnews.com\/tech\/2011\/10\/21\/facebook-building-shadow-profiles-non-members-experts-allege.html\"><em>our freedom of chosing not to have our data in their database<\/em><\/a> and even <a href=\"https:\/\/web.archive.org\/web\/20171216025056\/https:\/\/www.theguardian.com\/technology\/2015\/feb\/16\/facebook-real-name-policy-suspends-native-americans\">our freedom of being<\/a>. A lot of times, they act <a href=\"https:\/\/web.archive.org\/web\/20180127195031\/https:\/\/www.propublica.org\/article\/facebook-doesnt-tell-users-everything-it-really-knows-about-them\">without us even knowing<\/a> what they are doing.<\/p>\n<p>If there is one wish I have for this <a href=\"https:\/\/en.wikipedia.org\/wiki\/Data_Privacy_Day\">Data Privacy Day<\/a>, is for people to start considering the services they are using and how this affects everyone else around them. I do not choose to have my phone number indexed by Google, you do that for me when you add me to your <em>sync'd in the cloud<\/em> contacts. I do not choose to have my face indentified and indexed by Facebook, it's you who do that every time you upload a picture with me to your timeline. But, most of all, it's not me who choses to be 'out of reach', 'not to participate in your community or your meeting', 'to isolate myself from communicating on the internet' (even though I am constantly online). It's you who choose to hide behind proprietary services with terms I cannot consciously agree to.<\/p>","pubDate":"Sun, 28 Jan 2018 00:01:00 -0200","guid":"tag:rsip22.github.io,2018-01-28:\/blog\/the-right-to-be-included-in-the-conversation.html","category":["blog","personal","privacy","free software"]},{"title":"Ideas for the project architecture and short term goals","link":"https:\/\/rsip22.github.io\/blog\/the-project-architecture.html","description":"<p>There has been many discussions about planning for the FOSS calendar. On this post, I report about some of the ideas.<\/p>\n<h3>How I first thought the Foss Events calendar<\/h3>\n<p>Back in december, when I was just making sense of my surroundings and trying to find a way to start the internship, I drawed this diagram to picture in my head how everything would work:<\/p>\n<p><img alt=\"A diagram showing the schema that will be described bellow. Each item is connected to the next using arrows, except for the relationship between user interface and API, where data flows both ways.\" src=\"https:\/\/rsip22.github.io\/blog\/img\/foss_events.jpg\"><\/p>\n<ol>\n<li>\n<p>There would be a \"crawler.py\" module, which would access each site on a determined list (It could be Facebook, Meetup or any other site such as another calendar) that have events information. This module would pull the event data from those sites.<\/p>\n<\/li>\n<li>\n<p>A validator.py would check if the data was good and <em>if there was<\/em> data. Once this module verified this, it would dump all info into a dirty_events database.<\/p>\n<\/li>\n<li>\n<p>The dirty_events database would be accessed by the module parser.py, which would clean and organize the data to be properly stored in the events database.<\/p>\n<\/li>\n<li>\n<p>An API.py module would query the events database and return the proper data, formatted into JSON, ical and\/or some other formats.<\/p>\n<\/li>\n<li>\n<p>There would be an user interface to get data from API.py and to display this data. It should also be possible to add (properly formatted) events to the database using this interface. [If we were talking about a plugin to merely <em>display<\/em> the events in MoinMoin or Wordpress or some other system, this plugin would enter in this category.]<\/p>\n<\/li>\n<\/ol>\n<h3>The ideas that Daniel put on paper<\/h3>\n<p>Then, when I shared with my mentors, Daniel came up with this:<\/p>\n<p><img alt=\"Another diagram. On the left, the plugins boxes, they connect to an aggregator, with input towards the storage. The storage then outputs to reports and data dump, represented on the right.\" src=\"https:\/\/rsip22.github.io\/blog\/img\/foss_events_daniel.jpg\"><\/p>\n<p>Daniel proposed that module or plugins could be developed or improved (there are some of them already, but they might not support iCalendar URLs) for MoinMoin, Drupal, Wordpress that would allow the data each of these systems have about events to be aggregated. Information from the Meetup and the Facebook APIs could be converted to ical to be agreggated. This aggregation process could happen through a cron job - and I believe <em>daily<\/em> is enough, because people don't usually publish an event to happen in the very next day (they need time for people to acknowledge it). If the time frame ends up not being the ideal, this can be reviewed and changed later.<\/p>\n<p>Once all this data is gathered, it would then be stored, inserting it or updating it in what could be a PostgreSQL or NoSQL solution.<\/p>\n<p>Using the database with events information, it should be possible to do a data dump with all the information or to give \"reports\" of the event data, whether the user wants to access the data in iCalendar format (for Thunderbird or GNOME Evolution) or just HTML for viewing in the browser.<\/p>\n<h3>Short term goals<\/h3>\n<p>Creating a FOSS events calendar it is a big project that will most certainly continue beyond my Outreachy internship.<\/p>\n<p>Therefore, along with my mentors, we have established that my short term goal will be to contribute a bit to it by working on the MoinMoin EventCalendar so the events can be exported to the iCalendar format.<\/p>\n<p>I have been studying and playing around with the EventCalendar code and, so far, I've concluded that the best way to do this might be by writing a function to it. Just like there are other functions on this plugin to change the display of the calendar, there might be a function to just sort the data to the iCalendar format and to allow downloading the file.<\/p>","pubDate":"Wed, 24 Jan 2018 14:49:00 -0200","guid":"tag:rsip22.github.io,2018-01-24:\/blog\/the-project-architecture.html","category":["blog","outreachy","development","moinmoin-wiki"]},{"title":"Improving communication","link":"https:\/\/rsip22.github.io\/blog\/improving-communication.html","description":"<p>After my last post, a lot of things happened, but what I'm going to talk about now is the thing that I believe had the most impact in improving my experience with the Outreachy internship: the changes that were made in communication, specially between me and my mentors.<\/p>\n<p>When I struggled with the tasks, with moving forward, it was somewhat a wish of mine to change the ways I communicate with my mentors. (Alright, Renata, so why didn't you start by just doing that? Well, I wasn't sure where to begin.)<\/p>\n<p>I didn't know how to propose something like that to my mentors, I mean... maybe that was how Outreachy was supposed to be and I just might have set different expectations? The first step to figure this out I took by reaching <a href=\"https:\/\/anna.flourishing.stream\/\">Anna<\/a>, an Outreachy intern with Wikimedia who I'd been talking to since the interns announcement had been made.<\/p>\n<p>I asked her about how she interacted with her mentors and how often, so I knew what I could ask for. She told me about her weekly meetings with her mentors and how she could chat direcly with them when she ran into some issues. And, indeed, I felt like things like that what I wanted to happen.<\/p>\n<p>Before I could reach out and discuss this with my mentors, though, Daniel himself read last week's post and brought up the idea of us speaking on the phone for the first time. That was indeed a good experience and I told him I would like to repeat or establish some sort of schedule to communicate with each other.<\/p>\n<p>Yes, well, a schedule would be the best improvement, I think. It's not just about the means (phone call or IRC, for instance) that we communicate, but to know that, at some point, either one per week or bi-weekly, there would be someone to talk to at a determined time so I could untie any knots that were created during my internship (if that makes sense). I know I could just send an email at any time to my mentors (and sometimes I do) and they would reply, but that's not quite the point.<\/p>\n<p>So, to make this short: I started to talk to one of my mentors daily and it's been really helpful. We are working on a schedule for bi-weekly calls. And we always have e-mails. I'm glad to say that now I talk not just with mentors, but also with fellow brazilian Outreachers and former participants and everyone is willing to help out.<\/p>\n<p>For all the ways to reach me, you can look up my <a href=\"https:\/\/wiki.debian.org\/RenataDAvila\">Debian wiki profile<\/a>.<\/p>","pubDate":"Mon, 22 Jan 2018 12:49:00 -0200","guid":"tag:rsip22.github.io,2018-01-22:\/blog\/improving-communication.html","category":["blog","personal","outreachy","communication"]},{"title":"Not being perfect","link":"https:\/\/rsip22.github.io\/blog\/not-being-perfect.html","description":"<p>I know I am <em>very<\/em> late on this update (and also very late on emailing back my mentors). I am sorry. It took me a long time to figure out how to put into words everything that has been going on for the past few weeks.<\/p>\n<p>Let's begin with this: yes, I am so very aware there is an evaluation coming up (in two days) and that it is important \"to have at least one piece of work that is visible in the week of evaluation\" to show what I have been doing since the beginning of the internship.<\/p>\n<p>But the truth is: as of now, I don't have any code to show. And what that screams to me is that it means that I have failed. I didn't know what to say either to my mentors or in here to explain that I didn't meet everyone's expectations. That I had not been perfect.<\/p>\n<p>So I had to ask what could I learn from this and how could I keep going and working on this project?<\/p>\n<p>Coincidence or not, I was wondering that when I crossed paths (again) with one of the most amazing TED Talks there is:<\/p>\n<p><a href=\"https:\/\/www.ted.com\/talks\/reshma_saujani_teach_girls_bravery_not_perfection\">Reshma Saujani's \"Teach girls bravery, not perfection\"<\/a><\/p>\n<p>And yes, that could be me. Even though I had written down almost every step I had taken trying to solve the problem I got stuck on, I wasn't ready to share all that, not even with my mentors (yes, I can see now how that isn't very helpful). I would rather let them go thinking I am lazy and didn't do anything all this time than to send all those notes about my failure and have them realize I didn't know what they expected me to know or... well, that they'd picked the wrong intern.<\/p>\n<h3>What was I trying to do?<\/h3>\n<p>As I talked about in my <a href=\"\/blog\/my-project-with-outreachy\">previous post<\/a>, the EventCalendar macro seemed like a good place to start doing some work. I wanted to add a piece of code to it that would allow to export the events data to the iCalendar format. Because this is sort of what I did in <a href=\"\/blog\/my-contribution-to-github-icalendar\">my contribution for the github-icalendar<\/a>) and because the mentor Daniel had suggested something like that, I thought that it would be a good way of getting myself familiarized to how macro development is done for MoinMoin wiki.<\/p>\n<h3>How far did I go?<\/h3>\n<p>As I had planned to do, I started by studying the EventMacro.py, to understand how it works, and taking notes.<\/p>\n<p>EventMacro fetches events from MoinMoin pages and uses Python's <a href=\"https:\/\/docs.python.org\/2\/library\/pickle.html\">Pickle module<\/a> to serialize and to de-serialize the data. This <em>should be<\/em> okay if you can trust enough the people editing the wiki (and, therefore, creating the events), but this might not be a good option if we start using external sources (such as third-party websites) for event data - at least, not directly on the data gathered. See the warning below, from the Pickle module docs:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"n\">Warning<\/span><span class=\"o\">:<\/span> <span class=\"n\">The<\/span> <span class=\"n\">pickle<\/span> <span class=\"n\">module<\/span> <span class=\"k\">is<\/span> <span class=\"n\">not<\/span> <span class=\"n\">secure<\/span> <span class=\"n\">against<\/span> <span class=\"n\">erroneous<\/span> <span class=\"n\">or<\/span> <span class=\"n\">maliciously<\/span> <span class=\"n\">constructed<\/span> <span class=\"n\">data<\/span><span class=\"o\">.<\/span> <span class=\"n\">Never<\/span> <span class=\"n\">unpickle<\/span> <span class=\"n\">data<\/span> <span class=\"n\">received<\/span> <span class=\"n\">from<\/span> <span class=\"n\">an<\/span> <span class=\"n\">untrusted<\/span> <span class=\"n\">or<\/span> <span class=\"n\">unauthenticated<\/span> <span class=\"n\">source<\/span><span class=\"o\">.<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>From the code and from the inputs from the mentors, I understand that EventMacro is more about <em>displaying<\/em> the events, putting them on a wiki page. Indeed, this could be helpful later on, but not exactly for the purpose we want now, which is to have some standalone application to gather data about the events, model this data in the way that we want it to be organized and maybe making it assessible by an API and\/or exporting as JSON? <em>Then<\/em>, either MoinMoin or any other FOSS community project could chose how to display and make use of them.<\/p>\n<h3>What did go wrong?<\/h3>\n<p>But the thing is... even if I had studied the code, I couldn't see it running on my MoinMoin instance. I have tried and tried, but, generally speaking, I got stuck on trying to get macros to work. Standard macros, that come with MoinMoin, work perfectly. But macros from MacroMarket, I couldn't find a way to make them work.<\/p>\n<p>For the EventCalendar macro, I tried my best to follow the instructions on the <a href=\"https:\/\/moinmo.in\/MacroMarket\/EventCalendar#Installation_Guide\">Instalation Guide<\/a> but I simply couldn't find a way for it to be processed.<\/p>\n<p>Things I did:<\/p>\n<ul>\n<li>I downloaded the macro file and renamed it to EventCalendar.py<\/li>\n<li>I put it in the local macro directory (yourwiki\/data\/plugins\/macro) and proceeded with the rest of the instructions.<\/li>\n<li>When that didn't work, I copied the file to the global macro directory (MoinMoin\/macro), it wasn't enough.<\/li>\n<li>I made sure to <a href=\"https:\/\/moinmo.in\/MacroMarket\/EventCalendar?action=AttachFile&amp;do=view&amp;target=eventcal-096.css\">add the .css<\/a> to all styles, both for common.css and screen.css, still didn't work.<\/li>\n<li>I thought that maybe it was the arguments on the macro, so I tried to add it to the wiki page in the following ways:<\/li>\n<\/ul>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"o\">&lt;&lt;<\/span><span class=\"n\">EventCalendar<\/span><span class=\"o\">&gt;&gt;<\/span>\n\n<span class=\"o\">&lt;&lt;<\/span><span class=\"n\">EventCalendar<\/span><span class=\"p\">(<\/span><span class=\"n\">category<\/span><span class=\"o\">=<\/span><span class=\"n\">CategoryEventCalendar<\/span><span class=\"p\">)<\/span><span class=\"o\">&gt;&gt;<\/span>\n\n<span class=\"o\">&lt;&lt;<\/span><span class=\"n\">EventCalendar<\/span><span class=\"p\">(,<\/span><span class=\"n\">category<\/span><span class=\"o\">=<\/span><span class=\"n\">CategoryEventCalendar<\/span><span class=\"p\">)<\/span><span class=\"o\">&gt;&gt;<\/span>\n\n<span class=\"o\">&lt;&lt;<\/span><span class=\"n\">EventCalendar<\/span><span class=\"p\">(,,<\/span><span class=\"n\">category<\/span><span class=\"o\">=<\/span><span class=\"n\">CategoryEventCalendar<\/span><span class=\"p\">)<\/span><span class=\"o\">&gt;&gt;<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Still, the macro wasn't processed and appeared just like that on the page, even though I had already created pages with that category and added event info to them.<\/p>\n<p>To investigate, I tried using other macros:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/moinmo.in\/HelpOnMacros\">Hits<\/a>, a System Information macro<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/moinmo.in\/HelpOnMacros\/MonthCalendar\">MonthCalendar<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/moinmo.in\/macro\/ShowSmileys.py\">ShowSmileys<\/a><\/p>\n<\/li>\n<\/ul>\n<p>These all came with the MoinMoin core and they all worked.<\/p>\n<p>I tried other ones:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/moinmo.in\/MacroMarket\/SiteIndex\">SiteIndex<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/moinmo.in\/MacroMarket\/EmbedContent\">EmbedContent<\/a><\/p>\n<\/li>\n<\/ul>\n<p>That, just like EventCalendar, didn't work.<\/p>\n<p>Going through these macros also made me realize how awfully documented most of them usually are, in particular about the instalation and making it work with the whole system, even if the code is clear. (And to think that at the beginning of this whole thing I had to search and read up on what are <a href=\"https:\/\/www.python.org\/dev\/peps\/pep-0257\/\">DocStrings<\/a> because the <a href=\"https:\/\/moinmo.in\/CodingStyle\">MoinMoin Coding Style<\/a> says: \"That does NOT mean that there should be no docstrings.\". Now it seems like some developers didn't know what DocStrings were either.)<\/p>\n<p>I checked permissions, but it couldn't be that, because the downloaded macros has the same permissions as the other macros and they all belong to the same user.<\/p>\n<p>I thought that maybe it was a problem with Python versions or even with the way MoinMoin instalation was done. So I tried some alternatives. First, I tried to install it again on a new CodeAnywhere Ubuntu container, but I still had the same problem.<\/p>\n<p>I tried with a local Debian instalation... same problem. Even though Ubuntu is based on Debian, the fact that macros didn't work on either was telling me that the problem wasn't necessarily the distribution, that it didn't matter which packages or libraries each of them come with. The problem seemed to be somewhere else.<\/p>\n<p>Then, I proceeded to analyze the Apache error log to see if I could figure out.<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"p\">[<\/span><span class=\"n\">Thu<\/span> <span class=\"n\">Jan<\/span> <span class=\"mi\">11<\/span> <span class=\"mo\">00<\/span><span class=\"o\">:<\/span><span class=\"mi\">33<\/span><span class=\"o\">:<\/span><span class=\"mf\">28.230387<\/span> <span class=\"mi\">2018<\/span><span class=\"p\">]<\/span> <span class=\"p\">[<\/span><span class=\"nl\">wsgi<\/span><span class=\"p\">:<\/span><span class=\"n\">error<\/span><span class=\"p\">]<\/span> <span class=\"p\">[<\/span><span class=\"n\">pid<\/span> <span class=\"mi\">5845<\/span><span class=\"o\">:<\/span><span class=\"n\">tid<\/span> <span class=\"mi\">139862907651840<\/span><span class=\"p\">]<\/span> <span class=\"p\">[<\/span><span class=\"n\">remote<\/span> <span class=\"o\">::<\/span><span class=\"mi\">1<\/span><span class=\"o\">:<\/span><span class=\"mi\">43998<\/span><span class=\"p\">]<\/span> <span class=\"mi\">2018<\/span><span class=\"o\">-<\/span><span class=\"mo\">01<\/span><span class=\"o\">-<\/span><span class=\"mi\">11<\/span> <span class=\"mo\">00<\/span><span class=\"o\">:<\/span><span class=\"mi\">33<\/span><span class=\"o\">:<\/span><span class=\"mi\">28<\/span><span class=\"p\">,<\/span><span class=\"mi\">229<\/span> <span class=\"n\">WARNING<\/span> <span class=\"n\">MoinMoin<\/span><span class=\"p\">.<\/span><span class=\"nl\">log<\/span><span class=\"p\">:<\/span><span class=\"mi\">112<\/span> <span class=\"o\">\/<\/span><span class=\"n\">usr<\/span><span class=\"o\">\/<\/span><span class=\"n\">local<\/span><span class=\"o\">\/<\/span><span class=\"n\">lib<\/span><span class=\"o\">\/<\/span><span class=\"n\">python2<\/span><span class=\"mf\">.7<\/span><span class=\"o\">\/<\/span><span class=\"n\">dist<\/span><span class=\"o\">-<\/span><span class=\"n\">packages<\/span><span class=\"o\">\/<\/span><span class=\"n\">MoinMoin<\/span><span class=\"o\">\/<\/span><span class=\"n\">support<\/span><span class=\"o\">\/<\/span><span class=\"n\">werkzeug<\/span><span class=\"o\">\/<\/span><span class=\"n\">filesystem<\/span><span class=\"p\">.<\/span><span class=\"nl\">py<\/span><span class=\"p\">:<\/span><span class=\"mi\">63<\/span><span class=\"o\">:<\/span> <span class=\"nl\">BrokenFilesystemWarning<\/span><span class=\"p\">:<\/span> <span class=\"n\">Detected<\/span> <span class=\"n\">a<\/span> <span class=\"n\">misconfigured<\/span> <span class=\"n\">UNIX<\/span> <span class=\"nl\">filesystem<\/span><span class=\"p\">:<\/span> <span class=\"n\">Will<\/span> <span class=\"n\">use<\/span> <span class=\"n\">UTF<\/span><span class=\"o\">-<\/span><span class=\"mi\">8<\/span> <span class=\"n\">as<\/span> <span class=\"n\">filesystem<\/span> <span class=\"n\">encoding<\/span> <span class=\"n\">instead<\/span> <span class=\"n\">of<\/span> <span class=\"err\">&#39;<\/span><span class=\"n\">ANSI_X3<\/span><span class=\"mf\">.4<\/span><span class=\"o\">-<\/span><span class=\"mi\">1968<\/span><span class=\"err\">&#39;<\/span>\n\n<span class=\"p\">[<\/span><span class=\"n\">Thu<\/span> <span class=\"n\">Jan<\/span> <span class=\"mi\">11<\/span> <span class=\"mo\">00<\/span><span class=\"o\">:<\/span><span class=\"mi\">34<\/span><span class=\"o\">:<\/span><span class=\"mf\">11.089031<\/span> <span class=\"mi\">2018<\/span><span class=\"p\">]<\/span> <span class=\"p\">[<\/span><span class=\"nl\">wsgi<\/span><span class=\"p\">:<\/span><span class=\"n\">error<\/span><span class=\"p\">]<\/span> <span class=\"p\">[<\/span><span class=\"n\">pid<\/span> <span class=\"mi\">5840<\/span><span class=\"o\">:<\/span><span class=\"n\">tid<\/span> <span class=\"mi\">139862941255424<\/span><span class=\"p\">]<\/span> <span class=\"p\">[<\/span><span class=\"n\">remote<\/span> <span class=\"o\">::<\/span><span class=\"mi\">1<\/span><span class=\"o\">:<\/span><span class=\"mi\">44010<\/span><span class=\"p\">]<\/span> <span class=\"mi\">2018<\/span><span class=\"o\">-<\/span><span class=\"mo\">01<\/span><span class=\"o\">-<\/span><span class=\"mi\">11<\/span> <span class=\"mo\">00<\/span><span class=\"o\">:<\/span><span class=\"mi\">34<\/span><span class=\"o\">:<\/span><span class=\"mi\">11<\/span><span class=\"p\">,<\/span><span class=\"mi\">088<\/span> <span class=\"n\">INFO<\/span> <span class=\"n\">MoinMoin<\/span><span class=\"p\">.<\/span><span class=\"n\">config<\/span><span class=\"p\">.<\/span><span class=\"nl\">multiconfig<\/span><span class=\"p\">:<\/span><span class=\"mi\">127<\/span> <span class=\"n\">using<\/span> <span class=\"n\">wiki<\/span> <span class=\"nl\">config<\/span><span class=\"p\">:<\/span> <span class=\"o\">\/<\/span><span class=\"n\">usr<\/span><span class=\"o\">\/<\/span><span class=\"n\">local<\/span><span class=\"o\">\/<\/span><span class=\"n\">share<\/span><span class=\"o\">\/<\/span><span class=\"n\">moin<\/span><span class=\"o\">\/<\/span><span class=\"n\">wikiconfig<\/span><span class=\"p\">.<\/span><span class=\"n\">pyc<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Alright, the wikiconfig.py wasn't actually set to utf-8, my bad. I fixed and re-read it again to make sure I hadn't missed anything this time. I restarted the server and... nope, macros still don't work.<\/p>\n<p>So, misconfigured UNIX filesystem? Not quite sure what was that, but I searched for it and it seemed to be easily solved generating an en_US.UTF-8 <a href=\"https:\/\/wiki.debian.org\/Locale\">Locale<\/a> and\/or setting it, right?<\/p>\n<p>Well, these errors really did go away... but even after restarting the apache server, those macros still wouldn't work.<\/p>\n<p>So this is how things went up until today. It ends up with me not having a clue where else to look to try and fix the macros and make them work so I could start coding and having some results... or does it?<\/p>\n<h3>This was a post about a failure, but...<\/h3>\n<p>Whoever wrote that \"often times writing a blog post will help you find the solution you're working on\" on the e-mail we received when we where accepted for Outreachy... <em>damn<\/em>, you were right.<\/p>\n<p>I opened the command history to get my MoinMoin instance running again, so I could verify that the names of the macros that worked and which ones didn't were correct for this post, when...<\/p>\n<p><em>I cannot believe I couldn't figure out.<\/em><\/p>\n<p>What had been happening all this time? Yes, the .py macro file should go to moin\/data\/plugin\/macro, but not on the directories I was putting them. I didn't realize that all this time, the wiki wasn't actually installed on the directory yourwiki\/data\/plugins\/macro where the extracted source code is. It is installed on \/usr\/local\/share\/, so the files should be put on \/usr\/local\/share\/moin\/data\/plugin\/macro and <em>of course<\/em> I should've realized this sooner, after all, I was the one to install it, but... it happens.<\/p>\n<p>I copied the files there, set the appropriate owner and... IT-- WORKED!<\/p>\n<p><img alt=\"Mozilla Firefox screenshot showing MoinMoin wiki with the EventCalendar plugin working and displaying a calendar for January 2018\" src=\"https:\/\/rsip22.github.io\/blog\/img\/eventcalendar_working.png\"><\/p>","pubDate":"Wed, 17 Jan 2018 17:49:00 -0200","guid":"tag:rsip22.github.io,2018-01-17:\/blog\/not-being-perfect.html","category":["blog","personal","outreachy","development","moinmoin-wiki"]},{"title":"My notes on Moin Moin","link":"https:\/\/rsip22.github.io\/blog\/my-notes-on-moin-moin.html","description":"<p>Below are just some appointments that I had made while working\/studying MoinMoin wiki in December.<\/p>\n<h3>Just download and install it?<\/h3>\n<p>Downloading <a href=\"https:\/\/moinmo.in\/MoinMoinDownload\">MoinMoin Wiki<\/a> comes with a very nice message saying: 'You also need to apply this bugfix patch, sorry.' Which meant nothing to me, because I had never applied a patch before. And, really, that is not very welcoming to new people, it makes me wonder why couldn't they just provide a final corrected version of the code for instalation? But, anyway, I had to learn how to do that.<\/p>\n<h3>Applying a patch on GNU\/Linux<\/h3>\n<p>At first, I had a bit of trouble trying to figure out what 'applying a patch' meant in practical terms (what I had to do to apply them). I had <em>created a patch<\/em> before, when contributing to some translations, but I had never <em>applied a patch<\/em>.<\/p>\n<p>I searched online for a bit and... it ended up not being as difficult as it sounds (but it would be so much easier <em>not having to do it to begin with<\/em>). First of all, I had to find the 'raw commit' on the link provided and download the file to the moinmoin directory. Not only that, but this file should be saved with a .diff extension, for instance: <strong>patch_file.diff<\/strong>.<\/p>\n<p>Then, inside the directory the command patch should be used:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">patch -p1 &lt; patch_file.diff<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>And done! Patch applied to all the four files.<\/p>\n<h3>Categories<\/h3>\n<p>From my understanding, to use EventCalendar, at least a page inside a category had to be created.<\/p>\n<blockquote>\n<p>To insert an event, insert the event information in any pages of specified category (CategoryEventCalendar by default). <a href=\"EventCalendar\">https:\/\/moinmo.in\/MacroMarket\/EventCalendar<\/a><\/p>\n<\/blockquote>\n<p>That meant I had to play a bit with MoinMoin and get familiarized on how to use it. Sure, I had used a wiki before (Wikipedia and, as I mentioned in another post, ikiwiki). I spend a whole day just doing that, learning how to create new categories on this wiki and creating new pages, inserting the new pages in a category, listing them and such. Was CategoryCategory a thing? Should I just write EventCalendar or CategoryEventCalendar? This last one won, because that seems to be the pattern for the MoinMoin website itself.<\/p>\n<h3>Still on Macros<\/h3>\n<p>A macro is entered as wiki markup and it processes a few parameters to generate an output, which is displayed in the content area.<\/p>\n<p>MoinMoin allows two types of macros:<\/p>\n<ul>\n<li><a href=\"https:\/\/moinmo.in\/HelpOnMacros\">Standard macros<\/a>\nStandard macros are macros which code comes with MoinMoin code. They are ready to use.<\/li>\n<\/ul>\n<blockquote>\n<p>Macros reside in MoinMoin\/macro and data\/plugin\/macro.<\/p>\n<p>The macro object can access the following objects:<\/p>\n<p>macro.request (see MoinMoin\/request)<\/p>\n<p>http:\/\/hg.moinmo.in\/moin\/1.8?f=-1;file=MoinMoin\/request<\/p>\n<p>macro.formatter (see MoinMoin\/formatter for API)<\/p>\n<p>http:\/\/hg.moinmo.in\/moin\/1.8?f=-1;file=MoinMoin\/formatter<\/p>\n<p>macro.formatter.page (see MoinMoin\/Page.py)<\/p>\n<p>http:\/\/hg.moinmo.in\/moin\/1.8?f=-1;file=MoinMoin\/Page.py<\/p>\n<p>Macros should use macro.formatter to create the output and return it.<\/p>\n<\/blockquote>\n<p>That makes sense, now. <a href=\"https:\/\/moinmo.in\/MacroMarket\/EmbedContent?action=AttachFile&amp;do=view&amp;target=EmbedContent.py\">EmbedContent<\/a> uses this macro.formatter and EventCalendar uses it as well. This is called when the macro is executed (on EventCalendar, it calls a setglobalvalues function and uses global variables to it).<\/p>\n<ul>\n<li><a href=\"https:\/\/moinmo.in\/MacroMarket\/\">Macros from the macro market<\/a>\nThis is the place to find new macros - and to publish macros developed by the community. There are some guidance for developers, talking about security and documentation, not to mention on how to publish there (create a wiki page).<\/li>\n<\/ul>\n<p>Macros from the macro market have to be downloaded and put on the correct directory where MoinMoin wiki is installed to work. I noticed that, for some reason, wget can't be used to download the .py file with the macro code, which sucks when you're using just a terminal on a server.<\/p>","pubDate":"Sun, 31 Dec 2017 00:49:00 -0200","guid":"tag:rsip22.github.io,2017-12-31:\/blog\/my-notes-on-moin-moin.html","category":["blog","personal","outreachy","development","moinmoin-wiki"]},{"title":"My project with Outreachy","link":"https:\/\/rsip22.github.io\/blog\/my-project-with-outreachy.html","description":"<p>Let's get to the project I actually applied to:<\/p>\n<h2>To build a calendar for FOSS events<\/h2>\n<p>We have a page on Debian wiki where we centralize the information needed to make that a reality, you can find it here: <a href=\"https:\/\/wiki.debian.org\/SocialEventAndConferenceCalendars\">SocialEventAndConferenceCalendars<\/a><\/p>\n<p>So, in fact, the first thing I did on my internship was:<\/p>\n<ul>\n<li>\n<p>Search for more sources for FOSS events that hadn't been mentioned in that page yet<\/p>\n<\/li>\n<li>\n<p>Update said page with these sources<\/p>\n<\/li>\n<li>\n<p>Add some attributes for events that I believe could be useful for people wanting to attend them, such as:<\/p>\n<ul>\n<li>Is the registration (and not just the CFP) still open?<\/li>\n<li>Does the event has a code of conduct?<\/li>\n<li>What about accessibility?<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>I understand that some of these informations might not be readily available for most of the events, but maybe the mere act of mentioning them in our aggregation system may be enough to an organizer to think about them, if they aim to have their event mentioned \"by us\"?<\/p>\n<p>Both my mentor, Daniel, and I have been looking around to find projects that have worked on a goal similar to this one, to study them and see what can be learned from what has been done already and what can be reused from it. They are mentioned on the wiki page as well. If you know any others, feel free to add there or to let us know!<\/p>\n<p>Among the proposed deliverables for this project:<\/p>\n<ul>\n<li>making a plugin for other community web sites to maintain calendars within their existing web site (plugin for Discourse forums, MoinMoin, Drupal, MediaWiki, WordPress, etc) and export it as iCalendar data<\/li>\n<li>developing tools for parsing iCalendar feeds and storing the data into a large central database<\/li>\n<li>developing tools for searching the database to help somebody find relevant events or see a list of deadlines for bursary applications<\/li>\n<\/ul>\n<p>My dear mentor Daniel Pocock suggested that I considered working on a plugin for <a href=\"https:\/\/moinmo.in\/MoinMoinWiki\">MoinMoinWiki<\/a>, because Debian and FSFE use MoinMoin for their wikis. I have to admit that I thought that was an awesome idea as soon as I read it, but I was a bit afraid that it would be a very steep learning curve to learn how MoinMoin worked and how I could contribute to it. I'm glad Daniel calmed my fears and reminded me that the mentors are on my side and glad to help!<\/p>\n<p>So, what else have I been doing?<\/p>\n<p>So far? I would say studying! Studying documentation for MoinMoin, studying code that has already been written by others, studying how to plan and to implement this project.<\/p>\n<p>And what have I learned so far?<\/p>\n<h2>What is MoinMoin Wiki?<\/h2>\n<p><img alt=\"MoinMoin logo, sort of a white &quot;M&quot; inside a circle with light blue background. The corners of the M are rounded and seem connected like nodes\" src=\"https:\/\/rsip22.github.io\/blog\/img\/Moinmoin.png\"><\/p>\n<p>MoinMoin is a wiki written in... Python (YAY! \\o\/). Let's say that I have... interacted with development on a wiki-like system back when I created my first (and now defunct) blog post-Facebook.<\/p>\n<p><img alt=\"Ikiwiki logo, the first 'iki' is black and mirrors the second one, with a red 'W' in the middle\" src=\"https:\/\/rsip22.github.io\/blog\/img\/ikiwiki.png\"><\/p>\n<p><a href=\"https:\/\/ikiwiki.info\/\">Ikiwiki<\/a> was written in Perl, a language I know close to nothing about it, which limited a lot how I could interact with. I am glad that I will be able to work with a language that I am way more familiarized with. (And, on Prof. Masanori's words:  \"Python is a cool language.\")<\/p>\n<p>I also learned that MoinMoin's storage mechanism is based on flat files and folders, rather than a database (I swear that, despite <a href=\"\/chosing-a-system-for-the-blog\">my defense for flat file systems<\/a>, this is a coincidence. I mean, if you believe in coincidences). I also found out that the development uses <a href=\"https:\/\/www.mercurial-scm.org\/\">Mercurial<\/a> for version control. I look forward to learning exploring it, because so far I have only used git.<\/p>\n<p>The past few days I set up a local MoinMoin instance. Even though there is <a href=\"https:\/\/moinmo.in\/HowTo\/Debian8\">a HowTo guide<\/a> to get MoinMoinWiki working on Debian, I had a little trouble setting it up using it. Mostly because the guide is sort of confusing with permissions, I think? I mean, it says to create a new user with no login, but then it gives commands that can only be executed by root or sudo. That doesn't seen very wise. So I went on and found <a href=\"https:\/\/hub.docker.com\/r\/olavgg\/moinmoin-wiki\/\">a docker image for MoinMoin wiki<\/a> and was able to work on MoinMoin with it. This image is based on Debian Jessie, so maybe that is something that I might work to improve in the future.<\/p>\n<p>Only after I got everything working with docker that I found this <a href=\"https:\/\/master19.moinmo.in\/InstallDocs\/QuickInstall#qdlinux\">page with instructions for Linux<\/a> which was what I should've tried in the first place, because I didn't really needed fully configurated server with nginx and uwsgi, only a local instance to play with. It happens.<\/p>\n<p>I studied the development guide for MoinMoin and I have also worked to understand the development process (and what Macros, Plugins and such are in this context), so I could figure out where and how to develop!<\/p>\n<h3><em>Macros<\/em><\/h3>\n<blockquote>\n<p>A macro is entered as wiki markup and it processes a few parameters to generate an output, which is displayed in the content area.<\/p>\n<\/blockquote>\n<p>Searching for Macros, I found out there is a <a href=\"https:\/\/moinmo.in\/WikiCourse\/21%20Macros\">Calendar Macro<\/a>. And I have discovered that, besides the Calendar Macro, there is also an <a href=\"https:\/\/moinmo.in\/MacroMarket\/EventCalendar\">EventCalendar macro<\/a> that was developed years ago. I expect to use the next few days to <a href=\"https:\/\/moinmo.in\/MacroMarket\/EventCalendar?action=AttachFile&amp;do=view&amp;target=EventCalendar-099b.py\">study the EventCalendar code<\/a> more throughly, but the first impression I had is that this code that can be reused and improved for the FOSS calendar.<\/p>\n<h3><em>Parsers<\/em><\/h3>\n<blockquote>\n<p>A parser is entered as wiki markup and it processes a few parameters and a multiline block of text data to generate an output, which is displayed in the content area.<\/p>\n<\/blockquote>\n<h3><em>Actions<\/em><\/h3>\n<blockquote>\n<p>An action is mostly called using the menu (or a macro) and generates a complete HTML page on its own.<\/p>\n<\/blockquote>\n<p>So maybe I will have to work a bit on this afterwards, to interact with the macro and customize the information to be displayed? I am not sure, I will have to look more into this.<\/p>\n<p>I guess that is all I have to report for now. See you in two weeks (or less)!<\/p>","pubDate":"Wed, 20 Dec 2017 02:20:00 -0200","guid":"tag:rsip22.github.io,2017-12-20:\/blog\/my-project-with-outreachy.html","category":["blog","outreachy","development","moinmoin-wiki"]},{"title":"My contribution to Github-icalendar","link":"https:\/\/rsip22.github.io\/blog\/my-contribution-to-github-icalendar.html","description":"<p>Hello!<\/p>\n<p>Now that <a href=\"\/blog\/hello-world\">you already know a bit about me<\/a>, let me start talking about my internship with Outreachy.<\/p>\n<p>One of the steps to apply to the internship is to pick the project you would like to work on. I chose the one with Debian to build <a href=\"https:\/\/wiki.debian.org\/Outreachy\/Round15\/Projects#Outreachy.2FRound15.2FProjects.2FSocialEventAndConferenceCalendars.A_calendar_database_of_social_events_and_conferences\">a calendar database of social events and conferences<\/a>.<\/p>\n<p>It is also part of the application process to make some contribution for the project. At first, it wasn't clear to me what contribution would that be (I hadn't found that URL yet), so I went to the <a href=\"irc:\/\/irc.debian.org\/debian-outreach\">#debian-outreach<\/a> IRC channel and... well, asked, of course. That is when I found the page with a description of the task. I was supposed to learn about the iCalendar format (I didn't even know what it was, back then!) and work on an <a href=\"https:\/\/github.com\/dpocock\/github-icalendar\/issues\/6\">issue on the github-icalendar project<\/a>: to use repository labels in one of the suggested ways.<\/p>\n<h2>My contribution for github-icalendar<\/h2>\n<p><a href=\"https:\/\/github.com\/dpocock\/github-icalendar\/\">Github-icalendar<\/a> works by accessing the open issues in all repositories that the user has access to and transforming them into an iCalendar feed of VTODO items.<\/p>\n<p>I chose to solve the labels issue using them to filter the list of issues that should appear in a feed. I imagined two use cases for it:<\/p>\n<ol>\n<li>\n<p>An user wants to get issues from all their repositories that contain a given label (getting all 'bug' issues, for instance)<\/p>\n<\/li>\n<li>\n<p>An user wants to get issues from only an specific repository that contain a given label.<\/p>\n<\/li>\n<\/ol>\n<p>Therefore, the label system should support both of these uses.<\/p>\n<p>Working on this contribution taught me not only about the icalendar format, but it also gave me hands-on experience on interacting with the <a href=\"https:\/\/developer.github.com\/v3\/issues\/\">Github Issues API<\/a>.<\/p>\n<p>Back in October, I was able to attend <a href=\"http:\/\/2017.pythonbrasil.org.br\">Python Brasil<\/a>, the national conference about Python, during which I stayed in an accomodation with other PyLadies and allies. I used this opportunity to share what I had developed so far and to get some feedback. That's how I learned about pudb and how to use it to debug my code (and find out where I was getting the Github Issues API wrong). Because I found it so useful, on my Pull-Request, I proposed it to be added to the project, to help with future development. I also started adding some tests and wrote some specifications as suggestions to anyone who keeps working on it.<\/p>\n<p>I would like take this opportunity to thank you to the friends who pointed me in the right direction during the application process and made this internship a reality to me, in particular Elias Dorneles.<\/p>","pubDate":"Wed, 20 Dec 2017 00:01:00 -0200","guid":"tag:rsip22.github.io,2017-12-20:\/blog\/my-contribution-to-github-icalendar.html","category":["blog","outreachy","development","github-icalendar"]},{"title":"Creating a blog with pelican and Github pages","link":"https:\/\/rsip22.github.io\/blog\/create-a-blog-with-pelican-and-github-pages.html","description":"<p>Today I'm going to talk about how this blog was created. Before we begin, I expect you to be familiarized with using Github and creating a Python virtual enviroment to develop. If you aren't, I recommend you to learn with the <a href=\"https:\/\/tutorial.djangogirls.org\">Django Girls tutorial<\/a>, which covers that and more.<\/p>\n<p>This is a tutorial to help you publish a personal blog hosted by Github. For that, you will need a regular Github user account (instead of a project account).<\/p>\n<p>The first thing you will do is to create the Github repository where your code will live. If you want your blog to point to only your username (like rsip22.github.io) instead of a subfolder (like rsip22.github.io\/blog), you have to create the repository with that full name.<\/p>\n<p><img alt=\"Screenshot of Github, the menu to create a new repository is open and a new repo is being created with the name 'rsip22.github.io'\" src=\"https:\/\/rsip22.github.io\/blog\/img\/create_github_repository.png\"><\/p>\n<p>I recommend that you initialize your repository with a README, with a .gitignore for Python and with a <a href=\"https:\/\/www.gnu.org\/licenses\/license-list.html\">free software license<\/a>. If you use a free software license, <em>you still own the code<\/em>, but you make sure that others will benefit from it, by allowing them to study it, reuse it and, most importantly, keep sharing it.<\/p>\n<p>Now that the repository is ready, let's clone it to the folder you will be using to store the code in your machine:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code>$ git clone https:\/\/github.com\/YOUR_USERNAME\/YOUR_USERNAME.github.io.git\n<\/code><\/pre><\/div>\n\n\n<p>And change to the new directory:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code>$ <span class=\"nb\">cd<\/span> YOUR_USERNAME.github.io\n<\/code><\/pre><\/div>\n\n\n<!-- more -->\n\n<p>Because of how Github Pages prefers to work, serving the files from the master branch, you have to put your source code in a new branch, preserving the \"master\" for the output of the static files generated by Pelican. To do that, you must create a new branch called \"source\":<\/p>\n<div class=\"highlight\"><pre><span><\/span><code>$ git checkout -b <span class=\"nb\">source<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Create the virtualenv with the Python3 version installed on your system.<\/p>\n<p>On GNU\/Linux systems, the command might go as:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code>$ python3 -m venv venv\n<\/code><\/pre><\/div>\n\n\n<p>or as<\/p>\n<div class=\"highlight\"><pre><span><\/span><code>$ virtualenv --python<span class=\"o\">=<\/span>python3.5 venv\n<\/code><\/pre><\/div>\n\n\n<p>And activate it:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code>$ <span class=\"nb\">source<\/span> venv\/bin\/activate\n<\/code><\/pre><\/div>\n\n\n<p>Inside the virtualenv, you have to install pelican and it's dependencies. You should also install ghp-import (to help us with publishing to github) and Markdown (for writing your posts using markdown). It goes like this:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">(venv)$ pip install pelican markdown ghp-import<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Once that is done, you can start creating your blog using pelican-quickstart:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">(venv)$ pelican-quickstart<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Which will prompt us a series of questions. Before answering them, take a look at my answers below:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"k\">Where<\/span><span class=\"w\"> <\/span><span class=\"n\">do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"k\">create<\/span><span class=\"w\"> <\/span><span class=\"n\">your<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">web<\/span><span class=\"w\"> <\/span><span class=\"n\">site<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"o\">[<\/span><span class=\"n\">.<\/span><span class=\"o\">]<\/span><span class=\"w\"> <\/span><span class=\"p\">.<\/span><span class=\"o\">\/<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">What<\/span><span class=\"w\"> <\/span><span class=\"n\">will<\/span><span class=\"w\"> <\/span><span class=\"n\">be<\/span><span class=\"w\"> <\/span><span class=\"n\">the<\/span><span class=\"w\"> <\/span><span class=\"n\">title<\/span><span class=\"w\"> <\/span><span class=\"k\">of<\/span><span class=\"w\"> <\/span><span class=\"n\">this<\/span><span class=\"w\"> <\/span><span class=\"n\">web<\/span><span class=\"w\"> <\/span><span class=\"n\">site<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"n\">Renata<\/span><span class=\"err\">&#39;<\/span><span class=\"n\">s<\/span><span class=\"w\"> <\/span><span class=\"n\">blog<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Who<\/span><span class=\"w\"> <\/span><span class=\"n\">will<\/span><span class=\"w\"> <\/span><span class=\"n\">be<\/span><span class=\"w\"> <\/span><span class=\"n\">the<\/span><span class=\"w\"> <\/span><span class=\"n\">author<\/span><span class=\"w\"> <\/span><span class=\"k\">of<\/span><span class=\"w\"> <\/span><span class=\"n\">this<\/span><span class=\"w\"> <\/span><span class=\"n\">web<\/span><span class=\"w\"> <\/span><span class=\"n\">site<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"n\">Renata<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">What<\/span><span class=\"w\"> <\/span><span class=\"n\">will<\/span><span class=\"w\"> <\/span><span class=\"n\">be<\/span><span class=\"w\"> <\/span><span class=\"n\">the<\/span><span class=\"w\"> <\/span><span class=\"k\">default<\/span><span class=\"w\"> <\/span><span class=\"k\">language<\/span><span class=\"w\"> <\/span><span class=\"k\">of<\/span><span class=\"w\"> <\/span><span class=\"n\">this<\/span><span class=\"w\"> <\/span><span class=\"n\">web<\/span><span class=\"w\"> <\/span><span class=\"n\">site<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"o\">[<\/span><span class=\"n\">pt<\/span><span class=\"o\">]<\/span><span class=\"w\"> <\/span><span class=\"n\">en<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">specify<\/span><span class=\"w\"> <\/span><span class=\"n\">a<\/span><span class=\"w\"> <\/span><span class=\"n\">URL<\/span><span class=\"w\"> <\/span><span class=\"k\">prefix<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">g<\/span><span class=\"p\">.,<\/span><span class=\"w\"> <\/span><span class=\"nl\">http<\/span><span class=\"p\">:<\/span><span class=\"o\">\/\/<\/span><span class=\"n\">example<\/span><span class=\"p\">.<\/span><span class=\"n\">com<\/span><span class=\"w\">   <\/span><span class=\"p\">(<\/span><span class=\"n\">Y<\/span><span class=\"o\">\/<\/span><span class=\"n\">n<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">n<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">enable<\/span><span class=\"w\"> <\/span><span class=\"n\">article<\/span><span class=\"w\"> <\/span><span class=\"n\">pagination<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">Y<\/span><span class=\"o\">\/<\/span><span class=\"n\">n<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">y<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">How<\/span><span class=\"w\"> <\/span><span class=\"n\">many<\/span><span class=\"w\"> <\/span><span class=\"n\">articles<\/span><span class=\"w\"> <\/span><span class=\"n\">per<\/span><span class=\"w\"> <\/span><span class=\"n\">page<\/span><span class=\"w\"> <\/span><span class=\"n\">do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"o\">[<\/span><span class=\"n\">10<\/span><span class=\"o\">]<\/span><span class=\"w\"> <\/span><span class=\"mi\">10<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">What<\/span><span class=\"w\"> <\/span><span class=\"k\">is<\/span><span class=\"w\"> <\/span><span class=\"n\">your<\/span><span class=\"w\"> <\/span><span class=\"nc\">time<\/span><span class=\"w\"> <\/span><span class=\"k\">zone<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"o\">[<\/span><span class=\"n\">Europe\/Paris<\/span><span class=\"o\">]<\/span><span class=\"w\"> <\/span><span class=\"n\">America<\/span><span class=\"o\">\/<\/span><span class=\"n\">Sao_Paulo<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">generate<\/span><span class=\"w\"> <\/span><span class=\"n\">a<\/span><span class=\"w\"> <\/span><span class=\"n\">Fabfile<\/span><span class=\"o\">\/<\/span><span class=\"n\">Makefile<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">automate<\/span><span class=\"w\"> <\/span><span class=\"n\">generation<\/span><span class=\"w\"> <\/span><span class=\"ow\">and<\/span><span class=\"w\"> <\/span><span class=\"n\">publishing<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">Y<\/span><span class=\"o\">\/<\/span><span class=\"n\">n<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">Y<\/span><span class=\"w\"> <\/span><span class=\"o\">**<\/span><span class=\"err\">#<\/span><span class=\"w\"> <\/span><span class=\"n\">PAY<\/span><span class=\"w\"> <\/span><span class=\"n\">ATTENTION<\/span><span class=\"w\"> <\/span><span class=\"k\">TO<\/span><span class=\"w\"> <\/span><span class=\"n\">THIS<\/span><span class=\"err\">!<\/span><span class=\"o\">**<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"n\">an<\/span><span class=\"w\"> <\/span><span class=\"n\">auto<\/span><span class=\"o\">-<\/span><span class=\"n\">reload<\/span><span class=\"w\"> <\/span><span class=\"o\">&amp;<\/span><span class=\"w\"> <\/span><span class=\"n\">simpleHTTP<\/span><span class=\"w\"> <\/span><span class=\"n\">script<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">assist<\/span><span class=\"w\"> <\/span><span class=\"k\">with<\/span><span class=\"w\"> <\/span><span class=\"n\">theme<\/span><span class=\"w\"> <\/span><span class=\"ow\">and<\/span><span class=\"w\"> <\/span><span class=\"n\">site<\/span><span class=\"w\"> <\/span><span class=\"n\">development<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">Y<\/span><span class=\"o\">\/<\/span><span class=\"n\">n<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">n<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">upload<\/span><span class=\"w\"> <\/span><span class=\"n\">your<\/span><span class=\"w\"> <\/span><span class=\"n\">website<\/span><span class=\"w\"> <\/span><span class=\"k\">using<\/span><span class=\"w\"> <\/span><span class=\"n\">FTP<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">y<\/span><span class=\"o\">\/<\/span><span class=\"n\">N<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">n<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">upload<\/span><span class=\"w\"> <\/span><span class=\"n\">your<\/span><span class=\"w\"> <\/span><span class=\"n\">website<\/span><span class=\"w\"> <\/span><span class=\"k\">using<\/span><span class=\"w\"> <\/span><span class=\"n\">SSH<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">y<\/span><span class=\"o\">\/<\/span><span class=\"n\">N<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">n<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">upload<\/span><span class=\"w\"> <\/span><span class=\"n\">your<\/span><span class=\"w\"> <\/span><span class=\"n\">website<\/span><span class=\"w\"> <\/span><span class=\"k\">using<\/span><span class=\"w\"> <\/span><span class=\"n\">Dropbox<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">y<\/span><span class=\"o\">\/<\/span><span class=\"n\">N<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">n<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">upload<\/span><span class=\"w\"> <\/span><span class=\"n\">your<\/span><span class=\"w\"> <\/span><span class=\"n\">website<\/span><span class=\"w\"> <\/span><span class=\"k\">using<\/span><span class=\"w\"> <\/span><span class=\"n\">S3<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">y<\/span><span class=\"o\">\/<\/span><span class=\"n\">N<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">n<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">upload<\/span><span class=\"w\"> <\/span><span class=\"n\">your<\/span><span class=\"w\"> <\/span><span class=\"n\">website<\/span><span class=\"w\"> <\/span><span class=\"k\">using<\/span><span class=\"w\"> <\/span><span class=\"n\">Rackspace<\/span><span class=\"w\"> <\/span><span class=\"n\">Cloud<\/span><span class=\"w\"> <\/span><span class=\"n\">Files<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">y<\/span><span class=\"o\">\/<\/span><span class=\"n\">N<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">n<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">Do<\/span><span class=\"w\"> <\/span><span class=\"n\">you<\/span><span class=\"w\"> <\/span><span class=\"n\">want<\/span><span class=\"w\"> <\/span><span class=\"k\">to<\/span><span class=\"w\"> <\/span><span class=\"n\">upload<\/span><span class=\"w\"> <\/span><span class=\"n\">your<\/span><span class=\"w\"> <\/span><span class=\"n\">website<\/span><span class=\"w\"> <\/span><span class=\"k\">using<\/span><span class=\"w\"> <\/span><span class=\"n\">GitHub<\/span><span class=\"w\"> <\/span><span class=\"n\">Pages<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">y<\/span><span class=\"o\">\/<\/span><span class=\"n\">N<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">y<\/span><span class=\"w\"><\/span>\n<span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"k\">Is<\/span><span class=\"w\"> <\/span><span class=\"n\">this<\/span><span class=\"w\"> <\/span><span class=\"n\">your<\/span><span class=\"w\"> <\/span><span class=\"n\">personal<\/span><span class=\"w\"> <\/span><span class=\"n\">page<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">username<\/span><span class=\"p\">.<\/span><span class=\"n\">github<\/span><span class=\"p\">.<\/span><span class=\"n\">io<\/span><span class=\"p\">)<\/span><span class=\"vm\">?<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">y<\/span><span class=\"o\">\/<\/span><span class=\"n\">N<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">y<\/span><span class=\"w\"><\/span>\n<span class=\"n\">Done<\/span><span class=\"p\">.<\/span><span class=\"w\"> <\/span><span class=\"n\">Your<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">project<\/span><span class=\"w\"> <\/span><span class=\"k\">is<\/span><span class=\"w\"> <\/span><span class=\"n\">available<\/span><span class=\"w\"> <\/span><span class=\"k\">at<\/span><span class=\"w\"> <\/span><span class=\"o\">\/<\/span><span class=\"n\">home<\/span><span class=\"o\">\/<\/span><span class=\"n\">username<\/span><span class=\"o\">\/<\/span><span class=\"n\">YOUR_USERNAME<\/span><span class=\"p\">.<\/span><span class=\"n\">github<\/span><span class=\"p\">.<\/span><span class=\"n\">io<\/span><span class=\"w\"><\/span>\n<\/code><\/pre><\/div>\n\n\n<p>About the time zone, it should be specified as TZ Time zone (full list here: <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_tz_database_time_zones\">List of tz database time zones<\/a>).<\/p>\n<p>Now, go ahead and create your first blog post! You might want to open the project folder on your favorite code editor and find the \"content\" folder inside it. Then, create a <em>new<\/em> file, which can be called my-first-post.md (don't worry, this is just for testing, you can change it later). The contents should begin with the metadata which identifies the Title, Date, Category and more from the post before you start with the content, like this:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"na\">.lang<\/span><span class=\"err\">=<\/span><span class=\"s\">&quot;markdown&quot;<\/span> <span class=\"c1\"># DON&#39;T COPY this line, it exists just for highlighting purposes<\/span>\n\n<span class=\"nl\">Title:<\/span> <span class=\"nf\">My<\/span> <span class=\"no\">first<\/span> <span class=\"no\">post<\/span>\n<span class=\"nl\">Date:<\/span> <span class=\"err\">2017-11-26<\/span> <span class=\"err\">10:01<\/span>\n<span class=\"nl\">Modified:<\/span> <span class=\"err\">2017-11-27<\/span> <span class=\"err\">12:30<\/span>\n<span class=\"nl\">Category:<\/span> <span class=\"nf\">misc<\/span>\n<span class=\"nl\">Tags:<\/span> <span class=\"nf\">first<\/span><span class=\"p\">,<\/span> <span class=\"no\">misc<\/span>\n<span class=\"nl\">Slug:<\/span> <span class=\"nf\">My-first-post<\/span>\n<span class=\"nl\">Authors:<\/span> <span class=\"nf\">Your<\/span> <span class=\"no\">name<\/span>\n<span class=\"nl\">Summary:<\/span> <span class=\"nf\">What<\/span> <span class=\"no\">does<\/span> <span class=\"no\">your<\/span> <span class=\"no\">post<\/span> <span class=\"no\">talk<\/span> <span class=\"no\">about<\/span><span class=\"err\">?<\/span> <span class=\"no\">Write<\/span> <span class=\"no\">here.<\/span>\n\n<span class=\"nf\">This<\/span> <span class=\"no\">is<\/span> <span class=\"no\">the<\/span> <span class=\"p\">*<\/span><span class=\"no\">first<\/span> <span class=\"no\">post<\/span><span class=\"p\">*<\/span> <span class=\"no\">from<\/span> <span class=\"no\">my<\/span> <span class=\"no\">Pelican<\/span> <span class=\"no\">blog.<\/span> <span class=\"p\">**<\/span><span class=\"no\">YAY<\/span><span class=\"p\">!**<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Let's see how it looks?<\/p>\n<p>Go to the terminal, generate the static files and start the server. To do that, use the following command:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">(venv)$ make html &amp;&amp; make serve<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>While this command is running, you should be able to visit it on your favorite web browser by typing localhost:8000 on the address bar.<\/p>\n<p><img alt=\"Screenshot of the blog home. It has a header with the title Renata\\'s blog, the first post on the left, info about the post on the right, links and social on the bottom.\" src=\"https:\/\/rsip22.github.io\/blog\/img\/blog_screenshot.png\"><\/p>\n<p>Pretty neat, right?<\/p>\n<p>Now, what if you want to put an image in a post, how do you do that? Well, first you create a directory <em>inside<\/em> your content directory, where your posts are. Let's call this directory 'images' for easy reference. Now, you have to tell Pelican to use it. Find the <em>pelicanconf.py<\/em>, the file where you configure the system, and add a variable that contains the directory with your images:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"na\">.lang<\/span><span class=\"err\">=<\/span><span class=\"s\">&quot;python&quot;<\/span> <span class=\"c1\"># DON&#39;T COPY this line, it exists just for highlighting purposes<\/span>\n\n<span class=\"nf\">STATIC_PATHS<\/span> <span class=\"err\">=<\/span> <span class=\"p\">[<\/span><span class=\"err\">&#39;<\/span><span class=\"no\">images<\/span><span class=\"err\">&#39;<\/span><span class=\"p\">]<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Save it. Go to your post and add the image this way:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"na\">.lang<\/span><span class=\"err\">=<\/span><span class=\"s\">&quot;markdown&quot;<\/span> <span class=\"c1\"># DON&#39;T COPY this line, it exists just for highlighting purposes<\/span>\n\n<span class=\"err\">![<\/span><span class=\"nf\">Write<\/span> <span class=\"no\">here<\/span> <span class=\"no\">a<\/span> <span class=\"no\">good<\/span> <span class=\"no\">description<\/span> <span class=\"no\">for<\/span> <span class=\"no\">people<\/span> <span class=\"no\">who<\/span> <span class=\"no\">can<\/span><span class=\"err\">&#39;<\/span><span class=\"no\">t<\/span> <span class=\"no\">see<\/span> <span class=\"no\">the<\/span> <span class=\"no\">image<\/span><span class=\"p\">](<\/span><span class=\"err\">{<\/span><span class=\"no\">static<\/span><span class=\"err\">}\/<\/span><span class=\"no\">images<\/span><span class=\"err\">\/<\/span><span class=\"no\">IMAGE_NAME.jpg<\/span><span class=\"p\">)<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>You can interrupt the server at anytime pressing CTRL+C on the terminal. But you should start it again and check if the image is correct. Can you remember how?<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"err\">(venv)$ make html &amp;&amp; make serve<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>One last step before your coding is \"done\": you should make sure anyone can read your posts using ATOM or RSS feeds. Find the <em>pelicanconf.py<\/em>, the file where you configure the system, and edit the part about feed generation:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code><span class=\"na\">.lang<\/span><span class=\"err\">=<\/span><span class=\"s\">&quot;python&quot;<\/span> <span class=\"c1\"># DON&#39;T COPY this line, it exists just for highlighting purposes<\/span>\n\n<span class=\"nf\">FEED_ALL_ATOM<\/span> <span class=\"err\">=<\/span> <span class=\"err\">&#39;<\/span><span class=\"no\">feeds<\/span><span class=\"err\">\/<\/span><span class=\"no\">all.atom.xml<\/span><span class=\"err\">&#39;<\/span>\n<span class=\"nf\">FEED_ALL_RSS<\/span> <span class=\"err\">=<\/span> <span class=\"err\">&#39;<\/span><span class=\"no\">feeds<\/span><span class=\"err\">\/<\/span><span class=\"no\">all.rss.xml<\/span><span class=\"err\">&#39;<\/span>\n<span class=\"nf\">AUTHOR_FEED_RSS<\/span> <span class=\"err\">=<\/span> <span class=\"err\">&#39;<\/span><span class=\"no\">feeds<\/span><span class=\"err\">\/<\/span><span class=\"nv\">%s.rss.xml<\/span><span class=\"err\">&#39;<\/span>\n<span class=\"nf\">RSS_FEED_SUMMARY_ONLY<\/span> <span class=\"err\">=<\/span> <span class=\"no\">False<\/span>\n<\/code><\/pre><\/div>\n\n\n<p>Save everything so you can send the code to Github. You can do that by adding all files, committing it with a message ('first commit') and using git push. You will be asked for your Github login and password.<\/p>\n<div class=\"highlight\"><pre><span><\/span><code>$ git add -A <span class=\"o\">&amp;&amp;<\/span> git commit -a -m <span class=\"s1\">&#39;first commit&#39;<\/span> <span class=\"o\">&amp;&amp;<\/span> git push --all\n<\/code><\/pre><\/div>\n\n\n<p>And... remember how at the very beginning I said you would be preserving the master branch for the output of the static files generated by Pelican? Now it's time for you to generate them:<\/p>\n<div class=\"highlight\"><pre><span><\/span><code>$ make github\n<\/code><\/pre><\/div>\n\n\n<p>You will be asked for your Github login and password again. And... <em>voil\u00e0<\/em>! Your new blog should be live on https:\/\/YOUR_USERNAME.github.io.<\/p>\n<p>If you had an error in any step of the way, please reread this tutorial, try and see if you can detect in which part the problem happened, because that is the first step to debbugging. Sometimes, even something simple like a typo or, with Python, a wrong indentation, can give us trouble. Shout out and ask for help online or on your community.<\/p>\n<p>For tips on how to write your posts using Markdown, you should read the <a href=\"https:\/\/daringfireball.net\/projects\/markdown\/syntax\">Daring Fireball Markdown guide<\/a>.<\/p>\n<p>To get other themes, I recommend you visit <a href=\"http:\/\/www.pelicanthemes.com\/\">Pelican Themes<\/a>.<\/p>\n<p>This post was adapted from <a href=\"https:\/\/a-slide.github.io\/blog\/github-pelican\">Adrien Leger's Create a github hosted Pelican blog with a Bootstrap3 theme<\/a>. I hope it was somewhat useful for you.<\/p>","pubDate":"Tue, 05 Dec 2017 20:30:00 -0200","guid":"tag:rsip22.github.io,2017-12-05:\/blog\/create-a-blog-with-pelican-and-github-pages.html","category":["blog","development","outreachy","python","pelican","markdown","github","free software","FLOSS"]},{"title":"Chosing a system for the blog","link":"https:\/\/rsip22.github.io\/blog\/chosing-a-system-for-the-blog.html","description":"<p>This blog was created because I am supposed to report my journey through the <a href=\"https:\/\/outreachy.org\">Outreachy internship<\/a>.<\/p>\n<p>Let me start by saying that I'm biased towards systems that use flat files for blogs instead of the ones that require a database. It is so much easier to make the posts available through other means (such as having them backed up in a Git repository) that assure their content will live on even if the site is taken down or dies. It is also so much better to download the content this way, instead of pulling down a huge database file, which may cost a significant amount of money to transfer that amount of data. Having flat files with your content with a format that is shared among many systems (such as Markdown) might also assure a smooth transition to a new system, should the change become a necessity at some point.<\/p>\n<!-- more -->\n\n<p>I have experimented some options while working on projects. I played with <a href=\"https:\/\/getlektor.com\">Lektor<\/a> while contributing to <a href=\"https:\/\/pybee.org\/\">PyBeeWare<\/a>. I liked Lektor, but I found it's documentation severely lacking. I worked with <a href=\"https:\/\/getgrav.org\/\">Grav<\/a> while we were working towards getting <a href=\"https:\/\/github.com\/temblog\">tem.blog.br<\/a> back online. Grav is a good CMS and it is definitely an alternative to Wordpress, but, well, it needs a server to host it.<\/p>\n<p>At first, I thought about using <a href=\"https:\/\/jekyllrb.com\/\">Jekyll<\/a>. It is a good site generator and it even has a <a href=\"https:\/\/www.codecademy.com\/learn\/deploy-a-website\">Code Academy<\/a> course on how to create a website and deploy it to Github Pages that I took a while ago. I could have chosen it to develop this blog, <em>but<\/em> it is written in Ruby. Which is fine, of course. The first steps I took into learning how to program were in Ruby, using <a href=\"https:\/\/pine.fm\/LearnToProgram\/\">Chris Pine's Learn to Program<\/a> | <a href=\"https:\/\/www.jmonteiro.com\/aprendaaprogramar\/\">vers\u00e3o pt-br<\/a>. So, what is my objection with Ruby? It so happens that I expect most of the development for the Outreachy project will be done using Python (and maybe some Javascript) and I thought that adding a third language might make my life a bit harder.<\/p>\n<p>That is how I ended up with <a href=\"https:\/\/blog.getpelican.com\/\">Pelican<\/a>. I had played a bit with it while contributing to the <a href=\"https:\/\/brasil.pyladies.com\/\">PyLadies Brazil website<\/a>. During Python Sul, the regional Python conference we had last September, we also had a sprint to make the <a href=\"https:\/\/pyladiescaxias.github.io\/\">PyLadies Caxias do Sul website<\/a> using Pelican and hosting it with Github Pages. It went smoothly. Look how awesome it turned out:<\/p>\n<p><img alt=\"Image of the PyLadies Caxias do Sul website, white background and purple text\" src=\"https:\/\/rsip22.github.io\/blog\/img\/pyladies_caxias_website.png\"><\/p>\n<p>So, how to do one of those? Hang on tight, that I will explain it in detail on my next post! ;)<\/p>","pubDate":"Sun, 26 Nov 2017 10:00:00 -0200","guid":"tag:rsip22.github.io,2017-11-26:\/blog\/chosing-a-system-for-the-blog.html","category":["blog","development","outreachy","python","pelican"]},{"title":"Hello, world!","link":"https:\/\/rsip22.github.io\/blog\/hello-world.html","description":"<p><img alt=\"Renata's picture, a white woman profile. She touches her chin with her left hand fingertips\" src=\"https:\/\/rsip22.github.io\/blog\/img\/author.png\"><\/p>\n<h2>About me<\/h2>\n<p>Hello, world! For those who are meeting me for the first time, I am a 31 year old History teacher from Porto Alegre, Brazil.<\/p>\n<p>Some people might know me from the Python community, because I have been leading <a href=\"https:\/\/pyladiespoa.pythonanywhere.com\">PyLadies Porto Alegre<\/a> and helping organize <a href=\"https:\/\/blog.djangogirls.org\/post\/166221911403\/django-girls-rio-grande-do-sul\">Django Girls workshops<\/a> in my state since 2016. If you don't, that's okay. Either way, it's nice to have you here.<\/p>\n<p>Ever since I learned about <a href=\"https:\/\/railsgirlssummerofcode.org\/\">Rails Girls Summer of Code<\/a>, during the <a href=\"http:\/\/softwarelivre.org\/fisl18\">International Free Software Forum - FISL 16<\/a>, I have been wanting to get into a tech internship program. <a href=\"https:\/\/developers.google.com\/open-source\/gsoc\/\">Google Summer of Code<\/a> made into my radar as well, but I didn't really feel like I knew enough to try and get into those programs... until I found <a href=\"https:\/\/outreachy.org\">Outreachy<\/a>. From their site:<\/p>\n<blockquote>\n<p>Outreachy is an organization that provides three-month internships for people from groups traditionally underrepresented in tech. Interns work remotely with mentors from Free and Open Source Software (FOSS) communities on projects ranging from programming, user experience, documentation, illustration and graphical design, to data science.<\/p>\n<\/blockquote>\n<p>There were many good projects to choose from on this round, a lot of them with few requirements - and most with requirements that I believed I could fullfill, such as some knowledge of HTML, CSS, Python or Django.<\/p>\n<p>I ought to say that I am not an expert in any of those. And, since you're reading this, I'm going to be completely honest. Coding is hard. Coding is hard to learn, it takes a lot of studying and a lot of practice. Even though I have been messing around computers pretty much since I was a kid, because I was a girl lucky enough to have a father who owned a computer store, I hadn't began learning how to program until mid-2015 - and I am still learning.<\/p>\n<p>I think I became such an autodidact because I had to (and, of course, because I was given the conditions to be, such as having spare time to study when I wasn't at school). I had to get any and all information from my surroundings and turn into knowledge that I could use to achieve my goals. In a time when I could only get new computer games through a CD-ROM and the computer I was allowed to use didn't have a CD-ROM drive, I had to try and learn how to open a computer cabinet and connect\/disconnect hardware properly, so I could use my brother's CD-ROM drive on the computer I was allowed to and install the games without anyone noticing. When, back in 1998, I couldn't connect to the internet because the computer I was allowed to use didn't have a modem, I had to learn about networks to figure out how to do it from my brother's computer on the LAN (local network).<\/p>\n<p>I would go to the community public library and read books and any tech magazines I could get my hands into (libraries didn't usually have computers to be used by the public back then). It was about 2002 when I learned how to create HTML sites by studying at the source code from pages I had saved to read offline in one of the very, very few times I was allowed to access the internet and browse the web. Of course, the site I created back then never saw the light of the day, because I didn't have really have internet access at home.<\/p>\n<p>So, how come it is that only now, 14 years later, I am trying to get into tech?<\/p>\n<p>Because when I finished high school in 2003, I was still a minor and my family didn't allow me to go to Vocational School and take an IT course. (Never mind that my own oldest brother had graduated in IT and working with for almost a decade.)<\/p>\n<p>I ended up going to study... teacher training in History as an undergrad course.<\/p>\n<p>A lot has happened since then. I took the exam to become a public school teacher and more than two years had passed without being called to work. I spent 3 years in odd-jobs that paid barely enough to pay rent (and, sometimes, not even that).<\/p>\n<p>Since the IT is the new thing and all jobs are in IT, finally, <em>finally<\/em> it seemed okay for me to take that Vocational School training in a public school - and so I did.<\/p>\n<p>I gotta say, I thought that while I studied, I would be able to get some sort of job or internship to help with my learning. After all, I had seen it easily happening with people I met before getting into the course. And by \"people\", of course, I mean white men. For me, it took a whole year of searching, trying and interviewing for me to get an internship related to the field - tech support in a school computer lab, running GNU\/Linux. And, in that very same week, I was hired as a public school teacher.<\/p>\n<p>There is a lot more... actually, there is so much more to this story, but I think I have told enough for now. Enough to know where I came from and who I am, as of now. I hope you stick around. I am bound to write here every two weeks, so I guess I will see you then! o\/<\/p>","pubDate":"Fri, 17 Nov 2017 00:49:00 -0200","guid":"tag:rsip22.github.io,2017-11-17:\/blog\/hello-world.html","category":["blog","personal","outreachy"]}]}}