-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfeed.xml
126 lines (126 loc) · 26.2 KB
/
feed.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?xml version='1.0' encoding='UTF-8'?>
<rss version='2.0' xmlns:atom='http://www.w3.org/2005/Atom'>
<channel>
<atom:link href='http://clojureto.github.io' rel='self' type='application/rss+xml'/>
<title>
ClojureTO
</title>
<link>
http://clojureto.github.io
</link>
<description>
Website of the Clojure Community Living or Working in Toronto, Ontario, Canada.
</description>
<lastBuildDate>
Wed, 05 Jun 2019 13:34:31 +0000
</lastBuildDate>
<generator>
clj-rss
</generator>
<item>
<guid>
http://clojureto.github.io/posts/2019-05-13-clojure-books-library
</guid>
<link>
http://clojureto.github.io/posts/2019-05-13-clojure-books-library
</link>
<title>
Clojure Books in the Toronto Public Library
</title>
<description>
<p>5 years ago I failed to write a book. I wrote it until chapter 3 but I couldn't stand all the criticism coming from the editor and the reviewers. As the deadline to deliver chapter 4 was approaching, I was still overwhelmed by all the work to catch up with their feedback. So, I quit, but I learned something very important from that experience: the scrutiny over the writing of books makes them very good references.</p><p>It's true that the time required to write and publish a book is incompatible with the rapid pace Information Technology evolves, making it quickly obsolete. However, Clojure is well known for its long term stability and backward compatibility. Clojure books have a very slow obsolescence and they are worth buying.</p><p>Most Clojure programmers I know, including myself, love to own Clojure books, but beginners may find interesting to have access to some books for free, before starting a new <a href='https://clojure.org/community/books'>book collection</a>. The <a href='https://www.torontopubliclibrary.ca'>Toronto Public Library</a> is there to help.</p><p><img src="/img/toronto-reference-library.jpg" alt="(By Raysonho @ Open Grid Scheduler / Grid Engine - Own work, CC0, https://commons.wikimedia.org/w/index.php?curid=12312088)" /></p><p>I don't know about other public libraries out there, but the Toronto Public Library is a model to follow. There is a central reference library where books are for your-eyes-only and dozen other <a href='https://www.torontopubliclibrary.ca/branches/'>branches</a> all over the city, each one adapted to the needs of the neighborhood. They offer not only books, but also e-books, audio-books, magazines, seminars, courses, all sort of multimedia material, image/video editing and 3D printing. When you subscribe, you gain access to all these services, most of them for free, with a <a href='https://www.torontopubliclibrary.ca/using-the-library/your-library-card/'>library card</a> that you can also use online to borrow books delivered to a branch near you.</p><p><img src="/img/toronto-library-joy-clojure.jpg" alt="Spotting The Joy of Clojure" /></p><p>This is a list of Clojure books you can borrow and keep for 21 days and renew them two times for the same length of time, making a total of 63 days!</p><ul><li>2018<ul><li><a href='https://www.torontopubliclibrary.ca/detail.jsp?Entt=RDM3729085&R=3729085'>Getting Clojure</a> by Russ Olsen</li><li><a href='https://www.torontopubliclibrary.ca/detail.jsp?Entt=RDM3697897&R=3697897'>Programming Clojure</a> by Alex Miller</li></ul></li><li>2016<ul><li><a href='https://www.torontopubliclibrary.ca/detail.jsp?Entt=RDM3412086&R=3412086'>Professional Clojure</a> by Jeremy Anderson</li><li><a href='https://www.torontopubliclibrary.ca/detail.jsp?Entt=RDM3395355&R=3395355'>Clojure in Action</a> by Amit Rathore</li></ul></li><li>2015<ul><li><a href='https://www.torontopubliclibrary.ca/detail.jsp?Entt=RDM3347529&R=3347529'>Living Clojure</a> by Carin Meier</li></ul></li><li>2014<ul><li><a href='https://www.torontopubliclibrary.ca/detail.jsp?Entt=RDM3182884&R=3182884'>The Joy of Clojure</a> by Michael Fogus</li></ul></li></ul><p>It is also possible to put your hands on books about other LISP languages:</p><ul><li><a href='https://www.torontopubliclibrary.ca/detail.jsp?Entt=RDM3084230&R=3084230'>Practical COMMON LISP</a> by Peter Seibel</li><li><a href='https://www.torontopubliclibrary.ca/detail.jsp?Entt=RDM2656949&R=2656949'>The Scheme Programming Language</a> by R. Kent Dybvig</li></ul><p><img src="/img/toronto-library-common-lisp.jpg" alt="Spotting Practical COMMON LISP" /></p><p>Even when some books aren't physically available, they can be accessed online thanks to a partnership with Safari Books Online. I would highlight:</p><ul><li><a href='https://www.torontopubliclibrary.ca/detail.jsp?Entt=RDM3475911&R=3475911'>Web Development with Clojure</a> by Dmitri Sotnikov, a co-organizer of the ClojureTO Community.</li><li><a href='https://www.torontopubliclibrary.ca/detail.jsp?Entt=RDM3364211&R=3364211'>Clojure for the Brave and True</a> by Daniel Higginbothan</li></ul><p>Clojure is probably the most popular programming language among the functional ones. It is good to see that it is also accessible to everyone living in Toronto. When you borrow one of these books to learn it you're going to fill a spark that will change the way you think about programming forever. It will be the beginning of your own Clojure book collection.</p>
</description>
<author>
Hildeberto Mendonca
</author>
<pubDate>
Mon, 13 May 2019 00:00:00 +0000
</pubDate>
</item>
<item>
<guid>
http://clojureto.github.io/posts/2019-03-12-clojure-north
</guid>
<link>
http://clojureto.github.io/posts/2019-03-12-clojure-north
</link>
<title>
Clojure/north - April 19-20th, 2019 Toronto
</title>
<description>
<p>Sometimes I ask myself if I will ever attend a Clojure conference again after they launched <a href='https://www.youtube.com/user/ClojureTV'>ClojureTV</a> on YouTube. They publish every Clojure talk that happens out there. Why would I expected more than that?</p><p>My way of thinking was challenged when I met <strong>Nikola Peric</strong>, the VP of IT at a company called <a href='http://synqrinus.com'>Synqrinus</a>. We talked about a conference he is organizing in Toronto for the Clojure community. Nikola is clearly an entrepreneur because when I asked him to tell me about himself he described his company instead - "... we are pushing the boundaries in the market research space with our technology and tools. There, I focus on architecting and leading the development of our secret weapons that give us a competitive advantage in the industry".</p><p><img src="/img/clojure-north-interview.jpg" alt="Interviewing Nikola Peric" /></p><p>This Clojure conference he is talking about is called <a href='https://clojurenorth.com'>Clojure/north</a>. "We liked Clojure/north's play on Clojure/west. After all, we are north of the States", he noted. The idea is to have a non-profit conference that is accessible and low-cost, organized by volunteers, with a ticket price of just C$180, counting on the extra help of sponsors. Disclosing that price and their engagement was when he got my interest. After all, a lot of tech conferences go for a minimum of C$500!</p><p>Nikola is not doing all this alone. The core team consists of <strong>Dmitri Sotnikov</strong>, <strong>Carmen La</strong>, <strong>Raey Ang</strong>, and <strong>Lubov Soltan</strong>. "Dmitri is reaching out many of our speakers and drumming up interest in the event. Carmen slapped together the entire website in no time at all and helps out with general organization. Raey is the AV producer for the event, bringing in expertise from the film industry to keep it all professional. Lubov designed the minimalist logo, and has helped with other design aspects such as our gorgeous sponsor package", he detailed and then completed - "I tend to do a lot of the administrative tasks such as managing the Twitter account, venue registration, emails, etc. Dmitri, Carmen, and myself talk through the strategy, and programming for the event. We have a fantastic team!". I could see in his eyes how important those people are for him. Another level of friendship was born. I was gradually getting the point of going to a conference.</p><p><img src="/img/clojure-north-interview-2.jpg" alt="Interviewing Nikola Peric" /></p><p>As my interest was growing, I was curious about the talks and what sense I could make of them. "We asked this question to ourselves: 'how do we demonstrate where Clojure is having a huge impact in the real world?' and we expect to get people telling us their stories about Clojure helping them grow, the benefits it reaped, along with the struggles and challenges that came with it. In doing so, we hope that we can encourage broader adoption of the language.", he said. This is deep. He was basically saying that if you put people with the same passion, experiences, and struggles in the same space they will make such strong connections that it will transcend technology. And here lies the difference between ClojureTV and a conference: the former only offers technology and the conference offers the human side of it, which is infinitely valuable. "The best part, by far, is connecting all these people in one place. I'm thrilled to meet all these big names, and see some fantastic talks so it's kind of a win-win - get to have all of it happen in my back yard, and also allow others to partake in the same experience!", he concluded.</p><p>I'm not saying that Clojure/north won't be available online afterwards. It will. "We'll also be professional recording the talks so hopefully those who are unable to attend will see the talks in a few weeks after the event", he confirmed and then got surprised by my sudden laugh - as if he was a comedian who connected his final joke with the one he told at the beginning.</p><p><center><a href="https://clojurenorth.com" target="blank"><img src="/img/clojure-north-logo.png" alt="Clojure/north Logo" /></a></center></p><h3 id="heads-up">Heads-up</h3><ol><li>Registrations are open. <a href='https://ti.to/clojure-north/clojure-north-2019'>Register now</a> and meet me there! I won't appear in the recordings.</li><li>Three big open source launches from our speakers will coincide with the event so that will be a big impact!</li><li>If anyone is interested in volunteering their time at the event do feel free to reach out at [email protected], we do need a few volunteers.</li><li>If anyone works at a Clojure company we'd appreciate any additional sponsorship to help finance the event. Get the <a href='https://clojurenorth.com/clojure-north-2019-sponsorship-package.pdf'>full sponsor prospectus</a> for more information.</li></ol>
</description>
<author>
Hildeberto Mendonca
</author>
<pubDate>
Tue, 12 Mar 2019 00:00:00 +0000
</pubDate>
</item>
<item>
<guid>
http://clojureto.github.io/posts/2019-03-05-website-contributing
</guid>
<link>
http://clojureto.github.io/posts/2019-03-05-website-contributing
</link>
<title>
How to Contribute to ClojureTO Website
</title>
<description>
<p>The wind is blowing at 85km/h outside, followed by rain and snow with low visibility. I couldn't find anything more interesting to do other than contributing to ClojureTO website. The goal today is to write a recursive article that explains how to contribute to this website by publishing itself.</p><h3 id="pre-requisites">Pre-requisites</h3><p>That's what I need to be able to contribute:</p><ol><li><strong>Git</strong>: as a technical person, I have the habit of versioning the work I do. Git is the tool I use for that. This is also the tool needed to manage and publish the website.</li><li><strong>GitHub</strong>: ClojureTO uses GitHub Pages as a hosting service. In short, when we push content to a repository it gets published on the website. To synchronize content with GitHub I need a GitHub account and Git.</li><li><strong>Leiningen</strong>: this is the portal to enter in the Clojure World. A Swiss knife to manage Clojure projects. I use it to tests the changes I make in the website. I was also used it to create the website in the first place.</li><li><strong>Cryogen</strong>: this tool, in combination with Leiningen, built this entire website. We explained how we did it in a <a href='/posts/2019-02-23-website-behind'>previews article</a>. Now, I need it to produce the content, define the layout, the style, and the navigation.</li><li><strong>Passion for Clojure</strong>: to write such long and rich content, a good deal of time and knowledge is required. My passion for Clojure motivates me to do it.</li><li><strong>Community Driven</strong>: a genuine intention to share knowledge and help others is also required.</li></ol><h3 id="forking&#95;the&#95;repository">Forking The Repository</h3><p>Not everybody is a good friend of a ClojureTO's co-organizer to claim push privileges. So, I need to start by forking <a href='https://github.com/ClojureTO/clojureto-website'>clojureto-website</a>. I click on the <strong>Fork</strong> button and get a new repository in my account. My contributions will remain there until it's time for a pull request.</p><p><img src="/img/fork-clojureto-website.png" alt="Forking clojureto-website repository" /></p><p>I clone the repository locally so I can start contributing:</p><pre><code>$ git clone https://github.com/htmfilho/clojureto-website.git</code></pre><h3 id="cryogen&#95;basics">Cryogen Basics</h3><p>Understanding Cryogen is discovering ways of contributing. Its <a href='http://cryogenweb.org'>website</a> covers all details. In summary, those with design skills could jump into <code>resources/templates/themes</code> and redefine how the content is presented, improve navigation, readability, harmonize colors, shapes. I personally have no talent there, so I care more about content, which is located at <code>resources/templates/md</code>. The one place that should not be touched at all is the folder <code>resources/public</code>. Those files are replaced whenever the files in the previously mentioned folders are modified and saved.</p><h3 id="writing&#95;the&#95;contribution">Writing the Contribution</h3><p>I wish I could write the content in Clojure, but that's not practical. So, I stick to <a href='https://daringfireball.net/projects/markdown/'>Markdown</a>, a format supported by Cryogen. Markdown eliminates the pain of writing content in HTML by offering a minimalist markup language for web authoring. All the content in Markdown, including this article, is located at <code>resources/templates/md</code>. I can write <strong>pages</strong>, which are more institutional, and <strong>posts</strong>, which represent facts, perspectives, experiences, and discoveries.</p><p>Apart from Markdown, there is a caveat. At the top of a page or post, there is a Clojure-like map where we define values expected by the theme. For a page, there is something like this:</p><pre><code>{:title &quot;About&quot;
:layout :page
:page-index 0
:navbar? true}</code></pre><p>I would emphasize <code>:page-index</code>, which defines the order the page appears in the navigation, and <code>:navbar?</code> to include the page in the top menu. For this post in particular, I used this:</p><pre><code>{:title &quot;How to Contribute to ClojureTO Website&quot;
:author &quot;Hildeberto Mendonca&quot;
:layout :post
:tags &#91;&quot;Cryogen&quot; &quot;Website&quot; &quot;Github&quot; &quot;Markdown&quot;&#93;
:toc true}</code></pre><p>A special attention to <code>:tags</code>, which helps to organize the content, and <code>:toc</code> to show a table of content to help navigating in a long post.</p><h3 id="previewing&#95;the&#95;content">Previewing the Content</h3><p>To preview the content exactly as it will appear on the website, I go to the root of the repository and run the following command:</p><pre><code>$ lein ring server</code></pre><p>After a few seconds, the default browser opens and shows the website. Since this article is the most recent one, it appears in the front page, as shown in the image below:</p><p><img src="/img/preview-content-website.png" alt="Forking clojureto-website repository" /></p><p>Every time I save the file that I'm working on, the website is regenerated and the last changes are ready to see.</p><h3 id="committing&#95;and&#95;pushing&#95;changes">Committing and Pushing Changes</h3><p>At this point in time, the article is finished and ready to submit. I commit all my changes, including text and images, and push to my own fork:</p><pre><code>$ git add resources/templates/md/posts/2019-03-05-website-contributing.md
$ git add resources/templates/img/fork-clojureto-website.png
$ git add resources/templates/img/preview-content-website.png
$ git commit -m &quot;Article 'How to Contribute to ClojureTO Website'&quot;
$ git push origin master</code></pre><p>Notice that I add each artifact one by one, instead of running a practical command like <code>git add .</code>. The reason is because I don't want to accidentally mess up with the submodule located at <code>resources/public</code>. More details latter on.</p><h3 id="creating&#95;a&#95;pull&#95;request">Creating a Pull Request</h3><p>The pull request happens on GitHub. Now that the changes are pushed, my fork is different from the original, and this difference is exactly the content of the pull request I'm creating. I click on the button "New pull request" and it shows me the differences.</p><p><img src="/img/pullrequest-content-website.png" alt="Pull request from my fork to clojureto-website repository" /></p><p>When I click the green button "Create pull request" I'm actually submitting my changes for review by one of the website's editors. My work is probably not done yet because they may ask me to fix some typos, rephrase some sentences and clarify others. I do extra changes and I just keep pushing to my master branch to have my pull request updated.</p><p>When the pull request is accepted and the merge is done, it doesn't mean the content is immediately published on the website. The editor has some work to do as well.</p><h3 id="updating&#95;the&#95;website&#95;with&#95;the&#95;contribution">Updating the Website with the Contribution</h3><p>The editor is the person responsible for accepting the pull request and publishing the contributions in the sequence. This person has special push privileges to the repositories <a href='https://github.com/ClojureTO/clojureto-website'>clojureto-website</a> and <a href='https://github.com/ClojureTO/clojureto.github.io'>clojureto-github.io</a>. The pull request is merged and now the editor needs to generate the static content. In the event she never did it before, she starts by cloning the clojureto-website repository:</p><pre><code>$ git clone https://github.com/ClojureTO/clojureto-website.git
$ cd clojureto-website</code></pre><p>The editor has all recent changes locally and needs to setup the submodule <code>clojureto.github.io</code> in the folder <code>resources/public</code>:</p><pre><code>$ git submodule init
$ git submodule update
$ git submodule foreach git pull origin master</code></pre><p>Now, the folder <code>resources/public</code> contains the most recent published content, but it needs to be updated with the most recent one. To do that, the editor needs to launch Cryogen once, so it can regenerate the static website in the folder <code>resource/public</code>:</p><pre><code>$ lein ring server</code></pre><p>To stop the server she presses <code>Ctrl+C</code> and then she notices the content of the folder <code>resource/public</code> has changed:</p><pre><code>$ cd resources/public
$ git status</code></pre><p>She needs to move to the master branch, commit all the changes and push to the repository <code>clojureto.github.io</code>:</p><pre><code>$ git checkout master
$ git add .
$ git commit -m &quot;Published article 'How to Contribute to ClojureTO Website'&quot;
$ git push origin master</code></pre><p>When the push is completed the latest contributions to the website are published! But the work is not done. There is still a final step, which is updating the submodule of the the repository <code>clojureto-website</code>:</p><pre><code>$ cd ../..
$ git add resources/public
$ git commit -m &quot;Updated submodule reference.&quot;
$ git push origin master</code></pre><p>That's enough with this website and Git. Starting next post, everything will be about the Community and Clojure!</p>
</description>
<author>
Hildeberto Mendonca
</author>
<pubDate>
Tue, 05 Mar 2019 00:00:00 +0000
</pubDate>
</item>
<item>
<guid>
http://clojureto.github.io/posts/2019-02-23-website-behind
</guid>
<link>
http://clojureto.github.io/posts/2019-02-23-website-behind
</link>
<title>
What is Behind clojureto.github.io
</title>
<description>
<p>Building a static website never felt so dynamic nowadays. With a basic technical background we can build a low cost website with minimal infra-structure in no time. Tools like <a href='https://jekyllrb.com'>Jekyll</a> and <a href='https://jbake.org'>JBake</a> are popular choices, but the Clojure community count on its own solution: <a href='http://cryogenweb.org'>Cryogen</a>.</p><p>Cryogen is a static site generator developed in Clojure by <a href='https://carmen.la'>Carmen La</a>, a member of the ClojureTO community. It allows us to produce content in <a href='https://daringfireball.net/projects/markdown/'>Markdown</a>, manage content data in Clojure, and make everything beautiful with templates in HTML. It is simple to use and has everything we need. So, here you are reading this content generated by Cryogen.</p><p>This website is hosted on <a href='https://pages.github.com'>GitHub Pages</a>, which offers free hosting for static content, but Jekyll is the only static site generator natively integrated with GitHub. It means we push content and GitHub takes care of the static content generation. This magic doesn't happen with Cryogen. GitHub offers some configuration alternatives, like recognizing a <code>/doc</code> folder as the root of the static content, but it isn't true for organizations or projects (organization|project.github.io), where the static content must be in the root of the repository. Until they fix this inconsistency, we had to come up with another solution.</p><p>To persist on the idea of using Cryogen, we needed to rearrange the pieces of the game. It consisted of using 2 Git repositories, one for the Cryogen project (<a href='https://github.com/ClojureTO/clojureto-website'>clojureto-website</a>) and another one for the generated static pages (<a href='https://github.com/ClojureTO/clojureto.github.io'>clojureto.github.io</a>). The last one is a Git sub-module of the first, replacing the folder <code>resources/public</code> where the static content is generated.</p><p><img src="/img/clojureto-website-submodule.png" alt="Two website repositories" /></p><p><a href='https://git-scm.com/book/en/v2/Git-Tools-Submodules'>Submodule</a> is a Git capability that enables a Git repository be a sub-directory of another one while keeping commits separated. In our context, it basically means that pushing commits to <code>clojureto-website</code> doesn't update the website, but pushing changes generated by Cryogen in the folder <code>resources/public</code> to <code>clojureto.github.io</code> does update the website.</p><p>To create the submodule, we first had to delete the folder <code>resources\public</code> and then execute the following commands:</p><pre><code>$ git submodule add https://github.com/ClojureTO/clojureto.github.io.git resources/public
$ git submodule init
$ git add .gitmodules
$ git add resources/public
$ git commit -m &quot;Added the website repo as a submodule&quot;</code></pre><p>In an upcoming post we will explain how to contribute with content to this website without getting lost in the concept of submodule.</p>
</description>
<author>
Hildeberto Mendonca
</author>
<pubDate>
Sat, 23 Feb 2019 00:00:00 +0000
</pubDate>
</item>
</channel>
</rss>