<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<link href="https://code-maven.com/atom" rel="self" />
<title>Code Maven</title>
<id>https://code-maven.com</id>
<updated>2025-11-12T08:30:01</updated>

  <entry>
    <title>Curl examples</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2025-11-12T08:30:01Z</updated>
    <pubDate>2025-11-12T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/curl" />
    <id>https://code-maven.com/curl</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Run httpbin locally</h2>
<p>Start as:</p>
<pre><code>docker run --rm -p 80:80 --name httpbin kennethreitz/httpbin
</code></pre>
<p>Then run the curl commands</p>
<pre><code>curl
</code></pre>
<p>To stop the Docker container open another terminal and execute</p>
<pre><code>docker container stop -t0 httpbin
</code></pre>
<h2 class="title is-4">301 MOVED PERMANENTLY</h2>
<pre><code>$ curl -i http://localhost/status/301
HTTP/1.1 301 MOVED PERMANENTLY
Server: gunicorn/19.9.0
Date: Fri, 26 Sep 2025 10:32:08 GMT
Connection: keep-alive
location: /redirect/1
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 0
</code></pre>
<h2 class="title is-4">303 SEE OTHER (redirect)</h2>
<pre><code>$ curl -i http://localhost/status/303
HTTP/1.1 303 SEE OTHER
Server: gunicorn/19.9.0
Date: Fri, 26 Sep 2025 10:06:22 GMT
Connection: keep-alive
location: /redirect/1
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 0
</code></pre>
<h2 class="title is-4">404 NOT FOUND</h2>
<pre><code>$ curl -i http://localhost/status/404
HTTP/1.1 404 NOT FOUND
Server: gunicorn/19.9.0
Date: Fri, 26 Sep 2025 10:08:19 GMT
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Content-Length: 0
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>VirtualBox</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2025-11-09T08:30:01Z</updated>
    <pubDate>2025-11-09T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/virtualbox" />
    <id>https://code-maven.com/virtualbox</id>
    <content type="html"><![CDATA[<p>VirtualBox did not allow the Windows Machine to run:</p>
<p>I asked Chat GPT:</p>
<p>I have a Linux machine running ubuntu 2025.04. On it I have VirtualBox installed. I used to be able to run an MS Windows guest in it but not any more. It gives me the following error AMD-V is being used by another hypervisor (VERR_SVM_IN_USE). VirtualBox can't enable the AMD-V extension. Please disable the KVM kernel extension, recompile your kernel and reboot (VERR_SVM_IN_USE How can I fix this?</p>
<pre><code>sudo systemctl stop libvirtd     # this gave an error
sudo modprobe -r kvm_amd kvm     # this helped me
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Setting environment variables on the command line on Windows, Linux, macOS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2025-04-26T07:30:01Z</updated>
    <pubDate>2025-04-26T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/setting-environment-variables" />
    <id>https://code-maven.com/setting-environment-variables</id>
    <content type="html"><![CDATA[<p>Setting an environment variable on Linux and macOS can be done before we run some program.</p>
<pre><code>$ python -c 'import os; print(os.getenv(&quot;NAME&quot;))'
None

$ NAME=Foo python -c 'import os; print(os.getenv(&quot;NAME&quot;))'
Foo
</code></pre>
<p>On Windows we need to do it separately:</p>
<p>In CMD:</p>
<pre><code>&gt; set NAME=Foo
&gt; python -c &quot;import os; print(os.getenv('NAME'))&quot;
Foo
</code></pre>
<p>In PowerShell</p>
<pre><code>&gt; [Environment]::SetEnvironmentVariable(&quot;NAME&quot;, &quot;Foo&quot;, &quot;Process&quot;)
&gt; python -c &quot;import os; print(os.getenv('NAME'))&quot;
Foo
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Vanilla Boot - Developing reusable UI components with Vanilla JavaScript with Eyal Lior</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2025-03-13T07:30:01Z</updated>
    <pubDate>2025-03-13T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/vanilla-boot" />
    <id>https://code-maven.com/vanilla-boot</id>
    <content type="html"><![CDATA[<ul>
<li><a href="https://www.linkedin.com/in/eyallior/">Eyal Lior on LinkedIn</a></li>
<li><a href="https://vanillaboot.js.org/">VanillaBoot</a></li>
</ul>
<p>We'll analyze the limitations of popular JavaScript frameworks, the advantages of using Vanilla JavaScript, and how Vanilla Boot offers a minimalist approach to building reusable UI components. The session will cover core concepts like direct DOM manipulation, component-based architecture, dynamic dependency loading, and full rendering control, followed by a walkthrough of Vanilla Boot’s source code and practical usage examples.</p>
<p>Eyal Lior is a Tel Aviv-based software developer with over 25 years of experience, specializing in complex GUIs built with vanilla JavaScript.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/f7ereSIItBo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<img src="/img/eyal-lior.jpeg" alt="Eyal Lior" />
<h2 class="title is-4">Transcript</h2>
<p>1
00:00:02.130 --&gt; 00:00:15.429
Gabor Szabo: Hello, and welcome to the code. Me. Event Channel and the Codema Meetup Group. My name is Gabor Sabo. I personally usually teach rust and python to companies and help companies to start using these languages.</p>
<p>2
00:00:15.770 --&gt; 00:00:23.080
Gabor Szabo: And I have this meeting group, a Meetup group where I usually organize presentations about rust and python.</p>
<p>3
00:00:23.310 --&gt; 00:00:26.109
Gabor Szabo: But this time it's going to be about Javascript.</p>
<p>4
00:00:26.340 --&gt; 00:00:35.859
Gabor Szabo: And so I'm really happy that all agreed to give this presentation, and all the people who joined us in this meeting</p>
<p>5
00:00:36.010 --&gt; 00:00:58.679
Gabor Szabo: feel free to ask questions. Just remember that we are putting it on Youtube. So we can ask in chat if you don't want to be on Youtube. And if you are watching this video on Youtube, then please, like the video and follow the channel and join us in our meeting group. So in our meet up groups, so you'll be able to join in one of our upcoming meetings.</p>
<p>6
00:00:58.960 --&gt; 00:01:00.160
Gabor Szabo: Is that sad?</p>
<p>7
00:01:00.520 --&gt; 00:01:06.620
Gabor Szabo: Yeah, it's your turn to introduce yourself and take over the screen.</p>
<p>8
00:01:06.990 --&gt; 00:01:22.379
Eyal Lior: Okay, so Hi, everybody, my name is real. I am a full stack developer with 25 years of experience lots of experience in doing Web Gui. That's actually where I come from. That's why I have passion for Javascript.</p>
<p>9
00:01:22.510 --&gt; 00:01:41.849
Eyal Lior: I started as a as a web developer web designer building websites when I was a teenager in the late nineties, and that's how I got into the field. So I always loved Javascript, and I loved the flexibility of it, the the reformers of it</p>
<p>10
00:01:42.510 --&gt; 00:01:50.180
Eyal Lior: and and I'll start with a little bit introduction. So you'll see why I developed vanilla boot</p>
<p>11
00:01:51.066 --&gt; 00:01:55.280
Eyal Lior: when when everybody started moving into Javascript frameworks.</p>
<p>12
00:01:55.590 --&gt; 00:01:59.406
Eyal Lior: I was a little bit suspicious about it, because,</p>
<p>13
00:02:00.070 --&gt; 00:02:10.080
Eyal Lior: I like vanilla Javascript. I'm not. I'm I don't like to be constrained, limited, and they felt that this is what the frameworks bring.</p>
<p>14
00:02:10.560 --&gt; 00:02:18.800
Eyal Lior: I had a few years experience working with angular in its earliest versions. Version one and version 2.</p>
<p>15
00:02:19.510 --&gt; 00:02:35.335
Eyal Lior: And so so anybody that has experience with Angle. I was going to be like, of course you didn't like it. It was version one and 2. It was horrible. But now we're in version. I don't know 18 or something, so it's completely different. And</p>
<p>16
00:02:36.090 --&gt; 00:02:44.629
Eyal Lior: and 5 years ago I had, my 1st experience developing a mobile application with the react react. Yes.</p>
<p>17
00:02:44.850 --&gt; 00:02:56.430
Eyal Lior: And since then I developed 3 more applications with React Js. And I reached a point that I'm I cannot handle it anymore and said, I'm not going to develop with react anymore. And I</p>
<p>18
00:02:56.550 --&gt; 00:02:59.770
Eyal Lior: switched a few projects back to vanilla Javascript.</p>
<p>19
00:03:01.030 --&gt; 00:03:16.759
Eyal Lior: Mind that some of my criticism of react is not relevant anymore because it did improve over time. But I'm going to present a project today that's going to enable you to keep using vanilla Javascript to develop</p>
<p>20
00:03:17.372 --&gt; 00:03:31.140
Eyal Lior: applications with components with components just like you would. If you would use react or Anglo, but without the limitations. So let's let me just share the screen and start the presentation.</p>
<p>21
00:03:45.340 --&gt; 00:03:52.620
Eyal Lior: Okay, so you must see. My, you should see my desktop. Now, right.</p>
<p>22
00:03:58.020 --&gt; 00:04:00.150
Gabor Szabo: Yes, we see your whole desktop, I think.</p>
<p>23
00:04:00.150 --&gt; 00:04:06.359
Eyal Lior: Oh, that! That's the vanilla boot website. That's my project. But let me just start the presentation.</p>
<p>24
00:04:09.040 --&gt; 00:04:10.929
Eyal Lior: There it is. So</p>
<p>25
00:04:12.460 --&gt; 00:04:30.180
Eyal Lior: vanilla boot. It's a minimal framework with maximum control, pure Javascript, pure freedom. That's the tagline. It's a lightweight javascript utility designed to streamline front end development without relying on extensive frameworks. When I say extensive frameworks, I mean, angular react view.</p>
<p>26
00:04:30.760 --&gt; 00:04:39.930
Eyal Lior: You name them it enables developer to build application with reusable ui components. Yeah, how's it</p>
<p>27
00:04:40.140 --&gt; 00:04:47.449
Eyal Lior: using standard Javascript and HTML, preserving the flexibility and simplicity of native web technologies?</p>
<p>28
00:04:48.330 --&gt; 00:04:49.180
Eyal Lior: So</p>
<p>29
00:04:50.020 --&gt; 00:04:58.990
Eyal Lior: when I ask people, why do you use frameworks? Because I don't get it like for me, I can. I can do anything with vanilla Javascript</p>
<p>30
00:04:59.370 --&gt; 00:05:01.660
Eyal Lior: with ease, with extreme ease.</p>
<p>31
00:05:01.910 --&gt; 00:05:08.310
Eyal Lior: So for me, it's not clear why people use frameworks, I can.</p>
<p>32
00:05:08.670 --&gt; 00:05:25.839
Eyal Lior: I can guess, make a guess. But I asked people who do push for frameworks for people who I worked with people who are interviewed. Ask them, why do you use frameworks? And these are the 8 most popular answers that I got.</p>
<p>33
00:05:26.400 --&gt; 00:05:33.510
Eyal Lior: The 1st one is the the fear of the free forms of the Javascript. So with Javascript, you can write</p>
<p>34
00:05:33.820 --&gt; 00:05:38.859
Eyal Lior: many parts of code, and and there's no form to it. There's no</p>
<p>35
00:05:38.990 --&gt; 00:05:47.940
Eyal Lior: beginning, and that there's no structural. There's No. 3 like structure for the code.</p>
<p>36
00:05:48.150 --&gt; 00:05:53.166
Eyal Lior: and for someone who's managing a project and is going to give a lot of</p>
<p>37
00:05:53.860 --&gt; 00:05:58.320
Eyal Lior: freedom to developers to to just build it any way they want.</p>
<p>38
00:05:59.050 --&gt; 00:06:23.307
Eyal Lior: It is some somewhat scary, you know. You don't know where they're going to take it. And with the framework it's kind of like binds you to staying with a certain structure. The second thing is, you want to build modular, reusable ui components, and most people don't know how to do it with Javascript. And while it's very trivial and</p>
<p>39
00:06:25.550 --&gt; 00:06:36.430
Eyal Lior: or should I say, it's very straightforward to build ui components with framework. And then there's the virtual dom which means efficient updates and rendering</p>
<p>40
00:06:37.556 --&gt; 00:06:43.993
Eyal Lior: state management. People say Whoa! The framework gives me state management, and</p>
<p>41
00:06:44.820 --&gt; 00:07:13.269
Eyal Lior: it can handle the more complex applications easily. It's easy when it's they, they would say, vanilla is good for small things. But when you have a complete complex app, I want state management and all that stuff built in reactivity, how to update ui on data change, you change the object and the form. Reflects the change to the data. And then there's the routing and navigation of the web app on the client side.</p>
<p>42
00:07:13.730 --&gt; 00:07:25.099
Eyal Lior: And people say there's a rich ecosystem. There's a lot of support for it. There's plugins, extensions, add-ons, and tools. Blah blah! And the cross platform support.</p>
<p>43
00:07:25.330 --&gt; 00:07:43.060
Eyal Lior: So people don't want to be like the old days where they have to test the everything that develop on different browsers and different operating system and the frameworks. It's 1 of the things that they promise. Now you. You might laugh when I switch to the second page.</p>
<p>44
00:07:44.330 --&gt; 00:08:03.270
Eyal Lior: The 1st 2 reasons are the actual reasons. People opt to use frameworks like react and angular. Well, the number one reason is they're afraid of the freedom that Javascript in the browser brings with it, and second.</p>
<p>45
00:08:03.440 --&gt; 00:08:11.231
Eyal Lior: they don't know how to build modular, reusable AI components without framework. Then there's the virtual dom</p>
<p>46
00:08:11.820 --&gt; 00:08:20.439
Eyal Lior: thing that I think that nobody really like 99% of the people who I talk to actually 100% of the people</p>
<p>47
00:08:20.550 --&gt; 00:08:44.109
Eyal Lior: I worked with projects I worked with. It wasn't relevant. State management, not easy at all was never easy. Maybe it's easier today, but certainly in in the previous years it was hell with frameworks rich ecosystem. If you if you if you look at libraries popular</p>
<p>48
00:08:44.624 --&gt; 00:08:52.800
Eyal Lior: mature libraries thing things like aging grid, for example, that gives you the most sophisticated grid</p>
<p>49
00:08:52.960 --&gt; 00:09:18.049
Eyal Lior: for web that you can put in your website or web apps. You can get it for angular for react, for view, for any kind of framework, and also for vanilla. So I think that the vast majority of libraries, certainly the most important ones, are available also for vanilla Javascript. So you don't need to use a framework in order to have those libraries.</p>
<p>50
00:09:19.660 --&gt; 00:09:31.080
Eyal Lior: So let's talk about the state state the complicated world of State.</p>
<p>51
00:09:35.500 --&gt; 00:09:37.566
Eyal Lior: if you want to.</p>
<p>52
00:09:39.220 --&gt; 00:10:09.120
Eyal Lior: actually, you have to use this mechanism of state when you use react. And it's like a technology that you have to learn in order to do very simple things that I will soon show you how you can do it them without react. And we will see what is more simple and what's less simple. So here we have basically a button that says, add, and when you click it, it calls add value, and what it does it, it</p>
<p>53
00:10:09.230 --&gt; 00:10:11.540
Eyal Lior: increments value 2,</p>
<p>54
00:10:11.850 --&gt; 00:10:17.900
Eyal Lior: and then it sets value, one to the value of value 2. So when you read the code.</p>
<p>55
00:10:18.170 --&gt; 00:10:31.229
Eyal Lior: you see that value, one is initialized 7, and we we expect to have the display. Show us Hello, 7. And when you click, it's going to increment value</p>
<p>56
00:10:31.340 --&gt; 00:10:56.319
Eyal Lior: value 2. So it's going to be 4 is going to become 5 and then value one is going to get the value of value 2. So it's going. We expect to see 5. And then, in the subsequent presses of the button, we expect to see 6, 7, 8, and so on. So we start with 7. Then we jump to 5, 6, 7, 8, and so on. But this is not what actually happens.</p>
<p>57
00:10:56.670 --&gt; 00:11:03.850
Eyal Lior: What actually is going to happen is that second?</p>
<p>58
00:11:06.780 --&gt; 00:11:07.950
Eyal Lior: Here we have it.</p>
<p>59
00:11:08.490 --&gt; 00:11:14.830
Eyal Lior: We have Hello, 7. Which is the value of value one. I click it once it says, Hello! 5 as expected.</p>
<p>60
00:11:15.090 --&gt; 00:11:20.209
Eyal Lior: I click again, and it's 5 again, and it's 6 again, and it's 5 again.</p>
<p>61
00:11:20.370 --&gt; 00:11:25.459
Eyal Lior: 5. Again I click. It's 6 again I click it. 5. What is happening?</p>
<p>62
00:11:25.640 --&gt; 00:11:35.580
Eyal Lior: What? What is happening behind the scenes is that this function gets recalled again, everything is restarting.</p>
<p>63
00:11:35.910 --&gt; 00:11:44.009
Eyal Lior: So it's not working as we think it's going to work. And we actually have to learn how</p>
<p>64
00:11:44.190 --&gt; 00:12:11.309
Eyal Lior: what's happening behind the scenes or inside the black box. It's not the black box. It's open source, but no one's going to get into the source code of react. So we have to read a long document to understand how the Use State works behind the scenes. And when does the app being called? And when it's not in order to build something as simple as a counter that increments and integer and prints it.</p>
<p>65
00:12:12.350 --&gt; 00:12:28.770
Eyal Lior: So this code that I've made here it's an example of a very common mistake. It's it has a name, the mistake. It's called reactive state mismanagement, or you can call it state initialization, anti pattern or</p>
<p>66
00:12:29.030 --&gt; 00:12:39.050
Eyal Lior: stale state, an uncontrolled state mutation or redundant state updates so</p>
<p>67
00:12:39.310 --&gt; 00:12:43.480
Eyal Lior: very complicated concepts in order to make something very simple.</p>
<p>68
00:12:45.570 --&gt; 00:13:14.279
Eyal Lior: Now, this is how you would do it without react. If it's just HTML and standard native Javascript, the HTML would say, hello. And then there's a span which is just an element containing anything you put in it. Basically, text, and we can access it by the idea through with the idea of the span. Then there's new line and a button with title 2, and on click, there's an event. Handler, add one.</p>
<p>69
00:13:14.920 --&gt; 00:13:20.389
Eyal Lior: and the Javascript would say this, we have value one initialized to 7 value, 2 initialized to 4,</p>
<p>70
00:13:20.700 --&gt; 00:13:26.650
Eyal Lior: and on the start, on the loading of the page. We're going to get the element full.</p>
<p>71
00:13:26.780 --&gt; 00:13:29.070
Eyal Lior: Do. By the way, do you see my mouth moving?</p>
<p>72
00:13:29.470 --&gt; 00:13:31.540
Eyal Lior: No right. Can you see my mouse.</p>
<p>73
00:13:31.540 --&gt; 00:13:35.110
Gabor Szabo: I I can see, and I'll have a question soon. Okay.</p>
<p>74
00:13:35.390 --&gt; 00:13:52.119
Eyal Lior: And then we set it to value one to 7. Now, when we click the button, we expect Ed one to be called so in increment value 2, we say, value one equals value 2, and the text content of Foo shall be, value one.</p>
<p>75
00:13:52.490 --&gt; 00:13:56.059
Eyal Lior: And let's see how it it's actually working.</p>
<p>76
00:13:57.330 --&gt; 00:14:08.340
Eyal Lior: So this is the Javascript example. See? It's initialized to hell of 7. We click becomes 5, click, 6 clicks, 7, click 8, and so on. So</p>
<p>77
00:14:08.900 --&gt; 00:14:14.160
Eyal Lior: there's less room to make mistakes because there's no</p>
<p>78
00:14:14.380 --&gt; 00:14:21.320
Eyal Lior: complicated 100 pages document to read about how to use state. You don't have state. You just</p>
<p>79
00:14:21.770 --&gt; 00:14:28.339
Eyal Lior: set the variable and set the context, the the content of the HTML element.</p>
<p>80
00:14:29.240 --&gt; 00:14:31.270
Eyal Lior: So you don't need to learn.</p>
<p>81
00:14:31.270 --&gt; 00:14:44.099
Gabor Szabo: I have a question because not I mean, I write Javascript and and stuff like this. But and I definitely not an expert. Why do you use on click? Is is this the</p>
<p>82
00:14:44.430 --&gt; 00:14:51.470
Gabor Szabo: right? That's what you recommend, or or why not attach the event to the document? Whatever.</p>
<p>83
00:14:52.800 --&gt; 00:14:56.740
Eyal Lior: That's the event development. I mean, you can go and attend.</p>
<p>84
00:14:57.158 --&gt; 00:15:07.630
Gabor Szabo: You can. You can write in the HTML on Click, or you can write some Javascript that will attach the click events to the that.</p>
<p>85
00:15:07.770 --&gt; 00:15:22.919
Eyal Lior: Like, if the button would have an idea, I can tell. Get element by idea and then connect the event. Handler. That's that's that's fine, and that's the that's the thing with vanilla Javascript. You have many ways to make</p>
<p>86
00:15:23.160 --&gt; 00:15:40.210
Eyal Lior: things, and people are afraid of it. Some people are afraid of it. I'm not afraid of it, but you do need to have some consistency in a large project. That's true. So the free formness, the free form, nature of Javascript in the browser</p>
<p>87
00:15:40.920 --&gt; 00:15:41.900
Eyal Lior: is.</p>
<p>88
00:15:43.090 --&gt; 00:15:49.664
Eyal Lior: It's a good thing for some people and a bad thing for for others. It's truly a matter of</p>
<p>89
00:15:51.310 --&gt; 00:16:09.650
Eyal Lior: personal preference. But when you, when you work with Javascript vanilla, you don't need to study refs function components. There used to be this thing called class components, and it's not deprecated. But it's not used anymore in react. This was causing a lot of those problems in the past.</p>
<p>90
00:16:10.140 --&gt; 00:16:20.660
Eyal Lior: Higher order components render props, custom hooks, mounting, updating component trees. Lifecycle re-renders use effect, use context.</p>
<p>91
00:16:20.780 --&gt; 00:16:28.410
Eyal Lior: You state all those concepts and and basically all those pieces of technology that you would have to read</p>
<p>92
00:16:28.670 --&gt; 00:16:32.329
Eyal Lior: many, many pages on each one of them to understand.</p>
<p>93
00:16:32.550 --&gt; 00:16:36.340
Eyal Lior: just to make something as simple as a button click that</p>
<p>94
00:16:36.630 --&gt; 00:16:39.680
Eyal Lior: updates updates the data on the document.</p>
<p>95
00:16:41.260 --&gt; 00:17:01.519
Eyal Lior: So the way I see those frameworks is, it's like a if you know the Ruby Goldberg machine, the super complicated machine that that eventually makes something very simple. So you have jsx, which is, it looks like HTML, but it really isn't. HTML, you can't write anything that you put in. HTML in it.</p>
<p>96
00:17:01.670 --&gt; 00:17:22.980
Eyal Lior: and then it goes into the framework. And then you have a piece of code like react, create element and a reference to my button, and in a different way of writing the properties and the output eventually what the framework does it translate to Javascript? So you can write in Javascript or have the framework create Javascript for you</p>
<p>97
00:17:23.300 --&gt; 00:17:27.859
Eyal Lior: that that's what happens behind the scenes. The the framework does this thing.</p>
<p>98
00:17:28.089 --&gt; 00:17:38.680
Eyal Lior: It creates a new element called button. It sets the style to blue. It sets the text to. I'm a button. Click me and then document body append, child. So</p>
<p>99
00:17:39.760 --&gt; 00:17:43.031
Eyal Lior: I say, why have all this big machine</p>
<p>100
00:17:43.730 --&gt; 00:17:48.210
Eyal Lior: generate something as simple as as this simple Javascript.</p>
<p>101
00:17:50.140 --&gt; 00:17:57.810
Eyal Lior: So let's talk about things that you can't do with frameworks which is direct and synchronous dom manipulations</p>
<p>102
00:17:58.340 --&gt; 00:17:59.870
Eyal Lior: inline scripts.</p>
<p>103
00:18:00.570 --&gt; 00:18:05.480
Eyal Lior: Work without the build system like a bundler like webpack</p>
<p>104
00:18:08.230 --&gt; 00:18:14.030
Eyal Lior: and not even getting into typescript global event handling and delegation,</p>
<p>105
00:18:17.340 --&gt; 00:18:23.939
Eyal Lior: accessing and modifying the full HTML structure like the the way it appears in the browser after it's rendered</p>
<p>106
00:18:24.200 --&gt; 00:18:28.290
Eyal Lior: and real time dynamic script and style loading.</p>
<p>107
00:18:29.460 --&gt; 00:18:43.649
Eyal Lior: I wouldn't know. Maybe you can do those things, but you probably have to start to study the framework really good, like. It's not enough that you know how to do it in vanilla. You'll have to study the framework</p>
<p>108
00:18:44.110 --&gt; 00:18:48.509
Eyal Lior: deeply in order to make things that are pretty trivial without the foam, board</p>
<p>109
00:18:48.740 --&gt; 00:18:52.050
Eyal Lior: and custom, event creation and dispatching.</p>
<p>110
00:18:54.690 --&gt; 00:19:02.589
Eyal Lior: And you know, like they they say, focus only on your business and and app logic. And that's what I'm striving for.</p>
<p>111
00:19:02.690 --&gt; 00:19:07.793
Eyal Lior: So let's talk about my project, and enough enough.</p>
<p>112
00:19:08.500 --&gt; 00:19:31.550
Eyal Lior: saying bad things about the frameworks. Let's say some good things about the vanilla book project. It's a non pervasive the guiding. I'm talking about the guiding principles of the project. It is non-pervasive. It's not limiting how you write code, how you write your screens or your modules. You can do anything you could do with vanilla.</p>
<p>113
00:19:31.650 --&gt; 00:19:38.929
Eyal Lior: There's nothing that you can do otherwise with vanilla Javascript that you cannot do when you use vanilla boot.</p>
<p>114
00:19:39.680 --&gt; 00:19:46.929
Eyal Lior: It has a minimalist approach, meaning you don't need to learn the guts of the framework to have full control of your app.</p>
<p>115
00:19:47.600 --&gt; 00:19:51.609
Eyal Lior: It gives you the ability to create reusable components.</p>
<p>116
00:19:51.900 --&gt; 00:19:54.936
Eyal Lior: And one of the features is that</p>
<p>117
00:19:55.560 --&gt; 00:19:58.709
Eyal Lior: it downloads only the components that are being used.</p>
<p>118
00:19:59.258 --&gt; 00:20:09.549
Eyal Lior: You can decide to preload some components in if you want to. Cache them for to have faster loading times but</p>
<p>119
00:20:09.730 --&gt; 00:20:15.330
Eyal Lior: basically you might have an application with a hundred screens.</p>
<p>120
00:20:15.680 --&gt; 00:20:36.419
Eyal Lior: and the user is only using 2 or 3 of them. You don't want to download all the application. So that's 1 thing that the application does that the the vanilla boot does it only downloads the components that are that you need. And I'm not sure that frameworks or the the framework like react, does it?</p>
<p>121
00:20:36.610 --&gt; 00:20:38.330
Eyal Lior: It has this separation.</p>
<p>122
00:20:38.840 --&gt; 00:20:43.169
Eyal Lior: Okay, there's no. J, 6. This is something that I really hated when I worked with react</p>
<p>123
00:20:43.300 --&gt; 00:20:48.800
Eyal Lior: and and not sure if angular is using J. 6 as well, or something like that. But</p>
<p>124
00:20:50.920 --&gt; 00:20:58.260
Eyal Lior: standard. HTML, so this on click thing that you put inside the HTML,</p>
<p>125
00:20:58.390 --&gt; 00:21:07.429
Eyal Lior: this is something you couldn't get away with. If you use J. 6, meaning the thing that looks like HTML, when you develop in react.</p>
<p>126
00:21:07.930 --&gt; 00:21:10.329
Eyal Lior: It's J. 6. It's not the HTML, but</p>
<p>127
00:21:10.580 --&gt; 00:21:20.230
Eyal Lior: you won't use standard. HTML, I like to use standard HTML, so I can use all those and pretty cool little things like on click, or</p>
<p>128
00:21:20.340 --&gt; 00:21:21.070
Eyal Lior: oh.</p>
<p>129
00:21:21.180 --&gt; 00:21:50.640
Eyal Lior: on mouse down, or any kind of thing that you can do in native HTML, I want to preserve those functionality, those abilities. There's no activity, full control of rendering. Nothing happens like we've seen in the example before of React. Nothing happens without you explicitly making it happen. So there's no mystery. Things. Why does it happen? Why does the value reset what's happening? There's nothing gets called behind the scene unless you make the call</p>
<p>130
00:21:52.318 --&gt; 00:21:56.600
Eyal Lior: so nothing is going to go unplanned. Then you like.</p>
<p>131
00:21:56.750 --&gt; 00:22:02.049
Eyal Lior: Well, I have to read a hundred pages document to see what happened</p>
<p>132
00:22:02.740 --&gt; 00:22:27.969
Eyal Lior: this. And there's a simple flow of data between the embedded components. I will show you an example really so real soon. And I've built an example that has a component. And then within it. There are 2 components of the same type, and within each one of them does a child component also of the same type, and they can all talk. They they can all all communicate, and it's pretty simple and intuitive.</p>
<p>133
00:22:28.870 --&gt; 00:22:32.859
Eyal Lior: and there is free form flow of data according to your needs.</p>
<p>134
00:22:32.980 --&gt; 00:22:38.399
Eyal Lior: I don't limit you to a way to make this communication work</p>
<p>135
00:22:40.390 --&gt; 00:22:47.079
Eyal Lior: free form, component architecture, no surprises, nothing to learn, no complex flow required for your code.</p>
<p>136
00:22:47.760 --&gt; 00:22:52.999
Eyal Lior: Every component can be different, fully flex. Full flexibility to this is something that</p>
<p>137
00:22:54.300 --&gt; 00:23:00.180
Eyal Lior: I like to have when I get into building a very complex application is that</p>
<p>138
00:23:00.380 --&gt; 00:23:17.990
Eyal Lior: if I if I know and and I am doing it right now. At work, I I'm building an application that has about more than 150 screens, different screens, different kind of logic and complications. And I don't want to limit</p>
<p>139
00:23:18.499 --&gt; 00:23:23.300
Eyal Lior: or to decide from the get go from the start of the project.</p>
<p>140
00:23:23.790 --&gt; 00:23:30.920
Eyal Lior: How I'm going to build screens in general I don't know. I might get. I might build 30 screens and then</p>
<p>141
00:23:31.648 --&gt; 00:23:39.180
Eyal Lior: bump into a screen. That's really really complicated and has completely different element and needs a different flow.</p>
<p>142
00:23:39.440 --&gt; 00:23:47.940
Eyal Lior: And vanilla boot lets you have like a world of its own in each component. There's no</p>
<p>143
00:23:54.530 --&gt; 00:23:58.540
Eyal Lior: how, how, I don't know how to to explain, but there's no</p>
<p>144
00:23:59.825 --&gt; 00:24:04.289
Eyal Lior: they don't need to. Be like like like one another.</p>
<p>145
00:24:06.000 --&gt; 00:24:11.909
Eyal Lior: Okay, so there's no virtual dom. There's no built in state management like like we talked about.</p>
<p>146
00:24:12.500 --&gt; 00:24:19.558
Eyal Lior: So you don't need to learn the remarks in a walking. I know I'm repeating myself a little bit.</p>
<p>147
00:24:20.410 --&gt; 00:24:23.820
Eyal Lior: The framework is written in short and simple code.</p>
<p>148
00:24:24.090 --&gt; 00:24:31.809
Eyal Lior: There's no stratified object. Oriented hell. It's it's about 370 lines of code. That's it.</p>
<p>149
00:24:31.930 --&gt; 00:24:54.260
Eyal Lior: Right now. I mean, it's a small. It's an early age. It's a it's early stage library. It will grow. But I'm not putting a lot of code in it. I'm trying to keep it minimalist and easy. So even if you would need to look into it inside of the library. It's short, it's simple, and it's not</p>
<p>150
00:24:54.590 --&gt; 00:25:03.220
Eyal Lior: built in in too much of overly designed that you can't really tell. Well, when does this code get called by? Who</p>
<p>151
00:25:04.250 --&gt; 00:25:05.949
Eyal Lior: no transpiling</p>
<p>152
00:25:06.550 --&gt; 00:25:14.950
Eyal Lior: meaning? When when a code isn't transpired, you can just press F, 12 and and debug the code as it is written.</p>
<p>153
00:25:16.090 --&gt; 00:25:23.770
Eyal Lior: So it's easier to investigate the code. In the browser environment. There's no chunking to incoherent little pieces of code</p>
<p>154
00:25:24.310 --&gt; 00:25:31.860
Eyal Lior: and due to no framework as a base and fuel, the dependability</p>
<p>155
00:25:33.180 --&gt; 00:25:40.849
Eyal Lior: and pilties. What is it right here we get long term reliability. So because this is such a small minimalist framework.</p>
<p>156
00:25:40.980 --&gt; 00:25:48.770
Eyal Lior: and most of your code can eventually be even migrated to another library, or you can just</p>
<p>157
00:25:49.390 --&gt; 00:26:00.640
Eyal Lior: move out and leave you. You can migrate from veneer, but really easily, because the code that you write for your application is not</p>
<p>158
00:26:01.630 --&gt; 00:26:04.660
Eyal Lior: built in a very specific way</p>
<p>159
00:26:04.930 --&gt; 00:26:11.829
Eyal Lior: for vanilla boot, vanilla boot give lets you build any way you want your code, your your application logic.</p>
<p>160
00:26:13.025 --&gt; 00:26:16.520
Eyal Lior: So you don't marry the framework.</p>
<p>161
00:26:16.630 --&gt; 00:26:38.999
Eyal Lior: You can leave it or customize it, and you still have your code detached from any kind of logic that you would have if you would use. For example, I use this example because I think 90% of the market use react today when you use react, you build the code around the structure of</p>
<p>162
00:26:39.360 --&gt; 00:26:44.189
Eyal Lior: of those there are components</p>
<p>163
00:26:45.340 --&gt; 00:26:53.760
Eyal Lior: and your code is split and the the flow of data is how a react program expects it to be.</p>
<p>164
00:26:53.940 --&gt; 00:26:58.023
Eyal Lior: And here, rather, it's more</p>
<p>165
00:27:00.200 --&gt; 00:27:07.220
Eyal Lior: you're you're free from this limitation, and you're not marrying the the library.</p>
<p>166
00:27:07.350 --&gt; 00:27:15.230
Eyal Lior: and I want you to keep using it. But but it's I think it's will be much easier to keep being in independent.</p>
<p>167
00:27:16.240 --&gt; 00:27:26.109
Eyal Lior: Okay? So you can create components completely different strategy for each one of them embed. You can embed components in palm components</p>
<p>168
00:27:26.600 --&gt; 00:27:27.514
Eyal Lior: and</p>
<p>169
00:27:29.040 --&gt; 00:27:38.660
Eyal Lior: communicate between components. You can load multiple components again, again, meaning multiple instances of instances of the same component.</p>
<p>170
00:27:38.980 --&gt; 00:27:45.449
Eyal Lior: You can load dynamic javascript or css from any location.</p>
<p>171
00:27:47.151 --&gt; 00:27:51.969
Eyal Lior: Let's let's move on. What about plugins and 3rd party stuff</p>
<p>172
00:27:52.410 --&gt; 00:28:14.129
Eyal Lior: like I said before, there are plenty full of extensions available for vanilla Javascript equal or more than those available for framework. So here's an example of of libraries that I like, and you can use with vanilla Javascript, one js, which gives you actually the ability to create reactive reactive Ui elements</p>
<p>173
00:28:14.675 --&gt; 00:28:17.920
Eyal Lior: without react. So you can, you can actually</p>
<p>174
00:28:18.540 --&gt; 00:28:30.470
Eyal Lior: use Van Js with vanilla Van Js is not mine. It's another project you can like, create dynamically from code. HTML, elements like you would have like you would do with react.</p>
<p>175
00:28:30.770 --&gt; 00:28:35.529
Eyal Lior: So you can add Van Js into vanilla boot.</p>
<p>176
00:28:35.660 --&gt; 00:28:39.459
Eyal Lior: and have all those reactivity abilities</p>
<p>177
00:28:40.080 --&gt; 00:28:50.870
Eyal Lior: in one model in your system or in many modules. But you would not be limited to choose. Okay, I'm I want to activity. So all my application has to be reactive.</p>
<p>178
00:28:51.460 --&gt; 00:28:58.709
Eyal Lior: You can have. There's a project called Vanilla Router, which gives you the same routing mechanism that you have in in</p>
<p>179
00:28:58.830 --&gt; 00:29:11.889
Eyal Lior: frameworks like angular and react ag grid, a great grid technology that I use a lot at work and and for other projects is available for vanilla.</p>
<p>180
00:29:12.410 --&gt; 00:29:31.639
Eyal Lior: W. 2 ui and golden layout, 2 2 very good technologies for building windowing systems in Javascript, where you can have draggable windows that you can put your load your modules in into, and I'm plan. I plan to support them in in vanilla boot. So you can actually</p>
<p>181
00:29:31.850 --&gt; 00:29:33.379
Eyal Lior: very easily write</p>
<p>182
00:29:34.572 --&gt; 00:29:42.620
Eyal Lior: your own components that open inside those windows, you can integrate paypal stripe moment or yesterday</p>
<p>183
00:29:42.790 --&gt; 00:29:47.429
Eyal Lior: digest and data visualization technology. So</p>
<p>184
00:29:48.020 --&gt; 00:29:53.310
Eyal Lior: the idea that you need to use react or angular because they have 3rd party libraries.</p>
<p>185
00:29:53.700 --&gt; 00:29:55.939
Eyal Lior: absolute nonsense. So let's</p>
<p>186
00:29:56.130 --&gt; 00:30:04.859
Eyal Lior: get to the most important part. The example. Here's an example, and and I will. I will show it in a minute. In the browser.</p>
<p>187
00:30:05.020 --&gt; 00:30:06.810
Eyal Lior: What we see in this example</p>
<p>188
00:30:07.150 --&gt; 00:30:12.520
Eyal Lior: is, we see a root component, which is</p>
<p>189
00:30:13.460 --&gt; 00:30:16.229
Eyal Lior: the the whole big black box.</p>
<p>190
00:30:16.610 --&gt; 00:30:22.129
Eyal Lior: and within it there are 2 parent components, and each parent has 2 children.</p>
<p>191
00:30:22.710 --&gt; 00:30:26.890
Eyal Lior: So there are 3 types of components here, there's the root, the parent and the child.</p>
<p>192
00:30:27.130 --&gt; 00:30:32.960
Eyal Lior: and those concurrent instances like we had 2 parents and 2 childs within each parent.</p>
<p>193
00:30:34.010 --&gt; 00:30:45.679
Eyal Lior: and we have here an ordered loader of dependencies. So suppose one of your application windows needs to load many javascript external Javascript libraries.</p>
<p>194
00:30:46.090 --&gt; 00:30:53.209
Eyal Lior: and you need them to load in a certain order one before the other, and you maybe you want to execute</p>
<p>195
00:30:53.350 --&gt; 00:31:04.149
Eyal Lior: some some custom Javascript code after you load some library, and before you load the next one, this is something that vanilla Boots lets you do, and I I show it in the example.</p>
<p>196
00:31:05.710 --&gt; 00:31:13.910
Eyal Lior: Now let me just switch window for a moment and show you the example in the browser.</p>
<p>197
00:31:17.160 --&gt; 00:31:24.950
Eyal Lior: Okay, so this is the live example. Every time I reload it it gets a random column. The random column comes from</p>
<p>198
00:31:25.280 --&gt; 00:31:45.469
Eyal Lior: an external dependency. Now, I'm not going to get into the whole source code. It's not complicated at all. If you can get into the example is, live on the website, and you can do a control U or F 12, and get into the source and and view how it's done, and view how the components are loading. But</p>
<p>199
00:31:46.000 --&gt; 00:31:58.800
Eyal Lior: the thing is, every child component has 2 buttons. Call myself, and call p. 2 c. 1. They they all have call p. 2, parent, 2, child, one. So if I call myself</p>
<p>200
00:31:58.990 --&gt; 00:32:01.250
Eyal Lior: I called my. It says I called myself</p>
<p>201
00:32:01.740 --&gt; 00:32:06.639
Eyal Lior: call myself call myself. Now, if I go here and I say, call p. 2 c. 1,</p>
<p>202
00:32:07.260 --&gt; 00:32:10.510
Eyal Lior: it's going to say, call from child 2.</p>
<p>203
00:32:10.690 --&gt; 00:32:14.159
Eyal Lior: It should say, call from child. Parent one, child, 2.</p>
<p>204
00:32:14.320 --&gt; 00:32:15.510
Eyal Lior: Here it says.</p>
<p>205
00:32:16.140 --&gt; 00:32:33.070
Eyal Lior: Hi, p. 1. i'm c, 1 or Hi, parent one. I'm child, one, and then Hi, parent one, I'm child 2, so we can see communication between the children and the parent and children and children in completely different place</p>
<p>206
00:32:33.990 --&gt; 00:32:35.180
Eyal Lior: in the 3.</p>
<p>207
00:32:36.820 --&gt; 00:32:39.620
Eyal Lior: Let's go back to that presentation.</p>
<p>208
00:32:42.480 --&gt; 00:32:51.970
Eyal Lior: So just I'll get a little bit into the example. So once you want to investigate it yourself, you know what's going on.</p>
<p>209
00:32:52.110 --&gt; 00:32:57.500
Eyal Lior: The 1st the the HTML that you're loading. It's it's called example. HTML,</p>
<p>210
00:32:58.110 --&gt; 00:33:00.470
Eyal Lior: it loads the vanilla book library.</p>
<p>211
00:33:01.220 --&gt; 00:33:07.810
Eyal Lior: It has a div that takes all the width and the height of the screen. We call it example layout.</p>
<p>212
00:33:08.010 --&gt; 00:33:11.289
Eyal Lior: and that's the div where inside everything is loaded.</p>
<p>213
00:33:11.460 --&gt; 00:33:18.579
Eyal Lior: And that's the start of the example. It says, it starts the library and gives it the reference.</p>
<p>214
00:33:18.770 --&gt; 00:33:22.449
Eyal Lior: the to the Div, where we want everything to happen.</p>
<p>215
00:33:22.560 --&gt; 00:33:27.119
Eyal Lior: and then we say, show module, and we pass the name of the module.</p>
<p>216
00:33:27.480 --&gt; 00:33:32.120
Eyal Lior: It's called test grandparent. So basically, there's grandparent parent and child.</p>
<p>217
00:33:32.690 --&gt; 00:33:38.110
Eyal Lior: and we want to 1st load a component called test grandparent.</p>
<p>218
00:33:38.310 --&gt; 00:33:44.369
Eyal Lior: So what the lib. What vanilla boot does is it goes to a library to a folder called</p>
<p>219
00:33:44.650 --&gt; 00:33:59.410
Eyal Lior: that name test grandparent, and it looks for 2 things. This is the the minimal. The minimal model has an HTML file and a Javascript file with the same name as as the folder, and it loads the HTML,</p>
<p>220
00:34:00.160 --&gt; 00:34:07.050
Eyal Lior: and it scans it scans the HTML for divs that have class.</p>
<p>221
00:34:07.260 --&gt; 00:34:35.570
Eyal Lior: The class name vanilla boot component. Whenever there's a div with vanilla boot component as a class. It knows that it's it's a component that needs loading, and it has a name and an idea. And then we go. We say, Okay, the name is test parent. So we go to test parent and load, test parent within test. Parent, you will have the same thing. You'll have a div with the class vanilla boot component, and the name test child. And this is how the child is being loaded.</p>
<p>222
00:34:39.179 --&gt; 00:34:43.920
Eyal Lior: Each component has a vanilla boot component as a prototype.</p>
<p>223
00:34:45.050 --&gt; 00:34:50.050
Eyal Lior: So, for example, if we have the child, this is the the code for the child component.</p>
<p>224
00:34:50.668 --&gt; 00:34:53.109
Eyal Lior: The constructor gets an element.</p>
<p>225
00:34:53.480 --&gt; 00:34:57.909
Eyal Lior: an in an element in the HTML and a link to the parent.</p>
<p>226
00:34:58.150 --&gt; 00:35:00.750
Eyal Lior: and it caused the the</p>
<p>227
00:35:02.680 --&gt; 00:35:08.632
Eyal Lior: the superclass constructor. And then here we see the dynamic loading of of</p>
<p>228
00:35:11.660 --&gt; 00:35:20.370
Eyal Lior: of dependencies. So we're loading a Css file, and then we're loading a javascript. But</p>
<p>229
00:35:20.630 --&gt; 00:35:31.030
Eyal Lior: right after the Javascript is loaded we have an event handle here a function. This will be called after this dependency sample dependency is loaded.</p>
<p>230
00:35:31.920 --&gt; 00:35:39.530
Eyal Lior: and then we have the sample dependency, 2 loaded. Now, if you go to the sources, and you look what it does. Sample dependency dot Js</p>
<p>231
00:35:39.700 --&gt; 00:35:45.730
Eyal Lior: colors of the children in one color. I think it's red or something, and then sample dependency, too.</p>
<p>232
00:35:46.970 --&gt; 00:35:56.619
Eyal Lior: puts a random color to each child. So when the when the example is loading and you see a random color, you know that that</p>
<p>233
00:35:56.730 --&gt; 00:36:01.500
Eyal Lior: sample dependency 2 is the last Javascript loaded.</p>
<p>234
00:36:02.080 --&gt; 00:36:09.690
Eyal Lior: It's kind of like proving the the order of the dependencies and do start is the</p>
<p>235
00:36:09.920 --&gt; 00:36:15.019
Eyal Lior: is a function that is called for every component. When all the dependencies finish to load.</p>
<p>236
00:36:18.140 --&gt; 00:36:21.769
Eyal Lior: we are getting close to the end of the presentation.</p>
<p>237
00:36:23.190 --&gt; 00:36:26.980
Eyal Lior: This is how communication between child and parent work.</p>
<p>238
00:36:27.220 --&gt; 00:36:30.460
Eyal Lior: The component that has a link to the parent</p>
<p>239
00:36:30.780 --&gt; 00:36:43.900
Eyal Lior: can simply call any method you choose to implement in the parent. So I call this method call from child. But this is any method that you would put in the parent component, you can access it directly.</p>
<p>240
00:36:44.190 --&gt; 00:36:49.050
Eyal Lior: and then, once you access it. The parent has the reference to the child instance.</p>
<p>241
00:36:50.440 --&gt; 00:37:00.009
Eyal Lior: So the parent has a function called call from child, and it gets a reference to this to the child and the text that we want to print.</p>
<p>242
00:37:01.660 --&gt; 00:37:12.639
Eyal Lior: and then the the in the parent component you can call a function that you create in the child called parent component, we'll call. This</p>
<p>243
00:37:12.900 --&gt; 00:37:16.959
Eyal Lior: could be anything you put anything, any functions you want to implement.</p>
<p>244
00:37:17.690 --&gt; 00:37:34.300
Eyal Lior: But there is also a mechanism that a utility mechanism that I provide called find component. So if you want to communicate between components without any regard for where they are placed, you just give it the hierarchy. So you say, parent 2</p>
<p>245
00:37:34.660 --&gt; 00:37:42.240
Eyal Lior: CPU, 2 c. 1. So it's the hierarchy of the the idea of the com components.</p>
<p>246
00:37:42.490 --&gt; 00:37:55.110
Eyal Lior: So you can. You, you just every component that loads the library knows the structure, the the 3 of components that that are loaded, and you can access them by just the name</p>
<p>247
00:37:57.550 --&gt; 00:38:01.700
Eyal Lior: final thoughts, vanilla vanilla boot is currently only</p>
<p>248
00:38:01.900 --&gt; 00:38:08.910
Eyal Lior: 370 lines of code. The code is sourced from existing complex and mature projects which serve as repository</p>
<p>249
00:38:09.010 --&gt; 00:38:26.380
Eyal Lior: phone, incremental dismantling and reuse. So basically, this is things that I've used when I built other projects and I dismantled them and brought into vanilla boot to make them more more general and and universal, so other people can use the same mechanism</p>
<p>250
00:38:31.050 --&gt; 00:38:34.900
Eyal Lior: process is carried out methodologically, without haste with each addition.</p>
<p>251
00:38:35.540 --&gt; 00:38:48.125
Eyal Lior: followed by careful observation of user adoption and identification of potential potential the factory needs before further investigation. Right now, it's an early stage project and</p>
<p>252
00:38:50.030 --&gt; 00:39:01.600
Eyal Lior: I don't know where it's going to develop. We'll see who who adopts the project and what feature requests I'm getting. There's certainly things that will</p>
<p>253
00:39:01.930 --&gt; 00:39:11.599
Eyal Lior: that it cannot do right now. I mean, it's not it's not ready to conquer the world, certainly, but for many, many users.</p>
<p>254
00:39:12.110 --&gt; 00:39:24.220
Eyal Lior: for example, if, like me, you are building an application that's going to use be used inside an organization. And it's not going to be a website that's used by millions of concurrent users</p>
<p>255
00:39:24.620 --&gt; 00:39:30.340
Eyal Lior: and most of your applications. Most most of your pages will have one or 2 components.</p>
<p>256
00:39:30.750 --&gt; 00:39:35.209
Eyal Lior: But you're gonna have a hundred or 150 or 200 screens.</p>
<p>257
00:39:35.630 --&gt; 00:39:39.090
Eyal Lior: Then it's perfect. It's perfect already.</p>
<p>258
00:39:39.590 --&gt; 00:39:41.799
Eyal Lior: But if you're going to build a website.</p>
<p>259
00:39:42.300 --&gt; 00:39:49.720
Eyal Lior: and you're gonna have like 50 components all loaded. Once you might want to think about how to</p>
<p>260
00:39:50.130 --&gt; 00:40:09.729
Eyal Lior: pack the components together and not have it load, create 1, 50 or 100 htp. Requests for every component. So the framework is in is in early stage. It's not fit for any kind of use, but it it can be used for most most it projects</p>
<p>261
00:40:10.332 --&gt; 00:40:14.959
Eyal Lior: especially ones that are not for public big websites.</p>
<p>262
00:40:15.190 --&gt; 00:40:16.200
Eyal Lior: It's good.</p>
<p>263
00:40:16.940 --&gt; 00:40:26.410
Eyal Lior: So is it too early to adopt? I would say, no, take it, adopt it. It's really easy and gives you the ability to you. Build in vanilla Javascript.</p>
<p>264
00:40:29.770 --&gt; 00:40:36.459
Eyal Lior: So thank you for your attention, and please visit the website and look at the example. Try to look at the source of it</p>
<p>265
00:40:36.570 --&gt; 00:40:39.409
Eyal Lior: and download it and play with it. And I'm</p>
<p>266
00:40:39.820 --&gt; 00:40:44.440
Eyal Lior: you for any questions, any support that's needed. It's open source.</p>
<p>267
00:40:47.390 --&gt; 00:40:49.249
Eyal Lior: Use it in any way you want.</p>
<p>268
00:40:52.000 --&gt; 00:41:00.040
Gabor Szabo: Well, thank you for your presentation. If there are any questions, then please ask those from</p>
<p>269
00:41:00.260 --&gt; 00:41:02.199
Gabor Szabo: from the people who are here in the</p>
<p>270
00:41:02.570 --&gt; 00:41:07.190
Gabor Szabo: in the presentation. Please ask now. But as we didn't have any</p>
<p>271
00:41:07.520 --&gt; 00:41:10.680
Gabor Szabo: questions during the talks, I guess.</p>
<p>272
00:41:11.760 --&gt; 00:41:12.920
Gabor Szabo: People.</p>
<p>273
00:41:13.220 --&gt; 00:41:18.679
Gabor Szabo: we're satisfied with what what you you said and how you presented it. So thank you very much.</p>
<p>274
00:41:18.890 --&gt; 00:41:26.469
Gabor Szabo: and thanks for everyone who was here at the meeting.</p>
<p>275
00:41:26.720 --&gt; 00:41:40.739
Gabor Szabo: And if you watch the video and you enjoyed it. Then please click on the like button and also follow the channel definitely. So you'll get notified below the video. You will find links to</p>
<p>276
00:41:41.580 --&gt; 00:41:48.165
Gabor Szabo: where to find the the project and and how to get in touch with a and</p>
<p>277
00:41:49.150 --&gt; 00:41:52.400
Gabor Szabo: I think that's it, for now any last words.</p>
<p>278
00:41:52.920 --&gt; 00:41:58.284
Eyal Lior: Thank you for the opportunity to present it. I am very excited about this project, and</p>
<p>279
00:41:59.010 --&gt; 00:42:04.220
Eyal Lior: I think a lot of people will be very happy about it, because it's</p>
<p>280
00:42:04.500 --&gt; 00:42:12.049
Eyal Lior: it becomes hard today to be a vanilla Javascript developer when everybody's using react.</p>
<p>281
00:42:12.310 --&gt; 00:42:16.310
Gabor Szabo: Yeah, I don't use any of the frameworks, so I'll build. I don't</p>
<p>282
00:42:16.430 --&gt; 00:42:26.000
Gabor Szabo: build big things, usually a very lightweight. The the Javascript part. What I I do, but then I usually</p>
<p>283
00:42:26.150 --&gt; 00:42:36.590
Gabor Szabo: either use vanilla Javascript, or or maybe I use Jquery, and but even that is not really necessarily in most cases</p>
<p>284
00:42:36.790 --&gt; 00:42:42.930
Gabor Szabo: so, and thank you very much, and good luck with the project.</p>
<p>285
00:42:43.240 --&gt; 00:42:43.960
Eyal Lior: Thank you.</p>
<p>286
00:42:44.210 --&gt; 00:42:45.620
Gabor Szabo: And bye, bye, everyone.</p>
<p>287
00:42:46.180 --&gt; 00:42:46.930
Eyal Lior: Joe.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Do not limit the length of the passwords!</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2024-09-23T11:30:01Z</updated>
    <pubDate>2024-09-23T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/do-not-limit-the-length-of-passwords" />
    <id>https://code-maven.com/do-not-limit-the-length-of-passwords</id>
    <content type="html"><![CDATA[<p>Every once in a while I encounter a web site where the length of the password is limited. Usually to 8 characters.</p>
<p>This is really scary.</p>
<p>I am trying to figure out why would any developer want to limit the length of the password you use.</p>
<p>I can think of two explanations.</p>
<p>One is that someone thought that &quot;it would be hard for you to remember a longer password so we limit it to 8 characters&quot;. Is this patronizing? Where would this come from?</p>
<p>The other, much worse is that they have allocated a given size of space (e.g. 8 characters) in the database where they store the passwords and they want to make sure yours will also fit in. This is really scary as this would indicated that they store the password as you typed in. In clear text. That's a huge security hole as that means anyone who can see the content of the database will have all the passwords. So for example if the admins store a backup of the database on some place that less secure than the original database server then someone might be able to access that.</p>
<p>The correct way to store passwords is to use some kind of a strong hashing algorithm. The nice feature of all the hashing algorithms is that they  take any arbitrary long string and convert it to a fixed length string. For example sha256 will give you a 256 bit (32 bytes) long string. Regardless of the length of the input. So your password can be 10 characters or 20, after the conversion it will be 32 bytes long and that's what the developer needs to store in the database. Maybe with a few extra characters.</p>
<p>So the developers can fix the allocated place in the database and they can be sure that regardless of the length of the real password they will only need to store the expected number of bytes.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Programming Projects</title>
    <summary type="html"><![CDATA[Some simple project ideas to practice programming.]]></summary>
    <updated>2024-04-02T13:50:01Z</updated>
    <pubDate>2024-04-02T13:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/projects" />
    <id>https://code-maven.com/projects</id>
    <content type="html"><![CDATA[<p>Before you work on project you might want to start with the more simple <a href="/exercises">exercises</a>.</p>
<ol>
<li><a href="/personal-bookmarks">Personal Bookmarks</a></li>
<li><a href="/url-shortener">URL Shortener</a></li>
<li><a href="/todo">TODO list</a></li>
<li><a href="/shopping-list">Shopping list</a></li>
<li><a href="/repeated-shopping-list">Repeated shopping list</a></li>
<li><a href="/flight-ticket-vendor">Flight ticket vendor</a></li>
<li><a href="/microblog">Microblog</a></li>
<li><a href="/static-site-generator">SSG - Static Site Generator</a></li>
<li><a href="/job-search-manager">Job search manager</a></li>
</ol>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Job search manager</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2024-04-02T13:40:01Z</updated>
    <pubDate>2024-04-02T13:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/job-search-manager" />
    <id>https://code-maven.com/job-search-manager</id>
    <content type="html"><![CDATA[<p>A system that helps keep tracking of your job search</p>
<p>Add company, link to job ad.</p>
<p>Maybe includ details of the job ad (title, etc) copied from the ad.</p>
<p>List of events with the specific job post:</p>
<p>When you saw it.</p>
<p>When you submitted your CV.</p>
<p>How did you submit your CV? (Via LinkedIn, via the web site of the company, via a recruiter company, etc.)</p>
<p>When did you talk to them (with whom did you talk, notes you made)</p>
<p>Add a trigger, a TODO item to each company. (with specific date or without)</p>
<p>Allow the display of everything about a company.</p>
<p>Show the list of companies.</p>
<p>Show the list of TODO items.</p>
<p>Mark a TODO item as done. (and maybe turn into an even with notes.)</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Repeated shopping list</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2024-04-02T13:30:01Z</updated>
    <pubDate>2024-04-02T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/repeated-shopping-list" />
    <id>https://code-maven.com/repeated-shopping-list</id>
    <content type="html"><![CDATA[<p>A shopping list application for buying in a Supermarket where we often buy the same items.</p>
<p>In this system we will have a &quot;master list&quot; where we only have the types of items. Each item can be either without the amount or with the range of amounts based on our past purchases.</p>
<p>When the user wants to start a new purchase s/he can do so either from an empty list, from the list of all the items in the master list or a list from a previous purchase.</p>
<p>The user can add new items to the current list. These items are also automatically added to the &quot;master list&quot;.</p>
<p>The user can change the amount of each item in the current list. The user can also remove items from the current list.</p>
<p>The user can also direct add/remove items in the &quot;master list&quot;.</p>
<p>There can can be other users in the system who can suggest items to the current list. (e.g. the kids want to get sweets). The main person will see who suggested each iterm.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SurrealDB</title>
    <summary type="html"><![CDATA[SurrealDB articles]]></summary>
    <updated>2024-02-24T18:30:01Z</updated>
    <pubDate>2024-02-24T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/surrealdb" />
    <id>https://code-maven.com/surrealdb</id>
    <content type="html"><![CDATA[<p><a href="https://surrealdb.com/">SurrealDB</a> is a multi-model database I have been experimenting with in Rust. I created a number of examples for <a href="https://rust.code-maven.com/surrealdb">SurrealDB using Rust</a>.</p>
<h2 class="title is-4">Using Python</h2>
<p>The <a href="https://docs.surrealdb.com/docs/integration/sdks/python/">Python SDK of SurrealDB</a></p>
<ul>
<li><a href="/surrealdb-getting-started">Getting started with SurrealDB using Python and Docker</a></li>
<li><a href="/surrealdb-python-cli-phonebook">CLI phone book in Python using SurrealDB as a database</a></li>
</ul>
<h2 class="title is-4">Using Rust</h2>
<ul>
<li><a href="https://rust.code-maven.com/surrealdb">SurrealDB using Rust</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker uses a lot more disk-space than docker system df reports</title>
    <summary type="html"><![CDATA[Docker system df can provide detailed reports on disk usage but it does not include the disk space used by the log files.]]></summary>
    <updated>2024-01-04T08:30:01Z</updated>
    <pubDate>2024-01-04T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-uses-a-lot-of-diskspace" />
    <id>https://code-maven.com/docker-uses-a-lot-of-diskspace</id>
    <content type="html"><![CDATA[<p><b>docker system df</b> shows a nice overview of the disk-space usage of the Docker installation.</p>
<p>Like this:</p>
<pre><code>$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          7         2         5.129GB   4.806GB (93%)
Containers      3         3         12.46MB   0B (0%)
Local Volumes   4         3         7.627GB   230MB (3%)
Build Cache     165       0         2.378GB   2.378GB
</code></pre>
<p>Using the <b>-v</b> flag like this : <b>docker system df -v</b>  shows the same information in way more details that can help you understand what part of Docker uses all that data.</p>
<p>Except in my case, the folder where Docker stored its data used about 20 times more space than reported by Docker.
Naturally I only noticed it when my server ran out of disk-space putting me in panic-mode.</p>
<p>It took me a while till I realized there are some huge log-files in the <b>containers</b> folder.</p>
<p>I am sure you know that you can look at the output that was printed to the console of your container by running the command:</p>
<pre><code>docker container logs NAME_OF_A_CONTAINER
</code></pre>
<p>As it turns out this output is saved in a file in the folder of the individual container and <b>by default it is kept forever</b>.</p>
<p><b>docker system df</b> can provide detailed reports on disk usage, but it does <b>not</b> include the disk space used by the log files.</p>
<p>One of the services I used was very, I mean really talkative and printed tons of stuff on the console. Docker shoved all of that into an ever growing file.</p>
<h2 class="title is-4">Solution</h2>
<p>The immediate solution was to stop docker and remove the huge file.</p>
<p>The longer-term solution was to configure Docker to keep the log files limited in size.</p>
<p>It can be done in the daemon configuration file which, at least in my installation is located in</p>
<pre><code>/etc/docker/daemon.json
</code></pre>
<p>I already had this in the file:</p>
<pre><code>{
    &quot;data-root&quot;: &quot;/home/data/docker&quot;,
}
</code></pre>
<p>That's because a while ago I moved all the data to a disk separate from the disk of the operating system.</p>
<p>Now I updated it:</p>
<pre><code>{
    &quot;data-root&quot;: &quot;/home/data/docker&quot;,

    &quot;log-driver&quot;: &quot;json-file&quot;,
    &quot;log-opts&quot;: {
        &quot;max-size&quot;: &quot;10m&quot;,
        &quot;max-file&quot;: &quot;3&quot;
    }
}
</code></pre>
<p>Then I restarted the Docker daemon with</p>
<pre><code>sudo systemctl restart docker
</code></pre>
<p>and I also had to <b>stop and remove the existing containers and start new ones</b>!</p>
<p>Without that the changed did not take effect.</p>
<p>To tell the truth I also rebooted the host machine. It is probably not necessary, but I like to do that after such changes to verify that
the computer can be booted and all the services start as expected. I rather have a few seconds downtime when I still remember the
changes I made than later when something breaks because of some changes a few weeks or month earlier.</p>
<p>For more details see how to <a href="https://docs.docker.com/config/containers/logging/configure/">configure logging drivers for Docker</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Contributing to Open Source Software: VS Code (Visual Studio Code)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-06-18T21:30:01Z</updated>
    <pubDate>2023-06-18T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/visual-studio-code" />
    <id>https://code-maven.com/visual-studio-code</id>
    <content type="html"><![CDATA[<p><a href="https://code.visualstudio.com/">Visual Studio Code</a> is one of the most popular IDEs these days. Contributing to it would probably be cool,
but also extremely difficult. Given that is a mature product with millions of users, most likely the easy issues have all been addressed.</p>
<p>If you visit the web site the only indication as to how to contribute to it I found was a small GitHub logo at the bottom that leads to the
<a href="https://github.com/Microsoft/vscode/">GitHub repository of VS Code</a></p>
<p>As of this writing on 2023.06.18, it had more than 110,000 commits by 1,855 contributors. It also has 5K open issues and 405 open pull-requests.
It is based on <a href="https://www.electronjs.org/">Electron</a> and it is written in <a href="https://www.typescriptlang.org/">TypeScript</a>.</p>
<p>In the README file in <a href="https://github.com/Microsoft/vscode/">GitHub repository</a> you can find a description on areas where one can contribute.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/K6EvVvYnjrY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Open Source Projects</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-06-18T21:10:01Z</updated>
    <pubDate>2023-06-18T21:10:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/os-projects" />
    <id>https://code-maven.com/os-projects</id>
    <content type="html"><![CDATA[<p>How to contribute to Open Source projects?</p>
<ul>
<li><a href="/how-to-contribute-to-metacpan">Meta::CPAN</a> (Perl, ElasticSearch)</li>
<li><a href="/visual-studio-code">Visual Studio Code</a> (Electron, TypeScript)</li>
</ul>
<!--
## Questions to answer

* Web site of the project
* Where is its source code? GitHub? Elsewhere?
* Where are the issues/bug-reports/feature-requests handled?
* Which programming languages are used?
* Which major tachnologies are used?
* Is there a document on how to contribute?
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Code Diggers</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-06-17T19:30:01Z</updated>
    <pubDate>2023-06-17T19:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/diggers" />
    <id>https://code-maven.com/diggers</id>
    <content type="html"><![CDATA[<p>Most of the popular programming languages have open source 3rd-party libraries with <a href="/package-registry">library registries</a>.
In the Digger projects we try to collect data about these project and show them in a way that help the users and the potential contributors.</p>
<h2 class="title is-4">What are the goals?</h2>
<p>Each 3rd-party registry provides some meta-data about the projects. e.g. information about the license of the project, the requirements of the projects,
a link the public VCS (Version Control System) of the project. However, many of the libraries don't supply this data. Not including a link to the VCS
makes it unnecessarily difficult to find it and to contribute to the project. Thus one of the first things we try to map is the list of libraries
that do NOT have that link. Then we encourage contributors to find the repos and send a pull-request to include the link.</p>
<p>For the projects where we have a link to the VCS we can also check if they have CI (Continuous Integration) configured.</p>
<p>We can show how important each package is by counting all the other packages that depend on it.</p>
<p>Where it is available we also display the test-coverage report of each project.</p>
<h2 class="title is-4">Why separate projects?</h2>
<p>Each Digger is written in the language of the libraries. Partially because I feel this as a good opportunity to learn the language
and partially because that will make it easier for people who write those 3rd-party libraries to contribute to the respective projects.
In addition each language has tools accessing the the registry and analyzing the code in their language. So writing in the &quot;native&quot; language
gives us access to those tools.</p>
<h2 class="title is-4">Current projects</h2>
<ul>
<li><a href="https://pydigger.com/">Python</a> - <a href="https://github.com/szabgab/pydigger.com">source</a></li>
<li><a href="https://cpan-digger.perlmaven.com/">Perl</a> - <a href="https://github.com/szabgab/CPAN-Digger/">source</a></li>
<li><a href="https://ruby-digger.code-maven.com/">Ruby</a> - <a href="https://github.com/szabgab/ruby-digger">source</a></li>
</ul>
<h2 class="title is-4">Planned projects</h2>
<ul>
<li>
<p>PHP - <a href="https://github.com/szabgab/php-digger">source</a></p>
</li>
<li>
<p><a href="https://rust-digger.code-maven.com/">Rust</a></p>
</li>
<li>
<p>JavaScript / NodeJS <a href="https://github.com/szabgab/jsdigger">source</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Use Docker both as regular user and as root (with or without sudo)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-04-27T07:30:01Z</updated>
    <pubDate>2023-04-27T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-as-regular-user-and-as-root" />
    <id>https://code-maven.com/docker-as-regular-user-and-as-root</id>
    <content type="html"><![CDATA[<p>The problem I encountered with the solution to <a href="https://code-maven.com/creating-file-in-docker-as-the-external-user">create a file on a mounted volume in Docker as the external user (and not as root)</a> was that using a regular user internally made it impossible to execute commands as root. In particular it made it impossible to install packages using the package-management system of the operating system.</p>
<p>This is not a problem during regular software development because you rarely need to install extra system-packages. Most (all?) programming languages have a tool to install their own packages as regular user.
However, there are cases, especially when you first try to create a Docker image to run a particular piece of software, that you will need to install several system-level packages and also run the code of the project that might create files in the current working directory which is mapped to the external disk.</p>
<p>I found two solution for this. Both involves switching between regular user and root user but they work in different ways.</p>
<p>The first solution does not need any extra installation, but you probably need more self-discipline and in a way I feel it is more error-prone.</p>
<p>The second needs us to install <b>sudo</b>.</p>
<h2 class="title is-4">Without sudo</h2>
<p>In this version we return to launching Docker and being user <b>root</b> inside.</p>
<pre><code>$ docker run -it -w /opt -v$(pwd):/opt --name ubu ubuntu:23.04 bash
</code></pre>
<p>Now we are user <b>root</b>. At this time we can install extra packages. e.g. installing <b>less</b>:</p>
<pre><code># apt-get update
# apt-get install -y less
</code></pre>
<p>The we can switch to the regular <b>ubuntu</b> user and work as regular user inside Docker (e.g. create a file in the folder that was mapped to the external disk):</p>
<pre><code># su - ubuntu
$ cd /opt
$ touch hello
</code></pre>
<p>If we would like to install another system-wide package, we need to use <b>exit</b> to leave the <b>ubuntu</b> user, then we can install more packages and can get back
to our regular user again with <b>su - ubuntu</b>. (The <b>-</b> tells Linux to set up the full environment of that user.)</p>
<p>In order to leave the Docker container we need to execute <b>exit</b> twice. First to <b>exit</b> the regular user to become root and then to <b>exit</b> the container.</p>
<h2 class="title is-4">With sudo</h2>
<p>For this solution we need a little-bit of setup. We have the following <b>Dockerfile</b>:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/docker-sudu/Dockerfile">examples/docker-sudu/Dockerfile</a></strong></p>
<pre><code class="language-Dockerfile">FROM ubuntu:23.04
RUN apt-get update &amp;&amp; \
    apt-get install -y sudo &amp;&amp; \
    usermod -aG sudo ubuntu &amp;&amp; \
    echo &quot;ubuntu  ALL=(ALL) NOPASSWD:ALL&quot; &gt;&gt; /etc/sudoers


</code></pre>
<ul>
<li>We install <b>sudo</b>.</li>
<li>Add the user <b>ubuntu</b> to the group that can use sudo.</li>
<li>We add <b>ubuntu</b> to the sudoers file and allow it to execute commands without providing a password.</li>
</ul>
<p>We build the image:</p>
<pre><code>docker build -t myubuntu .
</code></pre>
<p>Then run it as the user <b>ubuntu</b></p>
<pre><code>docker run -it -w /opt -v$(pwd):/opt --name ubu --user ubuntu myubuntu bash
</code></pre>
<p>Now we use it as the regular user <b>ubuntu</b>.</p>
<pre><code>$ touch file_in_mounted_folder
</code></pre>
<p>If we would like to install as system-wide package we can use sudo:</p>
<pre><code>$ sudo apt-get update
$ sudo apt-get install -y less
</code></pre>
<p>When we would like to exit we need to type <b>exit</b> only once.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Creating a file on a mounted volume in Docker as the external user (and not as root)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-04-26T21:00:01Z</updated>
    <pubDate>2023-04-26T21:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/creating-file-in-docker-as-the-external-user" />
    <id>https://code-maven.com/creating-file-in-docker-as-the-external-user</id>
    <content type="html"><![CDATA[<p>For a long time I had this problem that I did not know how to solve:</p>
<p>When you run Docker on a linux host, mount an external folder, all the files created in the docker will be owned by user <b>root</b> on the host file-system.</p>
<p>Finally I think I understood how this works and found a solution. At least a partial solution for Ubuntu and CentOS-based images.</p>
<h2 class="title is-4">The Problem</h2>
<p>Here is the problem again:</p>
<p>I run docker and mount the current folder as /opt inside the container:</p>
<pre><code>$ docker run -it --rm -w /opt -v$(pwd):/opt ubuntu:23.04 bash
</code></pre>
<p>When inside the container I create a file and then exit the container:</p>
<pre><code># touch hello
# exit
</code></pre>
<p>If I look at the ownership of the file on my host computer (which is also Ubuntu):</p>
<pre><code>$ ls -l hello
</code></pre>
<p>I get:</p>
<pre><code>-rw-r--r-- 1 root root 0 Apr 26 20:35 hello
</code></pre>
<p>The file is now owned by user <b>root</b>.</p>
<h2 class="title is-4">Solution</h2>
<p>Add the <b>--user ubuntu</b> parameter to the command:</p>
<pre><code>$ docker run -it --rm -w /opt -v$(pwd):/opt --user ubuntu ubuntu:23.04 bash
</code></pre>
<p>Inside the container create a file and exit:</p>
<pre><code>$ touch world
$ exit
</code></pre>
<p>Outside, on the host, check the ownership:</p>
<pre><code>$ ls -l world
-rw-r--r-- 1 gabor gabor 0 Apr 26 20:38 world
</code></pre>
<p>It is now owned by <b>gabor</b> which is my regular user.</p>
<h2 class="title is-4">Explanation</h2>
<p>In Linux each user has a user id. The user <b>root</b> has the id 0 on every Linux machine and I guess also on macOS, but I have not checked it.
So both on my host computer and inside the Docker container the user <b>root</b> has the same id.</p>
<p>When I ran docker in the first example (without passing the <b>--user</b> parameter), inside the container I became user <b>root</b>.
Any file I created then got the userID 0 as its owner. This is also the user <b>root</b> outside, so that's why the file is owned by
root on the host system.</p>
<p>The first real user on Ubuntu (and I think in general on every Linux and Unix system) will get the id 1000. So the user ID of my
user &quot;gabor&quot; on my host computer has the ID 1000. I could verify this by running the <b>id</b> command on my computer.</p>
<p>The Docker image 23.04 also comes with a default real user account which is called <b>ubuntu</b> and it also has the ID 1000.
When in the 2nd example I used the <b>--user ubuntu</b> flag I entered the container as user <b>ubuntu</b>. If I ran the <b>id</b> command there
I'd see:</p>
<pre><code>$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev)
</code></pre>
<p>showing that this user in the container also has the ID 1000.</p>
<p>I found out about this by listing all the users using the <b>cat /etc/passwd</b> command. It is the last row.</p>
<p>So when I created a file on the mounted volume the file was created as user ubuntu (id 1000) inside the container.
However on my host machine that id belongs to my regular user, so my computer sees that file as own by user gabor (id 1000).</p>
<p>Just as if I created it as my regular user on the host computer.</p>
<p>This solves the problem.</p>
<h2 class="title is-4">Notes and warnings</h2>
<p>If on the host system your ID is not 1000, then this will not work, but you can create a user in the container with the ID you have
and use that username. (See below for CentOs.)</p>
<p>Now that inside the container I am user <b>ubuntu</b> I don't have the privileges of user <b>root</b> so I cannot make changes
to any of the system files. In particular I cannot install any extra software using <b>apt</b>. However, there are at least two ways to solve that.
See <a href="/docker-as-regular-user-and-as-root">Docker as both a regular user and as root (with and without sudo)</a>.</p>
<h2 class="title is-4">CentOS</h2>
<p>After a little pause I though I'll try CentOS as well.</p>
<p>I ran</p>
<pre><code>$ docker run -it --rm -w /opt -v$(pwd):/opt  centos:7 bash
</code></pre>
<p>and then inside the container</p>
<pre><code># cat /etc/passwd
</code></pre>
<p>This showed that all the user IDs are below 1000, they are all system-related users. So I need to create a user.</p>
<p>I created a </b>Dockerfile</b> with the following content:</p>
<pre><code>FROM centos:7
RUN useradd centos
</code></pre>
<p>That RUN command will create a user with the username <b>centos</b>:</p>
<p>Built my own images:</p>
<pre><code>$ docker build -t mycentos .
</code></pre>
<p>Ran docker using that images:</p>
<pre><code>$ docker run -it --rm -w /opt -v$(pwd):/opt --user centos mycentos bash
</code></pre>
<p>Inside the containe I first checked the id then created a file, then exited:</p>
<pre><code>$ id
$ cat /etc/passwd
$ exit
</code></pre>
<p>Outside I checked:</p>
<pre><code>$ ls -l cent
-rw-rw-r-- 1 gabor gabor 0 Apr 26 22:26 cent
</code></pre>
<p>It looks fine.</p>
<h2 class="title is-4">Conclusion</h2>
<p>On Ubuntu there is already a user called <b>ubuntu</b>, on CentOS there is no user, but we can create one easily.
I assume on any other image you would either already had a user or you could create one.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Local development environment for the data.table R project</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-03-20T11:30:01Z</updated>
    <pubDate>2023-03-20T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/local-development-environment-for-r-data-table" />
    <id>https://code-maven.com/local-development-environment-for-r-data-table</id>
    <content type="html"><![CDATA[<p>After the partial success with the <a href="https://code-maven.com/development-environment-for-r-yaml">development environment for R-yaml</a> we tried another R package
called <a href="https://github.com/Rdatatable/data.table">data.table</a>. Eventually we managed to run the tests of this too.</p>
<p>This one actually had a lot of details in the README, but some parts were still missing, or at least were assumed to be obvious, which was not the case for us.</p>
<h2 class="title is-4">Clone the repo</h2>
<pre><code>git clone git@github.com:Rdatatable/data.table.git
cd data.table
</code></pre>
<h2 class="title is-4">Start Docker container</h2>
<pre><code>docker run -it --name data-table --workdir /opt -v$(pwd):/opt r-base:4.2.3 bash
</code></pre>
<h2 class="title is-4">Install external dependencies we'll need</h2>
<pre><code>apt-get update
apt-get install -y pandoc curl libcurl4-gnutls-dev texlive-latex-base texlive-fonts-extra texlive-latex-recommended texlive-fonts-recommended
</code></pre>
<h2 class="title is-4">Install R packages</h2>
<pre><code>Rscript -e 'install.packages(c(&quot;knitr&quot;, &quot;rmarkdown&quot;, &quot;pandoc&quot;, &quot;curl&quot;, &quot;bit64&quot;, &quot;bit&quot;, &quot;xts&quot;, &quot;nanotime&quot;, &quot;zoo&quot;, &quot;R.utils&quot;, &quot;markdown&quot;))'
</code></pre>
<h2 class="title is-4">Run the build</h2>
<pre><code>R CMD build .
</code></pre>
<h2 class="title is-4">Run check on the generated file</h2>
<p>In the README they mention <b>data.table_1.11.5.tar.gz</b>, but probably due to a change in the version number, now we have <b>data.table_1.14.9.tar.gz</b></p>
<p>We can run this</p>
<pre><code>R CMD check data.table_1.14.9.tar.gz
</code></pre>
<p>But if the README is updated with this then it will be out of date soon. Instead there could be an explanation that one needs to look at the generated file.
Alternatively this command would pick up the current file, assuming there is only one of them.</p>
<pre><code>R CMD check $(ls -1 data.table_*)
</code></pre>
<h2 class="title is-4">Exit the Docker container</h2>
<pre><code>exit
</code></pre>
<h2 class="title is-4">Restart the Docker container</h2>
<pre><code>docker container start -i data-table
</code></pre>
<h2 class="title is-4">Remove Docker container</h2>
<pre><code>docker rm data-table
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Setup local development environment for R-yaml</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-03-20T07:30:01Z</updated>
    <pubDate>2023-03-20T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/development-environment-for-r-yaml" />
    <id>https://code-maven.com/development-environment-for-r-yaml</id>
    <content type="html"><![CDATA[<p>One of the participants in <a href="https://osdc.code-maven.com/">Open Source Development Course</a> uses R for her research work. So we decided that in one of the meetings we'll try to explore how to set up local development environment for one of the R-based packages using Docker.</p>
<p>Disclaimer: none of the participants had any experience in contributing to open source projects in R so we might have totally misunderstood how one should set up an environment.</p>
<p>First we looked for a project to play with. Checked the <a href="https://github.com/topics/r?l=r&amp;o=desc&amp;s=stars">r projects</a>, then looked at the <a href="https://github.com/qinwf/awesome-R">awesome-R</a> list and found <a href="https://github.com/vubiostat/r-yaml/">r-yaml</a>. We thought a library dealing with YAML files will be simple to install and test.</p>
<p>One thing we noticed quite quickly is the <a href="https://github.com/vubiostat/r-yaml/issues/125">the compile target was missing from the Makefile</a>. That's however is a minor issue in the documentation.</p>
<p>Then we spent quite a lot of time figuring out why things are failing. After about an hour of failures we felt it would be better to <a href="https://github.com/vubiostat/r-yaml/issues/126">open an issue</a>. Within a few minutes, maybe half an hour we got a response that solved the problem.</p>
<p>So here is how one could create a local development environment in a Docker container:</p>
<h2 class="title is-4">Clone the repo</h2>
<pre><code>git clone git@github.com:vubiostat/r-yaml.git
cd r-yaml
</code></pre>
<h2 class="title is-4">Start Docker container</h2>
<p>Start a Docker container using an image based on R version 4.2.3 that was listed on <a href="https://hub.docker.com/_/r-base">Docker Hub</a>.</p>
<p>Give the container a name &quot;r-yaml&quot; to make it easy to reuse it.</p>
<p>Designate the internal /opt folder as the workdir.</p>
<p>Map the current working directory to the internal /opt</p>
<p>I have not tried it, but I think MS Windows users will have to replace the <b>-v$(pwd):/opt</b> part by <b>-v %cd%:/opt</b> if using cmd or by <b>-v ${PWD}:/opt</b> if using PowerShell.</p>
<p>Run bash in the container.</p>
<pre><code>docker run -it --name r-yaml --workdir /opt -v$(pwd):/opt r-base:4.2.3 bash
</code></pre>
<h2 class="title is-4">Install RUnit</h2>
<p>Inside the container install the R dependency.</p>
<pre><code>Rscript -e 'install.packages(&quot;RUnit&quot;)'
</code></pre>
<h2 class="title is-4">Install the external dependencies</h2>
<pre><code>apt-get update
apt-get install -y texlive-latex-base texlive-fonts-extra texlive-latex-recommended texlive-fonts-recommended
</code></pre>
<h2 class="title is-4">Run the tests</h2>
<pre><code>make check
make test
</code></pre>
<h2 class="title is-4">Exit from the container</h2>
<pre><code>exit
</code></pre>
<p>This will also stop the container.</p>
<h2 class="title is-4">Restart the container</h2>
<p>We can restart the stopped container:</p>
<pre><code>docker container start -i r-yaml
</code></pre>
<h2 class="title is-4">Remove the container</h2>
<p>If we don't need the container any more we can remove it (after we exited and it was stopped).</p>
<pre><code>docker rm r-yaml
</code></pre>
<h2 class="title is-4">Clean the environment</h2>
<pre><code>sudo git clean -dxf
</code></pre>
<p>This will print:</p>
<pre><code>Removing build/
</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>I hope this description will help someone else setting up the environment. I'll also suggest to include this, or something similar in the README file of the project.</p>
<p>This certainly helped me and next time it will be easier to set up a development environment for an R-based project.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>GitHub Actions and Workflows</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-03-19T11:30:01Z</updated>
    <pubDate>2023-03-19T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/github-actions-and-workflows" />
    <id>https://code-maven.com/github-actions-and-workflows</id>
    <content type="html"><![CDATA[<p>I feel a bit cheated. Maybe it is only I who misunderstood things, or maybe GitHub had a bit of a name-mess.</p>
<p>For each GitHub project you can set up something they call <a href="https://docs.github.com/en/actions">GitHub Actions</a>, even the link in every project is called &quot;Actions&quot;.
So if you happen to visit the <a href="https://github.com/szabgab/code-maven.com/">source</a> of the <a href="https://code-maven.com/">Code Maven</a> web site then you'll have a link called <a href="https://github.com/szabgab/code-maven.com/actions">Actions</a>.</p>
<p>However what you see there is actually the output of the <a href="https://docs.github.com/en/actions/using-workflows">GitHub Workflows</a>, or as I see they put it <b>GitHub Actions workflows</b>.</p>
<p>Each such workflow is a combination of some code and some configuration of <a href="https://github.com/actions/">GitHub Actions</a>. However in this sentence the name &quot;GitHub Actions&quot; referred to the building blocks of the workflows.</p>
<p>In a nutshell <b>GitHub Actions</b> refer to two things. The workflows and the building blocks of the workflows.</p>
<p>Earlier, in most of my blog posts and training materials I used the name GitHub Actions to refer to the whole thing, but I'll need to reconsider this to make it easier for people to understand why the actions (workflows) are defined in a folder called workflows and why are they using building blocks that are also called &quot;GitHub Actions&quot; despite not being workflows.</p>
<h2 class="title is-4">Workflows</h2>
<p>A <b>GitHub Actions workflow</b> is something you define in a YAML file in the <b>.github/workflows/</b> folder of your git repository. It can be built from plain commands in Bash or basically any programming language, but it can also use a huge set of building blocks called <b>Actions</b>.</p>
<h2 class="title is-4">Actions</h2>
<p>The Actions provided by Github are all stored in the <a href="https://github.com/actions/">action GitHub organization</a>. Each action is a separate repository.</p>
<p>Everyone can create additional actions that can be private or can used by anyone. There is a whole <a href="https://github.com/marketplace?category=&amp;query=&amp;type=actions&amp;verification=">Marketplace of Actions</a> where you can locate more of these pre-built blocks.</p>
<p>As of this writing on 2023.03.19 there are 17,685 actions in the marketplace and probably there are lot more that were not published to the marketplace.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Setup local development environment and run tests of PHP Twig</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-03-19T10:00:01Z</updated>
    <pubDate>2023-03-19T10:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/local-development-environment-for-php-twig" />
    <id>https://code-maven.com/local-development-environment-for-php-twig</id>
    <content type="html"><![CDATA[<p>I believe that removing obstacles from contribution to an open source project is one of the keys to getting more contributors.</p>
<p>Having a good description of the contribution process and the culture of the development team is crucial, so is making it easy for a new potential developer to set up the local development environment and run the tests of a project locally.</p>
<p>It took me a while to find a PHP project that was simple enough for me to set up on a single Docker image, but after some trial and error I found the <a href="https://twig.symfony.com/">Twig</a> project.</p>
<p>Funnily, only now, after managing the setup and staring to write this post did I realize that it is part of the <a href="https://symfony.com/">Symfony</a> project.</p>
<p>Anyway, I won't bother you with all the failed attempts I had till I get to this:</p>
<h2 class="title is-4">clone</h2>
<p>Clone the <a href="https://github.com/twigphp/Twig">Git repository of Twig</a></p>
<pre><code>git clone git@github.com:twigphp/Twig.git
</code></pre>
<h2 class="title is-4">Docker container</h2>
<p>Start a plain Ubuntu-based docker container in interactive mode and map the current working directory to the /opt directory inside the container.</p>
<p>My host system is itself an Ubuntu Linux machine. The command should also work on macOS.</p>
<p>I have not tried it, but I think MS Windows users will have to replace the &quot;-v$(pwd):/opt&quot; part by ```-v %cd%:/opt</code> if using cmd or by <code>-v ${PWD}:/opt</code> if using PowerShell.</p>
<pre><code>docker run -it --rm --workdir /opt -v$(pwd):/opt ubuntu:22.10 bash
</code></pre>
<h2 class="title is-4">Install PHP and tools</h2>
<p>First we update the list of available Ubuntu packages.</p>
<p>Then we install <b>tzdata</b>. Normally it would ask questions during installation. The two environment variables provide the values to these questions.</p>
<p>Finally we install the command line version of php (no web server is needed for this project), <a href="https://getcomposer.org/">composer</a> which is a package management system for PHP and <a href="https://phpunit.de/">PHP Unit</a>, the testing framework of PHP.</p>
<pre><code>apt-get update
DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata
apt-get install -y php-cli composer php-curl phpunit
</code></pre>
<h2 class="title is-4">Install dependencies</h2>
<p>The projects uses <b>composer</b> to manage its dependencies so this is how we install them.</p>
<pre><code>composer install
</code></pre>
<h2 class="title is-4">Run tests</h2>
<p>Finally we can run the tests.</p>
<pre><code>phpunit
</code></pre>
<h2 class="title is-4">Test results</h2>
<p>As I write this post the tests fail with the following:</p>
<pre><code>Time: 00:01.136, Memory: 36.00 MB

There were 2 failures:

1) Twig\Tests\Cache\FilesystemTest::testWriteFailMkdir
Failed asserting that exception of type &quot;RuntimeException&quot; is thrown.

2) Twig\Tests\Cache\FilesystemTest::testWriteFailDirWritable
Failed asserting that exception of type &quot;RuntimeException&quot; is thrown.

FAILURES!
Tests: 1663, Assertions: 4399, Failures: 2, Skipped: 4.

Legacy deprecation notices (3)
</code></pre>
<p>At this point I could use the editors and IDEs I have on my host system to edit the files of the project and then rerun the tests, but that I'll leave for someone else.</p>
<h2 class="title is-4">Quit the docker container</h2>
<p>It is simple to exit from the Docker container. Because we used the ```--rm</code> flag when we started the container, Docker will automatically remove it.</p>
<pre><code>exit
</code></pre>
<h2 class="title is-4">Clean the git workspace</h2>
<p>Running the composer and phpunit command created some files on the disk, the following command can remove them.
I had to use <b>sudo</b> here as Docker created those files as user root.</p>
<pre><code>sudo git clean -dxf
</code></pre>
<p>In case you were wondering which files and folders were added by those two commands, this was the output of the git clean command:</p>
<pre><code>Removing .phpunit.result.cache
Removing composer.lock
Removing vendor/
</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>I hope this will help someone set up the development environment.</p>
<p>As I think this information should be part of the project I'll open an issue pointing to this article and offering to send a Pull-Request to add the content of it to their documentation.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Simple command-line counter with file storage in R</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-02-10T14:30:01Z</updated>
    <pubDate>2023-02-10T14:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/simple-counter-with-r" />
    <id>https://code-maven.com/simple-counter-with-r</id>
    <content type="html"><![CDATA[<p>I have been learning R and preparing <a href="https://code-maven.com/slides/r/">examples for R</a>. One of the fun small script I created is also part of the <a href="/counter">counter example series</a>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/r/counter.R">examples/r/counter.R</a></strong></p>
<pre><code class="language-r">filename = &quot;count.txt&quot;
count = 0

if (file.exists(filename)) {
    as.numeric(readLines(filename)) -&gt; count
}

count &lt;- count + 1

cat(count, end=&quot;\n&quot;)

fh &lt;- file(filename, &quot;w&quot;)
cat(count, end=&quot;\n&quot;, file = fh)
close(fh)



</code></pre>
<p>After <a href="https://cran.r-project.org/">installing R</a> we can run this script by typing in</p>
<pre><code>Rscript counter.R
</code></pre>
<p>In R there are at least 3 ways to assign a value to a variable. One can use the boring <b>=</b> sign as we have in the first two assignments.
We can also use the left arrow <b>&lt;-</b> and we can also use the <b>-&gt;</b>. In this script I used all 3, just to demo them. I think in a real script I'd stick to boring <b>=</b>, but as I can see code written by others, the also like to use the other signs.</p>
<p>The <b>file.exists</b> and the <b>readLines</b> functions seem to have very descriptive names.</p>
<p>The <b>as.numeric</b> function converts a string or &quot;characters&quot; as they are called in R to a number or &quot;numeric&quot; as it is referred to in R.</p>
<p><b>cat</b> is a similar to <b>print</b>, but as I understand it is more generic function. Among other things it does not &quot;number&quot; the output lines. It also accepts various parameters such as the <b>end</b> parameter and the <b>file</b> parameter.</p>
<p>The <b>file</b> function with the <b>w</b> parameter opens the file for writing and returns a filehandle. We then use <b>cat</b> and direct its output to the file. At the end we <b>close</b> the file.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Counter Example: Improved Vanilla JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-01-31T10:00:01Z</updated>
    <pubDate>2023-01-31T10:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/improved-vanilla-javascript-counter" />
    <id>https://code-maven.com/improved-vanilla-javascript-counter</id>
    <content type="html"><![CDATA[<p>This code is part of the <a href="/counter">counter example</a> project. It is an impoved version of the <a href="/vanilla-javascript-counter">Vanilla JavaScript counter</a> I posted a while ago.
This version was posted by <a href="https://dev.to/jonrandy">Jon Randy</a> as a reply to my <a href="https://dev.to/szabgab/counter-example-vanilla-javascript-1n6l">post on dev.to</a>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/improved-vanilla-javascript-counter.html">examples/javascript/improved-vanilla-javascript-counter.html</a></strong></p>
<pre><code class="language-html">&lt;form&gt;
  &lt;input id=&quot;counter&quot; type=&quot;button&quot; value=&quot;0&quot;&gt;
  &lt;input type=&quot;reset&quot;&gt;
&lt;/form&gt;

&lt;script&gt;
const form = document.forms[0]
const increment = () =&gt; console.log(++form.counter.value)
const reset = () =&gt; form.counter.value = 0

form.addEventListener('reset', reset)
form.counter.addEventListener('click', increment)
&lt;/script&gt;


</code></pre>
<p><a href="examples/javascript/improved-vanilla-javascript-counter.html">view</a></p>
<p>A few notes as I am trying to understand this example:</p>
<ul>
<li>The <b>value</b> attribute of an <b>input</b> element of <b>type=&quot;button&quot;</b> is the value shown by the browser on the button.</li>
<li>I am still not used to the fat-arrow notation of creating anonymous functions in JavaScript that are then assigned to a variable. <b>() =&gt; code</b> is a function definition.</li>
</ul>
<p>It is indeed a very nice use of the various default capabilities of HTML and JavaScript.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Static Site Generator</title>
    <summary type="html"><![CDATA[Create a Static Site Generator. It is easy and fun.]]></summary>
    <updated>2023-01-29T11:30:01Z</updated>
    <pubDate>2023-01-29T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/static-site-generator" />
    <id>https://code-maven.com/static-site-generator</id>
    <content type="html"><![CDATA[<p>There are plenty of Static Site Generator (SSGs) already, but it is also a fun project to implement as an exercise.</p>
<p>A few of the most popular SSGs are</p>
<ul>
<li><a href="https://jekyllrb.com/">Jekyll</a> written in Ruby</li>
<li><a href="https://gohugo.io/">Hugo</a> written in Go</li>
<li><a href="https://docusaurus.io/">Docusaurus</a></li>
</ul>
<p>Jamstack has a <a href="https://jamstack.org/generators/">collection of 347 SSGs</a> with various details categorized by language.</p>
<h2 class="title is-4">Description</h2>
<p><b>Version 1</b>: The user writes Markdown files and the proccsor generates HTML pages.</p>
<p><b>Version 2</b>: The Markdown files can have some meta data at the top of the file. E.g called &quot;front matter&quot; Similar to what <a href="https://dev.to/">DEV.to</a> allows.</p>
<p>Start implementing one of the fields and then one-by-one add the additional fields.</p>
<pre><code>---
title: The title of the post
published: false
author: Name of the author
description: A short description of the article.
tags: some, words, or, even, multi word expressions
published_at: 2023-01-29T11:30:01
series: some-name
---

Here comes the content of the article.
</code></pre>
<p>This information is displayed on the web page.</p>
<p>The <b>title</b> is going to be both the HTML <b>title</b> tag in the head and the <b>h1</b> element of the page.</p>
<p>The articles that have <b>published: true</b> are actually published. The ones that have <b>published: false</b> are considered drafts.</p>
<p>The <b>published_at</b> field can be used to create a page listing all the articles in the order the were published.</p>
<p>The generated front page could display the 3 most recently published articles.</p>
<p>The <b>description</b> can be the content of the HTML <b>meta</b> tag called <b>description</b>. (Look at the source of the current page.)</p>
<p>The <b>tags</b> can be used to crete pages, eg. <b>t/some</b> listing all the articles that have the same tag. There can also be a page called <b>/tags</b> listing all the tags and the number of articles with that tag.</p>
<p><b>Version 3</b>:</p>
<p>Add a config file e.g. <b>config.yaml</b> that will contain some configuration information about the whole site. e.g.</p>
<pre><code>title: The title of the site (on the main page)
front_limit: 3    (The number of articles to show on the front page)
</code></pre>
<p><b>Version 4</b>:</p>
<p>Find other interesting features of the other processors list above.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Download charts from Google Forms on Ubuntu Linux</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-01-10T09:30:01Z</updated>
    <pubDate>2023-01-10T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/download-charts-from-google-forms" />
    <id>https://code-maven.com/download-charts-from-google-forms</id>
    <content type="html"><![CDATA[<p>If you run a survey using <a href="https://forms.google.com">Google forms</a> it will create a report with the results. For questions where people need to select one
or more values you will see a pie-chart showing the results. You might want to download save these charts and then use it on a web site or in a presentation.</p>
<p>I found two options:</p>
<h2 class="title is-4">Screenshot</h2>
<p>The first one is to create a screenshot of the chart. I just click on the <b>Print Screen</b> button of my keyboard. Some tool opens that allows me to select an area of the screen.
Then when I press enter in creates a screenshot and saves it in <b>~/Pictures/Screenshots/</b> as a <b>png</b> image. This is the result from a recent survey I ran among the participants
of my <a href="https://osdc.code-maven.com/">Open Source Development Course</a> particpants. The image that was saved was 31,362 bytes.</p>
<img src="/img/how-well-do-you-know-github-2023-01-screenshot.png" alt="how well do you know GitHub" />
<h2 class="title is-4">Copy to clipboard and save from there</h2>
<p>The other option is to use that <b>copy</b> button we see in the top-right corner of each chart. When we click on it the chart is copied to the clipboard.
We can  paste that directly into an email or a document (I tried LibreOffice document, but I assume it would also work in Microsoft word and in Google docs.)</p>
<p>I can also us the <b>xclip</b> command to save the content of the clipboard in a file as was described in the <a href="/save-clipboard-to-file-in-ubuntu">Save clipboard</a> post.</p>
<pre><code>xclip -selection clipboard -t text/html -o &gt; downloaded.html
</code></pre>
<p>The result was a file of 167,501 bytes tha looked like this:</p>
<pre><code>&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
&lt;img
   src=&quot;data:image/png;base64,iVBORw0KGgoAAAA...mCC&quot;
   alt=&quot;Forms response chart. Question title: How well do you know GitLab?. Number of responses: 11 responses.&quot;
   id=&quot;docs-internal-guid-cf3e7410-7fff-8a73-7757-c27f09525278&quot;&gt;
</code></pre>
<p>It contains a png image in base64 encoding. I included the whole thing</p>
<p>I included it here, in this html file. If you click on view-source, you'll see the whole image in base64. It looks like  one line from <b>The Matrix</b>.</p>
<p><img width="1000" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACJQAAAOcCAYAAAASRHlhAAAgAElEQVR4XuzdBbgU5dvH8Vv9i0UKCAoioQiIdHcj3a10Spd0SHd3h3SHdHenAiZKCEgIgonIO/f47pydPbtndw7ILvh9ruu9/i+7z8w885nZPV7X/Pa+n7pvDGEggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIPD/Ak8RKOFeQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEHAXIFDC/YAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYEAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCBgEyBQwg2BAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggYBMgUMINgQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIGATIFDCDYHAEyhw48YN+eabb21nljlzJp9n+v335+THH3+03o8WLZqkSPF2SMhcvnxZzp+/YK3lueeekzRp3g2JtbGI0BI4evSY/PXXX9aikiRJLHHixAmtRbIaBBBwJHDnzh05ffqMbZu0adNIlChRHO2HyQgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIOBcgECJczO2QCDkBVatWi0tWra2rfPst1/5XHeXLt1k7rz51vtZs2SR+fPnhMR5Tpo8Rfr3H2itJUGC12TXzu0hsTYWEVoCadKml9u371iL6t+/r1StUjm0FslqEEDAkYAGxcpXqGTbZueOrZIwYUJH+2EyAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIOBcgUOLcjC0QCHkBAiUhf4lY4L8gQKDkX0BllwgEWYBASZAvAIdHAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQ+E8LEChxcPn/+OMPSZEytW2Lj9q3kyZNGjnYS/ipa9aslabNWtje+HT1CkmVKtUD7ZeN/7sCBEr+u9f+v3zmBEr+y1ff+7nfvXtXdu7cZf7fiZMn5cKFi3Lr1i2zNZK29ooRI7okS5ZMtIVKnjy5JV3atJFC3LVrt/Ts2Ut+uHRJ0qVLK4MHDZAECRJEal/+Ntq+fYfUrlPPNm3pkkWSPn06f5tG+H73Hj1l9uywylTRokWVE8ePPtA+H8bGwQyUfP75KdG/p4cOH5Zz586b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BEiABEggMAg0yvamTKwy1unbo4ExW86CBEiABEiABCKXwH9Pn8jVAR3l/uYVHh34ldotJOXH30m0GBSFehRsAHYGNxiUxujUqZOgbA2DBEiABEiABEiABEggsAlQUBLY68vZkQAJkAAJkECECDx89tDiTFJbjt48FqF+eDEJkAAJkEBwEXg7TxsZWf7r4Jo0Z0sCJEACJEACkUjgwfa1cnPycItbyb4IjRqvSFlJ+vaHEq/oGxHqhxcHD4Hu3bsLSv5MnDjRWjImeGbPmZIACZAACZAACZBA8BGgoCT41pwzJgESIAESIAGXCLz474W0WNVOfj23zqX2bEQCJEACJEACRgJd8neUoWW/JBQSIAESIAESIAEvEniwbY3cWTRFIDBxJxJWbSiJm3SRuPmKuXMZ2wY5AZS7qVmzpqRKlUo2bdoksWLFCnIinD4JkAAJkAAJkAAJBD4BCkoCf405QxIgARIgARIIF4FPtn8mYw+yHnK44PEiEiABEiABRWBImS+ka4FOpEECJEACJEACJOBlAs9v/iP/rpkvEJg8u3lNXvx7W57fuCrRYseR6K8kkRiJLP+fPI0krNJAElaqL9ETJvJyRuw+EAmsW7dOjhw5IsWLF5fSpUsH4hQ5JxIgARIgARIgARIgARMBCkq4JUiABEiABEiABMIQmHl8jnTf2ItkSIAESIAESCBCBKJJNFlU9xcp/ypt9CMEkheTAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQBQQoKAkCqBzSBIgARIgARLwZQLbLu2QeksbC0reMEiABEiABEggogQSxX5FNjdZK5kTZYpoV7yeBEiABEiABEiABEiABEiABEiABEiABEiABEggEglQUBKJsDkUCZAACZAACfg6gRO3TkrVBbXk36f3fD1V5kcCJEACJOBHBLIlfk02NlkjCWMl8KOsmSoJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJBDcBCkqCe/05exIgARIgARKwErjx8IaUm1dVLt2/TCokQAIkQAIk4HECVTJUlLm1Z0q0aNE83jc7JAESIAESIAESIAESIAESIAESIAESIAESIAES8DwBCko8z5Q9kgAJkAAJkIDfEXj8/LHUWFRPDlw75He5M2ESIAESIAH/IdCrSA8Z8Ho//0mYmZIACZAACZAACZAACZAACZAACZAACZAACZBA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JEACJEACJEACUUSgTLpSsrz+wigancOSAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQgG8ToKDEt9eH2ZEACZAACQQogR8OjpdPt38eoLPjtEiABEiABEjAfwhsaLRaCqcq6D8JM1MSIAESIAESIAESIAESIAESIAESIAESIAESiCQCFJREEmgOQwIkQAIkQAKawJPnTyT3z4XpTsItQQIkQAIkQAI+QKBapsryS60ZPpAJUyABEiABEiABEiABEiABEiABEiABEiABEiAB3yJAQYlvrQezIQESIAESCAIC4/+YJH239g+CmXKKJEACJEACJOAfBLY13Sh5kufyj2SZJQmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAlEEgEKSiIJNIchARIgARIgARB48d8LyT+9mFy6f5lASIAESIAESIAEfIRAg2z1ZHLVCT6SDdMgARIgARIgARIgARIgARIgARIgARIgARIgAd8gQEGJb6wDsyABEiABEggSAstOr5C2azoGyWw5TRIgARIgARLwDwLRJJocaLVLMibK4B8JM0sSIAESIAESIAESIAESIAESIAESIAESIAESiAQCFJREAmQOQQIkQAIkQAKaQO3FDWT75Z0EQgIkQAIkQAIk4GMEWudqIaMrjvSxrJgOCZAACZAACZAACZAACZAACZAACZAACZAACUQdAQpKoo49RyYBEiABEggyAidunZSSc8oF2aw5XRIgARIgARLwDwIxosWQP9rslbQJ0vhHwsySBEiABEiABEiABEiABEiABEiABEiABEiABLxMgIISLwNm9yRAAiRAAiSgCXTf2EtmHp9DICRAAiRAAiRAAj5K4J0CneSrMl/4aHZMiwRIgARIgARIgARIgARIgARIgARIgARIgAQilwAFJZHLm6ORAAmQAAkEKYFbj25JrmmF5MmLJ0FKgNMmARIgARIgAd8nEDdGXDnW7ndJEieJ7yfLDEmABEiABEiABEiABEiABEiABEiABEiABEjAywQoKPEyYHZPAiRAAiRAAiDwzf7/Y+8+wKMq0zaO3wkQeu8dRewNEUEBAQFBFFwVdREL6q7oWsCGveNnW10LTUCQJlKlKiA2rDTp0nvvHUJI+c5zYkICmUzKzGTK/92LSzLnnLf83sGVzJ3n/Ug9Zr0NBgIIIIAAAggEucBT9brphSueCfJZMj0EEEAAAQQQQAABBBBAAAEEEEAAAQT8L0CgxP/GjIAAAgggEOEC8YnxOn9IXe06tjvCJVg+AggggAACwS9QIqaEVndeogLkrdyPAAAgAElEQVT5CgT/ZJkhAggggAACCCCAAAIIIIAAAggggAACfhQgUOJHXLpGAAEEEEDABMatnqD7v30QDAQQQAABBBAIEYEhrQeo3ZnXh8hsmSYCCCCAAAIIIIAAAggggAACCCCAAAL+ESBQ4h9XekUAAQQQQCBVoPVX7TR7+1xEEEAAAQQQQCBEBFrXbKkv2w4NkdkyTQQQQAABBBDwp8Arr7yiYcOGuUN07NhRPXr0SDect+v+nBt9I4AAAggggAACCCDgbwECJf4Wpn8EEEAAgYgWWLx7ia4e3SqiDVg8AggggAACoSYQpSit7LxY5QqXDbWpM18EEEAAAQQQ8LGAt8CIt+s+ng7dIYAAAggggAACCCAQUAECJQHlZjAEEEAAgUgTePC7RzVy5ZhIWzbrRQABBBBAIOQFXm34orrWfTjk18ECEEAAAQQQQCB3At4CI96u5250nkYAAQQQQAABBBBAIG8FCJTkrT+jI4AAAgiEscCB4wd01ucXKj4xPoxXydIQQAABBBAIT4E6pc7S7I4/h+fiWBUCCCCAAAIIZFnAW2DE2/UsD8SNCCCAAAIIIIAAAggEoQCBkiDcFKaEAAIIIBAeAp8t/VxPzXwuPBbDKhBAAAEEEIhAgek3T1b9ivUicOUsGQEEEEAAAQRSBLwFRrxdRxIBBBBAAAEEEEAAgVAWIFASyrvH3BFAAAEEglqgxdjr9OfOBUE9RyaHAAIIIIAAAp4F7jn/Tn3Y9D2IEEAAAQQQQCCCBbwFRrxdj2A6lo4AAggggAACCCAQBgIESsJgE1kCAggggEDwCazct0oNvrw6+CbGjBBAAAEEEEAgywJF8hfWmnv/UqH8hbL8DDcigAACCCCAQHgJeAuMeLseXhqsBgEEEEAAAQQQQCDSBAiURNqOs14EEEAAgYAIvPpHD300v1dAxmIQBBBAAAEEEPCfQN8Wn+j2szv4bwB6RgABBBBAIIwFkpKS1KBBA+3Zs8dd5cSJE3XBBRd4XHH79u21dOlS93rt2rU1ffp0j/du2bJFV1+d/IMcxYsX17x585QvX7509yckJGjKlCmaMWOGFi5cqN27d7vXy5Ytq7POOkutWrVSu3btVKxYMY/jeAuMeLsextvL0hBAAAEEEEAAAQQiQIBASQRsMktEAAEEEAisQGJSos7+/CLtid0b2IEZDQEEEEAAAQR8LtCkaiNNbD/G5/3SIQIIIIAAApEi0K1bN02aNMld7ksvvaTOnTtnuPRDhw6pbt26shBKSps9e7Yb/siojR07Vt27d3cvWTCkb9++6W7766+/9Oijj2r9+vWZUleqVElvv/22mjRpkuF93gIj3q5Hyj6zTgQQQAABBBBAAIHwFCBQEp77yqoQQAABBPJQYMbG73XrlE55OAOGRgABBBBAAAFfCvx193xVLlrJl13SFwIIIIAAAhEjMHr0aD377LPuetu0aaNevTKu5vndd9/pgQcecO+LiopygyW9e/dW69atM7R65plnNGZMcujz9ddfV6dOJ/8ebtVIOnbsqOPHj7vXixQpoubNm7tVSWJiYtyQiVUt2bdvn3u9QIEC+uyzz9SoUaPTxvIWGPF2PWI2moUigAACCCCAAAIIhKUAgZKw3FYWhQACCCCQlwL3fdtFX62emJdTYGwEEEAAAQQQ8KHAs/Wf0jOXP+nDHukKAQQQQACByBHYunVravWPcuXKadasWRkuvkePHho0aJBq1arlHl2zZs0a3XvvvXrxxRczvL9p06bavHmze+37779XzZo13d8fOXLEDa7YuNauuOIK9ezZ87RKJ3afVTiZOnWqe5/NzfopWrRouvG8BUa8XY+cnWalCCCAAAIIIIAAAuEoQKAkHHeVNSGAAAII5JnAgeMHdNbnFyo+MT7P5sDACCCAAAIIIOBbgUpFKsqqlNhPS9MQQAABBBBAIPsCLVq0SD16xiqRWGjk1NauXTvZMTXt27d3L02cOFEXXHCB+89TW9qQSvXq1fXjjz+m3mKVRv7v//7P/bpq1ar65ptvTguJpNwcFxcnG3f16tXuS0899ZQeeuihdMN5C4x4u559LZ5AAAEEEEAAAQQQQCB4BAiUBM9eMBMEEEAAgTAQGLh0sJ6cmVzKl4YAAggggAAC4SMwof1oXV21cfgsiJUggAACCCAQQIGXX35Zw4cPd0d855131KFDh3SjHzx4UJdddpl7zM1LL72khIQENxQSHR2tP//8U8WLF093//jx4/Xkk8nVw+644w698cYbqdfThlfefPNN/fOf/8x0pXZsjh2fY+28887T5MmT093v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CBAgQIAAAQIECBAgQIAAAQLLERAoWY6avyFAgAABAgQIEBiPwNzxFi55MuLs4XYdijjzVH+9cmQ89YZ215nbIjbtjZjZF3HDre1RNQfb1+2z2QNDm9Q8BAgQIECAAAECBAgQIECAAAECBAgQIDBmAYGSMQO7PQECBAgQIECAwIgEuhNMLgdMWtDk/LHXX/OnRlRkFdxm0/4roZEWHHktNHI5RNIuLwIECBAgQIAAAQIECBAgQIAAAQIECBAgMCIBgZIRQboNAQIECBAgQIBAosDifB8wOXclaHLuaER32kn32YUXI/5zul1n+q+rvDbuiFi/pV2b27U1YkP3dbum2/cb2veXP7/yWffe/dwjaqpsTx8ECBAgQIAAAQIECBAgQIAAAQIECBAYvIBAyeBXbEACBAgQIECAAIHXCSzMXQmYdCGTdl1sQZPLgZPu67PtV5feOtjUdMQ11/bX2v99X98+v+6NP193w1u/v98kQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAi/fiALAAAI7UlEQVQQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCgiUVN2MvggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQICJUnwyhIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEqgoIlFTdjL4IECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkCAiVJ8MoSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBKoKCJRU3Yy+CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJAgIlSfDKEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSqCvwXXTr6XxX/essAAAAASUVORK5CYII="
alt="Forms response chart. Question title: How well do you know GitHub? . Number of responses: 11 responses."
id="docs-internal-guid-20551208-7fff-552c-a75b-92ec46d53c2c"></p>
<h2 class="title is-4">Converting bas64 to png</h2>
<p>I edited the downloaded html file and removed everything except the string representing the image:</p>
<pre><code>iVBORw0KGgoAAAA...mCC
</code></pre>
<p>Then ran</p>
<pre><code>base64 -d downloaded.html &gt; out.png
</code></pre>
<p>The resulting file size was 125,402 bytes and this is the file:</p>
<img width="1000" src="/img/how-well-do-you-know-github-2023-01.png" alt="how well do you know GitHub" />
<p>I could then resize the image to make it smaller. Both at it is too high and wide and it is also a lot of bytes.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Save content of clipboard to file in Ubuntu Linux</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-01-10T09:00:01Z</updated>
    <pubDate>2023-01-10T09:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/save-clipboard-to-file-in-ubuntu" />
    <id>https://code-maven.com/save-clipboard-to-file-in-ubuntu</id>
    <content type="html"><![CDATA[<p>I used Google Forms for a survey and wanted to save the generated graphs. They have a &quot;copy&quot; button that copies the graph to the clipboard.
I was not sure what is really in the clipboard and how to save it. After some search and experimenting I found this command to be working:</p>
<pre><code>xclip -selection clipboard -t text/html -o &gt; out.html
</code></pre>
<p>It saved the content of the clipboard the <b>out.html</b>. The format looked like this:</p>
<pre><code>  &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
  &lt;img src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAC...
</code></pre>
<p>So there is an <b>png</b> image in base64 format.</p>
<p>If we open the HTML file in a browser we can see the image.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Counter Example: Vanilla JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-01-03T16:30:01Z</updated>
    <pubDate>2023-01-03T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/vanilla-javascript-counter" />
    <id>https://code-maven.com/vanilla-javascript-counter</id>
    <content type="html"><![CDATA[<p>This code is part of the <a href="/counter">counter example</a> project. If you are looking for the buzz-words for this project then this is a Single Page Application implemented using HTML5
and Vanilla JavaScript.</p>
<p>It has two buttons.</p>
<ol>
<li>
<p>One of them is a counter. Every time you click on it the value on it will increase by one.</p>
</li>
<li>
<p>The other one is a reset button.</p>
</li>
</ol>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/vanilla-javascript-counter.html">examples/javascript/vanilla-javascript-counter.html</a></strong></p>
<pre><code class="language-html">&lt;button id=&quot;counter&quot;&gt;0&lt;/button&gt;
&lt;button id=&quot;reset&quot;&gt;Reset&lt;/button&gt;
  
 
&lt;script&gt;
function increment_counter() {
    let counter = document.getElementById('counter').innerHTML;
    counter++;
    console.log(counter);
    document.getElementById('counter').innerHTML = counter;
}

function reset_counter() {
    console.log('reset');
    document.getElementById('counter').innerHTML = 0;
}

document.getElementById('counter').addEventListener('click', increment_counter);
document.getElementById('reset').addEventListener('click', reset_counter);
&lt;/script&gt;


</code></pre>
<p><a href="examples/javascript/vanilla-javascript-counter.html">view</a></p>
<p>At the top of the file we have two HTML buttons. Both have IDs for easier identification.</p>
<p>The JavaScript code has two functions and then two calls to <strong>document.getElementById</strong>.  These two calls will locate the HTML element with the ID given as a parameter and then connect a function to the &quot;click&quot; event  of each one of them. These are the two functions we have.</p>
<p>This means that when the user clicks on the HTML element with the ID <strong>counter</strong> the function <strong>increment_counter</strong> will be executed and when the user clicks on the element with the ID <strong>reset</strong> the <strong>reset_counter</strong> function will be called.</p>
<p><img src="/static/img/vanilla-javascript-counter.gif" alt="" /></p>
<p>In this little animated gif you can see the two small buttons at the top and most of the view is taken up by the console where you can see the <code>console.log</code> messages.</p>
<h2 class="title is-4">Reset counter</h2>
<p>The <strong>reset_counter</strong> function is the easier to explain:</p>
<pre><code class="language-javascript">console.log('reset');
</code></pre>
<p>Is only there so we can see on the console of the browser that something happened.
Then we use the call</p>
<pre><code class="language-javascript">document.getElementById('counter')
</code></pre>
<p>to locate the HTML element and innerHTML to set the content of the element to 0.</p>
<h2 class="title is-4">Increment counter</h2>
<p>Here we first copy the content of the HTML element to a variable we cleverly named <strong>counter</strong>.</p>
<p>Then we increment it by one using the <strong>++</strong> operator.</p>
<p>Then we have the <strong>console.log</strong> call. Just so we can see in the console what's happening.</p>
<p>Finally we write back the value the HTML document.</p>
<h2 class="title is-4">Issues</h2>
<p>Keeping our data (the counter) as part of the HTML is probably not a very good idea in a project more complex than this one. However, in this case it has the advantage that we don't need to think how we keep our data (which is normally in JavaScript) in sync with the display (which is the HTML).</p>
<p>This counter is also not persistent. If you reload the page the counter will be reset.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Backup your LinkedIN data!</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2023-01-02T09:00:01Z</updated>
    <pubDate>2023-01-02T09:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/backup-your-linkedin-data" />
    <id>https://code-maven.com/backup-your-linkedin-data</id>
    <content type="html"><![CDATA[<p>It's all nice to have all my data in the cloud, but I also like to back it up. In case I get locked out or who knows what happens.</p>
<p>For example, I have a reminder every month to back up my data from LinkedIn. Primarily the list of my connections though now that I am writing this I'll also check how could I backup all my other data from LinkedIn.</p>
<p>This backup is kept in a private git repository on GitHub as well.</p>
<h2 class="title is-4">Here is how I do it:</h2>
<ol>
<li>Visit <a href="https://www.linkedin.com/">LinkedIn</a></li>
<li>Click on &quot;Me&quot; (my avatar in the top right corner)</li>
<li>Click on <a href="https://www.linkedin.com/mypreferences/d/categories/account">Settings &amp; Privacy</a></li>
<li>Click on <a href="https://www.linkedin.com/mypreferences/d/categories/privacy">Data Privacy</a></li>
<li>Click on <a href="https://www.linkedin.com/mypreferences/d/download-my-data">Get a copy of your data</a></li>
<li>I am mostly interested in <b>Connections</b> so I check that box. You might want others as well.</li>
<li>Click on <b>Request Archive</b></li>
</ol>
<p>It will take some time for LinkedIn to prepare the zip file, but they will send you an email with a link.</p>
<p>Once I receive that email I click on the link and download the zipfile which is called  something like <b>Basic_LinkedInDataExport_12-05-2022.zip</b></p>
<h2 class="title is-4">Handle the downloaded file</h2>
<ol>
<li>cd to the workdir of the git repository where I keep my private data</li>
<li><code>unzip</code> the file: <b>unzip ~/Downloads/Basic_LinkedInDataExport_12-05-2022.zip</b></li>
<li>sort the content with <b>sort Connections.csv -o Connections.csv</b></li>
<li>Remove the &quot;empty&quot; rows from the beginning. (For some reason there every time there are a few 10s of rows with only commas. I remove those.</li>
<li>Move the line that starts with <b>First Name</b> to the beginning of the file. This is the header of the file that is moved away by the sort.</li>
<li>Commit the file to git and push it out.</li>
</ol>
<h2 class="title is-4">Automate this?</h2>
<p>I am sure I could automate the process, but I don't think it is worth my time to do so.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CI for Data::Alias in Perl - including threaded perl</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-25T07:30:01Z</updated>
    <pubDate>2022-12-25T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-perl-data-alias" />
    <id>https://code-maven.com/ci-for-perl-data-alias</id>
    <content type="html"><![CDATA[<p><a href="https://cpan-digger.perlmaven.com/">CPAN Digger</a> has a never ending 3rd party Perl libraries, many without any CI configured. This time I picked the one called <a href="https://metacpan.org/dist/Data-Alias">Data::Alias</a>.</p>
<p>At first I sent a &quot;standard&quot; configuration of GitHub Actions, but then I noticed 2 things. Some tests were dependent on some extra modules and some tests needed a threaded Perl. Apparently the one that I used in my &quot;standard&quot; configuration isn't. So In addition to the execution of the CI on Ubuntu, macOS and Windows natively, I've also added another job in which we use a perl-based Docker image and run the tests there. In this case one of the tags I used from <a href="https://hub.docker.com/_/perl">Perl on Docker Hub</a> was the <b>5.36-threaded</b>.</p>
<p>I was happy to see that the tests passed on every platform and on every version of Perl I tried.</p>
<p>I sent the <a href="https://github.com/mvduin/perl-Data-Alias/pull/3">pull-request</a></p>
<h2 class="title is-4">GitHub Actions</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/perl/data-alias/ci.yml">examples/perl/data-alias/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        runner: [ubuntu-latest, macos-latest, windows-latest]
        perl: [ '5.30', '5.36' ]
        exclude:
          - runner: windows-latest
            perl: '5.36'

    runs-on: ${{matrix.runner}}
    name: OS ${{matrix.runner}} Perl ${{matrix.perl}}

    steps:
    - uses: actions/checkout@v3

    - name: Set up perl
      uses: shogo82148/actions-setup-perl@v1
      with:
          perl-version: ${{ matrix.perl }}
          distribution: ${{ ( startsWith( matrix.runner, 'windows-' ) &amp;&amp; 'strawberry' ) || 'default' }}

    - name: Show Perl Version
      run: |
        perl -v

    - name: Install Modules
      run: |
        cpanm -v
        cpanm --installdeps --notest .
        cpanm --notest Devel::CallParser Test::Pod::Coverage Test::Pod

    - name: Show Errors on Windows
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'windows-')}}
      run: |
         ls -l C:/Users/
         ls -l C:/Users/RUNNER~1/
         cat C:/Users/runneradmin/.cpanm/work/*/build.log

    - name: Show Errors on Ubuntu
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'ubuntu-')}}
      run: |
         cat /home/runner/.cpanm/work/*/build.log

    - name: Show Errors on OSX
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'macos-')}}
      run: |
         cat  /Users/runner/.cpanm/work/*/build.log

    - name: Run tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
      run: |
        perl Makefile.PL
        make
        make test


  test-in-container:
    strategy:
      fail-fast: false
      matrix:
        perl: [ '5.30', '5.36', '5.36-threaded' ]
        # tags from https://hub.docker.com/_/perl

    runs-on: ubuntu-latest
    name: Perl ${{matrix.perl}}
    container: perl:${{matrix.perl}}

    steps:
    - uses: actions/checkout@v3

    - name: Show Perl Version
      run: |
        perl -v

    - name: Install Modules
      run: |
        cpanm -v
        cpanm --installdeps --notest .
        cpanm --notest Devel::CallParser Test::Pod::Coverage Test::Pod

    - name: Show Errors on Ubuntu
      if:  ${{ failure() }}
      run: |
         cat /home/runner/.cpanm/work/*/build.log

    - name: Run tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
      run: |
        perl Makefile.PL
        make
        make test


</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>Sometimes you need more than one job even for stand-alone 3rd-party libraries.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CI for perl5-MIME-Types</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-24T07:30:01Z</updated>
    <pubDate>2022-12-24T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-perl5-mime-types" />
    <id>https://code-maven.com/ci-for-perl5-mime-types</id>
    <content type="html"><![CDATA[<p>After the heavy-lifting of the previous entry in the Daily CI series this was a very easy task. Looking at <a href="https://cpan-digger.perlmaven.com/">CPAN Digger</a> I saw <a href="https://metacpan.org/dist/MIME-Types">MIME-Types</a>. That sounded like a simple Perl module and indeed adding CI was straight forward.</p>
<p><a href="https://github.com/markov2/perl5-MIME-Types/pull/14">Pull-request</a></p>
<h2 class="title is-4">Conclusion</h2>
<p>There are many projects that are low-hanging fruits where you can add GitHub Actions in a matter of minutes and get the benefits immediately.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CI using timescaledb a PostgreSQL based time series database</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-23T10:30:01Z</updated>
    <pubDate>2022-12-23T10:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-timescaledb" />
    <id>https://code-maven.com/ci-for-timescaledb</id>
    <content type="html"><![CDATA[<p>A couple of days ago while browsing the <a href="https://ruby-digger.code-maven.com/">Ruby Digger</a> I bumped into the <a href="https://rubygems.org/gems/timescaledb">timescaledb Ruby Gem</a>. It had a <b>.travis.yml</b> file indicating a Travis-CI configuration, but Travis stopped providing free service to open source projects and I already found out that this file is part of the Ruby gem skeleton, so  its existence now does not mean much. Not even that it ever worked.</p>
<p>It took me quite a while and some back-and-forth with the author to make GitHub Actions work and even now some of the tests are failing. Here is what happened:</p>
<h2 class="title is-4">Cloning</h2>
<p>As always I started by cloning the <a href="https://github.com/jonatas/timescaledb">timescaledb</a> git repository.</p>
<pre><code>git clone git@github.com:jonatas/timescaledb.git
cd timescaledb
</code></pre>
<p>Then I forked the repository on GitHub and added my fork as another remote:</p>
<pre><code>git remote add fork git@github.com:szabgab/timescaledb.git
</code></pre>
<h2 class="title is-4">Using PostgreSQL as a service</h2>
<p>At the beginning I thought the module needs a PostgreSQL database to run. As I did not have an example ready first I created an example of using <a href="https://code-maven.com/slides/docker/docker-compose-postgresql-server">PostgreSQL as a service in docker compose</a>.</p>
<p>Then I created an example <a href="https://github.com/szabgab/github-actions-postgresql/">PostgreSQL as a service in GitHub Actions</a></p>
<p>With that armed I could create the first version of the GitHub Action for this Ruby Gem.</p>
<p>There at first I had some typos. What an unnecessary waste of time!</p>
<h2 class="title is-4">.env</h2>
<p>Then, when finally I managed to get the syntax right and fixed the typos I git this error:</p>
<pre><code>Errno::ENOENT: No such file or directory @ rb_sysopen - /__w/timescaledb/timescaledb/.env
</code></pre>
<p>Fail enough, even the README told me to create a <b>.env</b> file with content that looks like this:</p>
<pre><code>PG_URI_TEST=&quot;postgres://&lt;user&gt;@localhost:5432/&lt;dbname&gt;&quot;
</code></pre>
<p>So I added the following to the CI configuration file:</p>
<pre><code>echo PG_URI_TEST=&quot;postgres://username:secret@database:5432/testdb&quot; &gt; .env
</code></pre>
<p>This made some progress and this time I got a different error:</p>
<pre><code>PG::UndefinedFunction: ERROR:  function create_hypertable(unknown, unknown, chunk_time_interval =&gt; interval) does not exist
</code></pre>
<p>I did not know what to do. I thought I am not using the correct version of Ruby or PostgreSQL so I experimented with that a bit.
Added code to print out the version number of PostgreSQL:</p>
<pre><code>echo &quot;SELECT version()&quot; | psql -h postgres -U username testdb
echo &quot;SELECT CURRENT_TIME&quot; | psql -h postgres -U username testdb
</code></pre>
<p>even added this line:</p>
<pre><code>tsdb postgres://username:secret@postgres:5432/&lt;dbname&gt; --stats
</code></pre>
<h2 class="title is-4">Timescale DB</h2>
<p>Slowly I understood that instead of a vanilla PostgreSQL database I need to use to use <a href="https://www.timescale.com/">Timescale</a> which is based on PostgreSQL. I am sure others would have come to this conclusion much faster than I did.</p>
<p>So I switched to use a <a href="https://hub.docker.com/r/timescale/timescaledb">timescaledb Docker image</a>.</p>
<p>This too involved several trials and errors, but I won't bore you with my small mistakes.</p>
<p>Instead I got this error:</p>
<pre><code>Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name =&gt; spell_checker)' has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)' instead.
rake aborted!
Gemika::UnsupportedRuby: No gemfiles were compatible with Ruby 3.1.3
</code></pre>
<p>OK, so apparently it does not work with the latest version of Ruby.</p>
<p>then I got this error</p>
<pre><code>Gemika::UnsupportedRuby: No gemfiles were compatible with Ruby 2.7.7
</code></pre>
<p>Finally I settled with Ruby 2.7.1.</p>
<p>By this time a lot of tests seemed to have passed, but I got the following error:</p>
<pre><code>PG::InvalidSchemaName: ERROR: schema &quot;toolkit_experimental&quot; does not exist
</code></pre>
<p>This was the time when I decided to open an <a href="https://github.com/jonatas/timescaledb/issues/36">issue</a>.</p>
<h2 class="title is-4">TimescaleDB-HA</h2>
<p>The author quickly replied and suggested I use the <a href="https://hub.docker.com/r/timescale/timescaledb-ha">timescaledb-ha Docker image</a>.</p>
<p>I tried and failed and then tried another tag and after a while the tests started to fail at a new location. I even added several different tags so we will be able to see if any of those work, but no.</p>
<p>However it seems we are left with only two tests failing. So I pasted the failure reports to the <a href="https://github.com/jonatas/timescaledb/issues/36">open issue</a>.</p>
<p>At this point the author suggested I send the PR and he'll try to deal with these failures. So I sent the <a href="https://github.com/jonatas/timescaledb/pull/37">pull-request</a>.</p>
<h2 class="title is-4">GitHub Actions</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ruby/timescaledb/ci.yml">examples/ruby/timescaledb/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
#  schedule:
#    - cron: '42 5 * * *'

jobs:
  test-in-container:
    strategy:
      fail-fast: false
      matrix:
        ruby: [ '2.7.1' ]
        database:
          - 'pg14.6-ts2.9.0-patroni-static-primary-latest'
          - 'pg14-patroni-static-primary-latest'
          - 'pg14.6-ts2.9.0-patroni-static-primary-p0'
          - 'pg14.6-ts2.9-oss-latest'
          - 'pg13.9-ts2.9-latest'

    services:
      database:
        image: timescale/timescaledb-ha:${{matrix.database}}
        env:
          POSTGRES_USER: username
          POSTGRES_PASSWORD: secret
          POSTGRES_DB: testdb
        options: &gt;-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5


    runs-on: ubuntu-latest
    name: OS Ruby ${{matrix.ruby}} database ${{matrix.database}}
    container: ruby:${{matrix.ruby}}

    steps:
    - uses: actions/checkout@v3

    - name: Show Ruby Version
      run: |
        ruby -v

    - name: Install psql
      run: |
        apt-get update
        apt-get install -y postgresql-client

    - name: Show PostgreSQL version and time
      env:
        PGPASSWORD: secret
      run: |
        echo &quot;SELECT version()&quot; | psql -h database -U username testdb
        echo &quot;SELECT CURRENT_TIME&quot; | psql -h database -U username testdb

    - name: Setup
      run: |
        ./bin/setup

    - name: run tsdb
      run: ./bin/tsdb postgres://username:secret@database:5432/testdb --stats

    - name: Test setup
      run: |
        echo PG_URI_TEST=&quot;postgres://username:secret@database:5432/testdb&quot; &gt; .env
        cat .env
        bundle exec rake test:setup

    - name: Test
      run: bundle exec rake


</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>Wow, this was really tiring even to describe what happened and I left out a lot of the smaller steps as those were primarily my mistakes and lack of reading the README of the project. However at the end I think I managed to put together something that will be useful for the developers and hopefully will also help others to set up CI for other libraries.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Full gas in neutral - CI for prepper</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-22T07:30:01Z</updated>
    <pubDate>2022-12-22T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-prepper" />
    <id>https://code-maven.com/ci-for-prepper</id>
    <content type="html"><![CDATA[<p><b>full gas in neutral</b> is phrase used in Hebrew. It is the idea that you floor the gas pedal in your car while the gear is in neutral. So you urn a lot of gas, but has no useful effect. It is used in many cases where one works really hard, but it has no (positive) impact. Like washing your car while raining or when you turn on the irrigation system while raining.</p>
<p>I was really surprised that my searches for this expression indicated that it is not used elsewhere. I wonder what is the expression in other languages for the same phenomenon.</p>
<h2 class="title is-4">prepper</h2>
<p>So you might guess this was a funny case. A few days ago I tried to add GitHub Actions to the <a href="https://rubygems.org/gems/prepper">prepper</a> Ruby Gem. The tests failed even locally so I <a href="https://github.com/gregmolnar/prepper/issues/1">reported the problem</a>.</p>
<p>Soon the author replied that this Gem does not have any real tests. The only tests that are in the repository are the ones that were generated by <b>bundle</b>, the tool to jump-start the development of a Ruby Gem and for some reason they were failing.</p>
<p>So yes, I could have configure GitHub Action for a Gem that does not have any tests. That would be running the whole CI for every push without it actually checking anything. &quot;full gas in neutral&quot;</p>
<p>The author also indicated that he'll remove the failing test and soon will add real tests. I guess it would not be a total waste to add the GitHub actions now. That way when tests start to arrive to the repository they will be executed.</p>
<p>By the time I actually checked this the author has made the necessary <a href="https://github.com/gregmolnar/prepper/commit/e569f5ed0f5390aae6ce559a80390e40ddbd206c">changes</a> to let the existing test pass.</p>
<p>I went ahead, added the GitHub Actions configuration file and sent the <a href="https://github.com/gregmolnar/prepper/pull/2">pull-request</a>
which the author promptly accepted.</p>
<h2 class="title is-4">GitHub Actions</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ruby/prepper/ci.yml">examples/ruby/prepper/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
#  schedule:
#    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        ruby: [ '3.0' ]

    runs-on: ubuntu-latest
    name: Ruby ${{matrix.ruby}}
    container: ruby:${{matrix.ruby}}

    steps:
    - uses: actions/checkout@v3

    - name: Show ruby Version
      run: |
        ruby -v

    - name: Install Modules
      run: ./bin/setup

    - name: Run tests
      run: rake test


</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>The author also said &quot;thank you&quot; in Hungarian. I could have guessed from his family name, but I was not really focused on who created the library, just wanted to add the Continuous Integration.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CI for the draftjs_html Ruby Gem</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-20T07:30:01Z</updated>
    <pubDate>2022-12-20T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-draftjs-html" />
    <id>https://code-maven.com/ci-for-draftjs-html</id>
    <content type="html"><![CDATA[<p>It took me quite a few failed attempts on various Ruby Gems found on the <a href="https://ruby-digger.code-maven.com/">Ruby Digger</a> till I found one that passed its tests. I reported the failures for the others, but this is getting a bit frustrating.</p>
<h2 class="title is-4">Default setup</h2>
<p>I noticed that many Ruby Gems have the same instructions to set up the development environment and to run the tests. I guess this means they used some tool to generate the skeleton of the project that automatically created the <code>bin/setup</code> shell script and the test spec files that  could be filled.</p>
<p>One one hand this is good as it probably encourages people to start writing test-specs.</p>
<p>On the other hand having a bash script to execute <code>bundle install</code> means we cannot use this on Windows natively. So for Windows we need different instructions. I think this isn't such a good idea.</p>
<h2 class="title is-4">Travis-CI</h2>
<p>It seems that the script creating the Ruby Gem skeleton also include a configuration file for Travis-CI. Unfortunately Travis-CI does not work any more for free so this file just sits there and has no purpose. It even causes confusion because it gives the feeling that the the tests worked at least once in Travis, even for Ruby projects that were created after Travis-CI stopped its public service.</p>
<h2 class="title is-4">GitHub Actions</h2>
<p>Anyway, for this particular Ruby Gem the instructions worked so I could configure GitHub Actions and send a <a href="https://github.com/dugancathal/draftjs_html/pull/4">pull-request</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/draftjs-html/ci.yml">examples/draftjs-html/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
#  schedule:
#    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        ruby: [ '3.0' ]

    runs-on: ubuntu-latest
    name: Ruby ${{matrix.ruby}}
    container: ruby:${{matrix.ruby}}

    steps:
    - uses: actions/checkout@v3

    - name: Show ruby Version
      run: |
        ruby -v

    - name: Install Modules
      run: |
        ./bin/setup

    - name: Run tests
      run: |
        rake spec



</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>There are many projects that don't have working CI (maybe have a Travis-CI configuration, but that does not do anything now), and their tests fail. I am actually a bit surprised about this even though this is one of the reasons I think it is important to have a functioning CI set up, so that you will be reminded if you forget to run the tests and they break.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CI for Plack-Middleware-LogAny</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-19T22:30:01Z</updated>
    <pubDate>2022-12-19T22:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-plack-middleware-logany" />
    <id>https://code-maven.com/ci-for-plack-middleware-logany</id>
    <content type="html"><![CDATA[<p>Today I spent about 3-4 hours on various other projects. Managed to make good progress on some really interesting ones, but could not finish the CI for either one of them. I opened GitHub Issues reporting the problems, but I still could not get either of them done.</p>
<p>Finally I found this Perl module called <a href="https://metacpan.org/dist/Plack-Middleware-LogAny">Plack-Middleware-LogAny</a>.</p>
<p>I copied the CI file from <a href="https://metacpan.org/dist/Plack-Middleware-Greylist">Plack-Middleware-Greylist</a> that I created on <a href="https://code-maven.com/ci-for-two-perl-projects">day 9</a>.</p>
<p>The only difference is that this one passes on Windows as well.</p>
<p>I sent the <a href="https://github.com/XSven/Plack-Middleware-LogAny/pull/1">Pull-request</a></p>
<h2 class="title is-4">Conclusion</h2>
<p>It's better to start earlier working my CI.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>GitHub Workflow for ruby-request-builder</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-18T06:30:01Z</updated>
    <pubDate>2022-12-18T06:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-ruby-request-builder" />
    <id>https://code-maven.com/ci-for-ruby-request-builder</id>
    <content type="html"><![CDATA[<p>Today, while looking at the newly fixed <a href="https://ruby-digger.code-maven.com/">Ruby Digger</a> I noticed a gem called <a href="https://rubygems.org/gems/request-builder">request-builder</a>. It had Travis-CI configured. However, Travis-CI stopped its free service a while ago. I thought I check this out.</p>
<h2 class="title is-4">Instructions</h2>
<p>This project has instruction in its README file how to set it up locally and how to run its tests. This is awesome as it seems there are several ways to do this depending on the preferences of the author.</p>
<h2 class="title is-4">Error in tests</h2>
<p>I cloned the repo, started my Docker container where I run the tests, installed the dependencies and then got an error while running the tests. I <a href="https://github.com/RainbowPonny/ruby-request-builder/issues/1">reported</a> it.</p>
<h2 class="title is-4">Find the breaking change</h2>
<p>Then I thought, if the author used Travis-CI then this surely worked at one point. So I looked at the history.</p>
<p>In my <code>~/.gitconfig</code> I have an alias:</p>
<pre><code>[alias]
  lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)&lt;%an&gt;%Creset' --abbrev-commit
</code></pre>
<p>So I just ran</p>
<pre><code>git lg
</code></pre>
<p>And got this output:</p>
<pre><code>* 8a160e5 - (HEAD -&gt; main, origin/main, origin/HEAD) Bump version to 0.2.1 (7 hours ago) &lt;Anton Kostyuk&gt;
* 1ef292c - Add config dup method (7 hours ago) &lt;Anton Kostyuk&gt;
* 7a079f2 - Bump version (8 hours ago) &lt;Anton Kostyuk&gt;
* e21a35d - Bump version (8 hours ago) &lt;Anton Kostyuk&gt;
* a954ffd - Fix headers, params, callbacks inheritance (8 hours ago) &lt;Anton Kostyuk&gt;
* 6b1cdf7 - Fix config duplication (3 weeks ago) &lt;Anton Kostyuk&gt;
* 21381bf - Bump version (3 months ago) &lt;Anton Kostyuk&gt;
* c59c152 - Add default adapter method (3 months ago) &lt;Anton Kostyuk&gt;
* 97e6f11 - Fix initializing (3 months ago) &lt;Anton Kostyuk&gt;
* c7fc920 - Update README.md (3 months ago) &lt;Anton Kostyuk&gt;
* 4bf2717 - Bump version to 0.1.1 (3 months ago) &lt;Anton Kostyuk&gt;
* 4b06d19 - Update description and links (3 months ago) &lt;Anton Kostyuk&gt;
* c61eb20 - Update README.md (3 months ago) &lt;Anton Kostyuk&gt;
* 4ecb8e5 - Add tests (3 months ago) &lt;Anton Kostyuk&gt;
* 617a0c8 - Fix gem initialize (3 months ago) &lt;Anton Kostyuk&gt;
* ce87ffd - Fix files load (3 months ago) &lt;Anton Kostyuk&gt;
* 0cb0466 - Init (3 months ago) &lt;Anton Kostyuk&gt;
</code></pre>
<p>I noticed that there were a few changes 7-8 hours again. A change 3 weeks ago and the original code was written 3 months ago. So I said, I said let's try the commit from 3 weeks ago.</p>
<p>I checked it out, ran the tests and they all passed. So I checked out the next commit and the tests already failed. I did not even have to run <code>git bisect</code> and found and reported the problematic commit. I hope it will help the author fix the code and/or the tests.</p>
<h2 class="title is-4">GitHub Workflow file</h2>
<p>The configuration file was straight forward. Almost exactly as we had yesterday. I copied it from there. The only difference is that now we run</p>
<pre><code>./bin/setup
rake spec
</code></pre>
<p>in the docker containers but we run</p>
<pre><code>bundler install
rake spec
</code></pre>
<p>when we run natively. Especially because Windows would not know what to do with the <code>/bin/setup</code> shell script.</p>
<h2 class="title is-4">Conclusion</h2>
<p>The projects with the Travis-CI configuration might be even more in danger than those without any CI configured. They might be in the false security that they have a CI while it has not been working for quite some time.</p>
<p>It's a real pity that Travis-CI shut down their free service. I liked them. I don't know what has happened though I guess as GitHub Actions took over their business they could not afford it any more.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>A JavaScript bug and GitHub Workflow CI for the four-pillars Ruby gem</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-17T18:30:01Z</updated>
    <pubDate>2022-12-17T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-four-pillars-in-ruby" />
    <id>https://code-maven.com/ci-for-four-pillars-in-ruby</id>
    <content type="html"><![CDATA[<p>I thought I'd like to try another Ruby Gem today and went back to the <a href="https://ruby-digger.code-maven.com/">Ruby Digger</a>. I noticed that the gems are not listed in the order they were released. I think I already noticed this earlier, but did not deal with it. Now it really bothered me. I looked at the code and as I remembered, I have sorted the entries. So how come they are not sorted on the web site.</p>
<p>First I  tried it locally. I ran the code that generates the HTML page and then opened the HTML file in my browser. The order was as I expected.</p>
<p>So how come it works correctly on my computer but incorrectly when it is on the GitHub Pages server.</p>
<p>This was really annoying.</p>
<p>I added some debugging code to print the version number of Ruby. As much as it did not seem reasonable I was desperate. I thought maybe we have some version difference and that causes the problem. I also added some code to print the dates to the screen while the HTML file is being generated.</p>
<p>I pushed out the code and after a few seconds looked at the results.</p>
<p>The version number was similar and the dates were printed in the correctly sorted order on the screen. So how come they are not sorted on the web site.</p>
<p><b>Then I saw it</b></p>
<p>When I refreshed the page it showed up properly and then there was a blink and the order was gone.</p>
<p>That's when I realized the HTML table is configured s a sortable table. I looked at the code and it was sorted by the wrong column.</p>
<p>I think I copied the code for this from the <a href="https://cpan-digger.perlmaven.com/">CPAN Digger</a>, but we have different columns here so the code was sorting according to the names of the authors. Oh oh.</p>
<p>It did not happen when I looked at the HTML file on my computer as I was loading a plain file and it could not load the JavaScript that triggered the sorting.</p>
<p>I fixed the JavaScript code, well, update the configuration to point to the right column. This fixed the issue, but then I started to think, why do we even need to let the user sort the table? So I turned off the sorting.</p>
<p>Phew, that was a stupid bug.</p>
<h2 class="title is-4">four-pillars in Ruby</h2>
<p>A class which tells fortune by <a href="https://en.wikipedia.org/wiki/Four_Pillars_of_Destiny">Four Pillar astrology</a>.</p>
<p>It is a very simple Gem without any dependencies and some plain tests. It was easy to configure so I configured both a Docker container based job and a job that runs on the 3 different operating systems.</p>
<p><a href="https://github.com/lumbermill/four-pillars/pull/1">Pull-Request</a></p>
<h2 class="title is-4">GitHub Actions configuration file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ruby/four-pillars/ci.yml">examples/ruby/four-pillars/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
#  schedule:
#    - cron: '42 5 * * *'

jobs:
  test-in-container:
    strategy:
      fail-fast: false
      matrix:
        ruby: [ '2.6', '2.7', '3.0' ]

    runs-on: ubuntu-latest
    name: OS Ruby ${{matrix.ruby}}
    container: ruby:${{matrix.ruby}}

    steps:
    - uses: actions/checkout@v3

    - name: Show Ruby Version
      run: |
        ruby -v

    - name: Run tests
      run: |
        rake test

  test-natively:
    strategy:
      fail-fast: false
      matrix:
        runner: [ubuntu-latest, macos-latest, windows-latest]
        ruby-version: ['3.0']

    runs-on: ${{matrix.runner}}
    name: OS ${{matrix.runner}} Ruby ${{matrix.ruby-version}}

    steps:
    - uses: actions/checkout@v3
    - name: Set up Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: ${{ matrix.ruby-version }}
    - name: Run tests
      run: rake test


</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>Even Chinese Astrology can be tested.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Moving from Travis-CI to GitHub Actions for Marpa::R2</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-16T07:30:01Z</updated>
    <pubDate>2022-12-16T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-marpa-r2" />
    <id>https://code-maven.com/ci-for-marpa-r2</id>
    <content type="html"><![CDATA[<p><a href="https://metacpan.org/pod/Marpa::R2">Marpa::R2</a> can parse any language whose grammar can be written in BNF.
It used Travis-CI, but since Travis-CI discontinued its free offering for Open Source project the project was without CI.</p>
<p>I <a href="https://github.com/jeffreykegler/Marpa--R2/issues/289">asked</a> the author if he would be interested in a GitHub Actions
configuration.</p>
<h2 class="title is-4">A warning during build</h2>
<p>I tried to build the module locally and run its tests locally, but I encountered some issues:</p>
<p>First I noticed that there are some <a href="https://github.com/jeffreykegler/Marpa--R2/issues/290">warning during the build</a>
emitted by one of the dependencies. As it turns out upgrading the dependency solved this issue, but the latest package
of the dependency also had a minor issue. The version numbers in the different files were slightly confusing.
So I <a href="https://github.com/Perl/perl5/issues/20609">reported that too</a>.</p>
<p>Apparently that was already fixed, it was just not released yet.</p>
<h2 class="title is-4">An error - missing files</h2>
<p>The next thing I encountered was that some files were <a href="https://github.com/jeffreykegler/Marpa--R2/issues/291">missing</a>.
That made the tests fail. The author first thought that the issue was somehow cause by me mixing versions, but soon found that the
files were <b>not added to git</b>.</p>
<p>This is one of the reasons to have CI.</p>
<p>This can happen to any one of us.</p>
<p>Maybe not to you, but someone else on your team or to a contributor to your project</p>
<h2 class="title is-4">Should the tip of the main branch be usable?</h2>
<p>The author made an interesting <a href="https://github.com/jeffreykegler/Marpa--R2/issues/291#issuecomment-1353354424">comment</a> on the  <a href="https://github.com/jeffreykegler/Marpa--R2/issues/291">issue</a> about the missing files.</p>
<quote>
FYI many programmers make a point of the tip of their main branch being something usable. I am NOT one of them, so pulling from my repo, instead of a distribution, is risky.
</quote>
<p>Here is what I think about it:</p>
<p>I would say it is a good practice to ensure all the test are always passing on the tip of the main branch.  Otherwise one would risk starting to think that &quot;some tests always fail&quot; which could lead to some test failing that <em>should not fail</em> go unnoticed for a long period of time.</p>
<p>Also it upsets the CI and we don't want to do that.</p>
<p>Actually, one of the reasons of having a CI to have something look over our shoulders and make sure that all the tests are always passing on a clean environment.</p>
<p>And then comes the point, if all the tests are passing, doesn't that mean that the version is usable?</p>
<p>I am looking forward the continuation of this discussion.</p>
<h2 class="title is-4">Pull-Request</h2>
<p>Once those issues were fixed adding the GitHub Action configuration file and converting the commands from the Travis-CI config file to GitHub Actions
was not difficult. At one point the author commented that he wants the code to run on Windows and macOS as well, but it is difficult as he does not have
access to those operating systems. I figured configuring GitHub Actions to run on those OS-es as well will help him with that task. I was also expecting
the test or even maybe the compilation to fail on at lest one of them. So I was a bit surprised that everything worked.</p>
<p>Well, I still managed to make a few mistakes and thus had to try it several time, but after a while I got it right and sent the <a href="https://github.com/jeffreykegler/Marpa--R2/issues/291">pull-request</a>.
To my surprise the author closed it as he is planning to move the repo to a GitHub organization.</p>
<p>It is unclear to me why that stops him from accepting the PR so I asked him on the PR.</p>
<h2 class="title is-4">GitHub Actions</h2>
<p>In any case, I included the configuration files here. This time, I went a bit further than in the previous cases of my recent GitHub Actions pull-requests.
I also went beyond what was in the Travis-CI configuration file.</p>
<p>This time I create two configuration file.</p>
<p>In the first one we use multiple version of perl in Docker containers.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/marpa-r2/ci.yml">examples/marpa-r2/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        perl: [ '5.10', '5.20', '5.30', '5.36', '5.36-threaded' ]
        # See options here: https://hub.docker.com/_/perl/

    runs-on: ubuntu-latest
    name: OS Perl ${{matrix.perl}}
    container: perl:${{matrix.perl}}

    steps:
    - uses: actions/checkout@v3

    - name: Show Perl Version
      run: |
        perl -v

    - name: Install Modules
      run: |
        cpanm Config::AutoConf # optional dependency
        cd cpan
        cpanm --installdeps --quiet --notest .

    - name: Show Errors on Ubuntu
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'ubuntu-')}}
      run: |
         cat /home/runner/.cpanm/work/*/build.log

    - name: build Marpa and execute tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
      run: |
        set -x
        (cd cpan/xs/ &amp;&amp; make)  # generate necessary files

        cd cpan/
        perl Build.PL
        ./Build
        ./Build test
        ./Build distmeta
        ./Build disttest
        MARPA_USE_PERL_AUTOCONF=1 ./Build disttest
        ./Build dist

</code></pre>
<p>In the second one we use the 3 different operating systems: Windows, Linux and macOS.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/marpa-r2/native.yml">examples/marpa-r2/native.yml</a></strong></p>
<pre><code class="language-yaml">name: Platforms

on:
  push:
  pull_request:
  workflow_dispatch:
#  schedule:
#    - cron: '42 5 * * *'

jobs:
  platform-test:
    strategy:
      fail-fast: false
      matrix:
        runner: [ubuntu-latest, macos-latest, windows-latest]
        perl: [ '5.30' ]
        exclude:
          - runner: windows-latest
            perl: '5.36'

    runs-on: ${{matrix.runner}}
    name: OS ${{matrix.runner}} Perl ${{matrix.perl}}

    steps:
    - uses: actions/checkout@v3

    - name: Set up perl
      uses: shogo82148/actions-setup-perl@v1
      with:
          perl-version: ${{ matrix.perl }}
          distribution: ${{ ( matrix.runner == 'windows-latest' &amp;&amp; 'strawberry' ) || 'default' }}

    - name: Show Perl Version
      run: |
        perl -v

    - name: Install Modules
      run: |
        cpanm Config::AutoConf # optional dependency
        cd cpan
        cpanm --installdeps --quiet --notest .

    - name: Show Errors on Windows
      if:  ${{ failure() &amp;&amp; matrix.runner == 'windows-latest' }}
      run: |
         ls -l C:/Users/
         ls -l C:/Users/RUNNER~1/
         cat C:/Users/runneradmin/.cpanm/work/*/build.log

    - name: Show Errors on Ubuntu
      if:  ${{ failure() &amp;&amp; matrix.runner == 'ubuntu-latest' }}
      run: |
         cat /home/runner/.cpanm/work/*/build.log

    - name: Show Errors on OSX
      if:  ${{ failure() &amp;&amp; matrix.runner == 'macos-latest' }}
      run: |
         cat  /Users/runner/.cpanm/work/*/build.log

    - name: Make - generate necessary files
      run: |
        cd cpan
        cd xs
        make

    - name: Run tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
      run: |
        cd cpan
        perl Build.PL
        perl Build
        perl Build test
        perl Build distmeta
        perl Build disttest

    - name: Run tests with autoconf
      env:
        MARPA_USE_PERL_AUTOCONF: 1
      run: |
        cd cpan
        perl Build disttest

    #- name: Build dist
    #  env:
    #    perl Build dist


</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>You don't have to have a CI if you remember always running your tests. You don't even need to have access to Windows and macOS to make your code work there if you are a really good
programmer as Jeffrey Kegler, the author of Marpa. And even then you might forget to add some of the files to git.</p>
<p>However, most of us aren't as focused on the details and most of would not be able to build a project like Marpa. For sure I know I wouldn't.</p>
<p>So we need the hand-holding and the discipline a CI can provide.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CI For the Log::Any Perl module</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-14T08:00:01Z</updated>
    <pubDate>2022-12-14T08:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-log-any-perl-module" />
    <id>https://code-maven.com/ci-for-log-any-perl-module</id>
    <content type="html"><![CDATA[<p>Adding CI to Perl modules is usually quite easy as the way to install dependencies and the way to test them is almost fully standardized.
True, there are 3-4 different standards, but it is quite easy to see which standard you have.</p>
<p>As always I started at the <a href="https://cpan-digger.perlmaven.com/">CPAN Digger</a>. This time found the <a href="https://metacpan.org/dist/Log-Any">Log-Any</a>
distribution.</p>
<p><a href="https://github.com/preaction/Log-Any/pull/94">Pull-Request</a></p>
<h2 class="title is-4">Conclusion</h2>
<p>Simple is good for work. Less exciting for the blog. Check out the previous entries of this series if you'd like to find more exciting cases.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CI for wp2txt Ruby project</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-11T08:30:01Z</updated>
    <pubDate>2022-12-11T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-wp2txt-ruby-project" />
    <id>https://code-maven.com/ci-for-wp2txt-ruby-project</id>
    <content type="html"><![CDATA[<p>After the success yesterday <a href="https://code-maven.com/ci-for-rdf-kv-ruby">adding CI to a Ruby Gem</a> I thought I can give another
try to more Ruby Gems so I looked at the <a href="https://ruby-digger.code-maven.com/">Ruby Digger</a>. As I can see there is even less action
there than on <a href="https://cpan-digger.perlmaven.com/">CPAN Digger for Perl</a>.</p>
<h2 class="title is-4">Error reports</h2>
<p>First I looked at a project called <a href="https://github.com/zarkiel/nezekan">nezekan</a>. I tried to run the tests locally, but failed.
I am not sure if I was even trying to run them as the authors intended, but <a href="https://github.com/zarkiel/nezekan/issues/1">this error</a> seem
to be genuine. It is a case-sensitivity issue. After I fixed that locally I bumped into <a href="https://github.com/zarkiel/nezekan/issues/2">and reported another issue</a>.</p>
<p>Only now, that I am writing this I realized that the project had a Travis-CI configuration file. Although Travis-CI does not provide the free service any more
I could have looked at the configuration file and base my commands on that. I can get back to that later.</p>
<h2 class="title is-4">wp2txt</h2>
<p>After a while I found the <a href="https://github.com/yohasebe/wp2txt">wp2txt</a> project. Adding GitHub Actions to this was quite simple
though it was different from the previous one. Here is the <a href="https://github.com/yohasebe/wp2txt/pull/11">pull-request</a>
and below you'll find a copy of the configuration file as I sent it.</p>
<h2 class="title is-4">GitHub Actions</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/wp2txt/ci.yml">examples/wp2txt/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        ruby: [ '3.1' ]

    runs-on: ubuntu-latest
    name: Ruby ${{matrix.ruby}}
    container: ruby:${{matrix.ruby}}

    steps:
    - uses: actions/checkout@v3

    - name: Show Ruby Version
      run: ruby -v

    - name: Install dependencies
      run: bundle install

    - name: Install rspec
      run: gem install rspec

    - name: Run tests
      run: rspec



</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>Slowly, but I learn how to run the tests in the various Ruby projects as well. Unfortunately there are not very many new uploads to <a href="https://rubygems.org/">RubyGems</a>
and this <a href="https://ruby-digger.code-maven.com/">Ruby Digger</a> is growing slowly.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>GitHub Actions CI for the rdf-kv Ruby Gem</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-10T07:30:01Z</updated>
    <pubDate>2022-12-10T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-rdf-kv-ruby" />
    <id>https://code-maven.com/ci-for-rdf-kv-ruby</id>
    <content type="html"><![CDATA[<p>Finally I managed to set up CI for a Ruby Gem.
ere <a href="https://github.com/doriantaylor/p5-rdf-kv/issues/2">were some errors</a> that stopped me from doing the regular steps.</p>
<p>A few days ago I sent a pull-request with a CI configuration to the <a href="https://code-maven.com/ci-for-rdf-kv-perl">RDF::KV module in Perl</a>.
I was not very happy with the solution, but sent the <a href="https://github.com/doriantaylor/p5-rdf-kv/pull/3">pull-request</a> anyway.
The author of the module was very responsive and soon pointed me to the step I missed, but also pointed at the <a href="https://github.com/doriantaylor/rb-rdf-kv">Ruby port of rdf-kv</a>.</p>
<p>Today finally I had the time to update the CI I wrote for the Perl version. (See the <a href="https://github.com/doriantaylor/p5-rdf-kv/pull/3">PR</a>) and also to add
the GitHub Actions configuration to the Ruby implementation and send the <a href="https://github.com/doriantaylor/rb-rdf-kv/pull/1">pull-request</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rdf-kv-ruby/ci.yml">examples/rdf-kv-ruby/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        ruby: [ '3.1' ]

    runs-on: ubuntu-latest
    name: Ruby ${{matrix.ruby}}
    container: ruby:${{matrix.ruby}}

    steps:
    - uses: actions/checkout@v3

    - name: Show Ruby Version
      run: ruby -v

    - name: Install dependencies
      run: bundle install

    - name: Run tests
      run: bundle exec rake



</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>Maybe the earlier failures to set up CI for Ruby Gems wasn't even my fault. Maybe they really had failing tests.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CI for Mojo-UserAgent-Cached and Plack-Middleware-Greylist</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-09T17:30:01Z</updated>
    <pubDate>2022-12-09T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-two-perl-projects" />
    <id>https://code-maven.com/ci-for-two-perl-projects</id>
    <content type="html"><![CDATA[<p>Today I can report about two pull-requests for two web-related Perl projects.
One of them is called <a href="https://metacpan.org/dist/Mojo-UserAgent-Cached">Mojo-UserAgent-Cached</a>
and the other one is <a href="https://metacpan.org/dist/Plack-Middleware-Greylist">Plack-Middleware-Greylist</a>.</p>
<h2 class="title is-4">Mojo-UserAgent-Cached</h2>
<p>It was quite straight-forward. There were only two small issues.
I had to install <a href="https://metacpan.org/pod/Module::Install">Module::Install</a> before I could use the regular tools
as the <b>Makefile.PL</b> relies on that. That's a known drawback of Module::Install for developers and maintainers.</p>
<p>The other problem was that tests were failing on Windows so I had to disable them.
Anyway I sent a <a href="https://github.com/nicomen/mojo-useragent-cached/pull/6">Pull-request</a> it was merged soon after.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/mojo-useragent-cached/ci.yml">examples/mojo-useragent-cached/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        runner: [ubuntu-latest, macos-latest] # , windows-latest
        perl: [ '5.30', '5.36' ]
        exclude:
          - runner: windows-latest
            perl: '5.36'

    runs-on: ${{matrix.runner}}
    name: OS ${{matrix.runner}} Perl ${{matrix.perl}}

    steps:
    - uses: actions/checkout@v3

    - name: Set up perl
      uses: shogo82148/actions-setup-perl@v1
      with:
          perl-version: ${{ matrix.perl }}
          distribution: ${{ ( startsWith( matrix.runner, 'windows-' ) &amp;&amp; 'strawberry' ) || 'default' }}

    - name: Show Perl Version
      run: |
        perl -v

    - name: Install Modules
      run: |
        cpanm -v
        cpanm --notest Module::Install
        cpanm --installdeps --notest .

    - name: Show Errors on Windows
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'windows-')}}
      run: |
         ls -l C:/Users/
         ls -l C:/Users/RUNNER~1/
         cat C:/Users/runneradmin/.cpanm/work/*/build.log

    - name: Show Errors on Ubuntu
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'ubuntu-')}}
      run: |
         cat /home/runner/.cpanm/work/*/build.log

    - name: Show Errors on OSX
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'macos-')}}
      run: |
         cat  /Users/runner/.cpanm/work/*/build.log

    - name: Run tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
      run: |
        perl Makefile.PL
        make
        make test



</code></pre>
<h2 class="title is-4">Plack-Middleware-Greylist</h2>
<p>Here too I had to disable the testing on Windows, this time because one of the dependencies was failing own Windows.
The author then wanted to add testing more versions of Perl, but did it himself. I was contemplating a bit if I should send
another PR where first we build the tar.gz on one version of Perl and then use that for testing, but there are no
extra dependencies install for the building so I don't think that could reduce the time or the cpu usage.</p>
<p><a href="https://github.com/robrwo/Plack-Middleware-Greylist/pull/3">pull-request</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/plack-middleware-greylist/ci.yml">examples/plack-middleware-greylist/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        runner: [ubuntu-latest, macos-latest] # , windows-latest
        perl: [ '5.30', '5.36' ]
        exclude:
          - runner: windows-latest
            perl: '5.36'

    runs-on: ${{matrix.runner}}
    name: OS ${{matrix.runner}} Perl ${{matrix.perl}}

    steps:
    - uses: actions/checkout@v3

    - name: Set up perl
      uses: shogo82148/actions-setup-perl@v1
      with:
          perl-version: ${{ matrix.perl }}
          distribution: ${{ ( startsWith( matrix.runner, 'windows-' ) &amp;&amp; 'strawberry' ) || 'default' }}

    - name: Show Perl Version
      run: |
        perl -v

    - name: Install dependencies
      run: |
        cpanm -v
        cpanm --notest --installdeps .

    - name: Show Errors on Windows
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'windows-')}}
      run: |
         ls -l C:/Users/
         ls -l C:/Users/RUNNER~1/
         cat C:/Users/runneradmin/.cpanm/work/*/build.log

    - name: Show Errors on Ubuntu
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'ubuntu-')}}
      run: |
         cat /home/runner/.cpanm/work/*/build.log

    - name: Show Errors on OSX
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'macos-')}}
      run: |
         cat  /Users/runner/.cpanm/work/*/build.log

    - name: Run tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
      run: |
        prove -l


</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>That was easy.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Adding CI to Perl::Efl - sometimes you need to do some extra work</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-08T09:30:01Z</updated>
    <pubDate>2022-12-08T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/adding-ci-to-perl-efl" />
    <id>https://code-maven.com/adding-ci-to-perl-efl</id>
    <content type="html"><![CDATA[<p><a href="https://code-maven.com/2022-december-ci-challenge">Originally</a> I wanted to do a very diverse set of CI configurations during December,
but so far I was only successful on Python and Perl packages. I failed on a number of Ruby packages and I have not even really search anything else.
This is partially due to the fact that I am a lot more familiar with the first two languages than with anything else and I don't have enough time
for the others. At least not while I &quot;have to&quot; send the PR every day.</p>
<p>Today I picked another Perl module. As it turned out it wasn't such a &quot;low-hanging-fruit&quot; either as I was hoping for, but I managed to set up CI.
At least on Ubuntu.</p>
<p><a href="https://metacpan.org/release/pEFL">pEFL</a> is the name of the Perl bindings for the <a href="https://www.enlightenment.org/">Enlightenment Foundation Libraries</a>.</p>
<p>According to the README of the Perl Module one needs to install the <b>efl-dev</b> package, but on Ubuntu 22.10 there is no such package. I found one called
<b>efl-doc</b>, but that's the documentation. Running <b>apt-cache search efl | grep dev</b> helped me find the package called <b>libefl-all-dev</b>.
It seem that this is what we needed. So I opened an <a href="https://github.com/MaxPerl/Perl-Efl/issues/2">issue</a>.</p>
<p>At first I was trying to run the tests directly on the <b>ubuntu-latest</b> runner of GitHub Actions, but soon I gave up.
Maybe the problem was that it is running an older version of Ubuntu. Maybe the problem was something else. I don't know, I have not researched it.
Instead I switched to using the official Ubuntu 22.10 docker image.</p>
<p>After several trial and error I figured out that I have to also install the <b>gcc</b> and <b>make</b> packages for the compilation.</p>
<p>For Perl I needed <a href="https://metacpan.org/pod/ExtUtils::PkgConfig">ExtUtils::PkgConfig</a>.
The easiest seemed to be to install the <b>libextutils-pkgconfig-perl</b> package that is packaged and distributed by the developers of Ubuntu.</p>
<p>At the end I saw that the only test this package has is trying to load the module, but at least we can see that the compilation worked.</p>
<h2 class="title is-4">CentOS</h2>
<p>After the success with Ubuntu I thought I'll also try to do the same on a CentOS based Docker container. I started with CentOS 7.
I found out it does not even have Perl installed so I started with that. However, when I got to the installation of the <b>efl</b>
library I found out that it is not available on CentOS. At least not in the default locations.</p>
<p>At this point I decided to stop for now and sent the <a href="https://github.com/MaxPerl/Perl-Efl/pull/1">Pull-Request</a> with the Ubuntu configuration.
Better to have one than none. Later we can try to figure out how to set this up on other Linux distributions. Maybe with different versions of Perl as well.</p>
<p>If the author even interested.</p>
<h2 class="title is-4">Why is this valuable?</h2>
<p>While I was still composing this blog post, the author has updated the README file, closed the issue and commented on it indicating that
it is unclear what is the purpose of compiling / running tests on every push?
Unfortunately not all distributions have efl/Enlightenment. But compiling the libraries is not a hard job...
Perhaps the <a href="https://blog.buddiesofbudgie.org/">Budgie Desktop</a> switch to efl, then the distribution coverage could be better...</p>
<p>Let me answer it here as I think this could be interesting to others as well.</p>
<p>The point of CI running on every push is to get feedback as soon as possible.</p>
<p>It would be a lot more valuable if there were lots of tests than just loading the module as in this case,
but even this way it is valuable to see if some change broke some part of the code that the developers have not noticed on their computer.</p>
<p>If the changes came as Pull-Request then the author does not even know if the sender has tried to compile the code on their computer. Maybe they just sent some changes?
By letting the CI compile it both the author and the PR sender will quickly see the results. That can save time to the author and the PR sender might even fix the issue
before the author has a chance to look at it.</p>
<p>It would be more useful if the compilation was done on various Linux and BSD distributions and maybe using various versions of Perl.
If the specific distribution does not have a ready-made package of Efl then it could be possibly compiled from its source code.
It is very unlikely that the author has many setups locally and it is even less likely that a potential contributor has all that setup.
Even if they have it is probably easier to hand this job off to some external system (GitHub Actions in this case) than doing on your computer.
So on the longer run it will be a lot more beneficial to set this up on other distributions as well.
Consider this PR as the first step in that direction.</p>
<p>I have a <a href="https://code-maven.com/travis-ci-why-use-continuous-integration">video talking about this</a>, though in that I was talking about Travis-CI.</p>
<h2 class="title is-4">GitHub Actions for Ubuntu</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/perl-efl/ubuntu.yml">examples/perl-efl/ubuntu.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '42 5 * * *'

jobs:
  ubuntu:
    runs-on: ubuntu-latest
    container: ubuntu:22.10

    steps:
    - uses: actions/checkout@v3

    - name: Install C dependencies
      run: |
        apt-get update
        apt-get install -y libefl-all-dev
        apt-get install -y gcc
        apt-get install -y make
        apt-get install -y libextutils-pkgconfig-perl

    - name: Show Perl Version
      run: |
        perl -v

    - name: Run tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
      run: |
        perl Makefile.PL
        make
        make test



</code></pre>
<h2 class="title is-4">Partial configuration for CentOS</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/perl-efl/centos.yml">examples/perl-efl/centos.yml</a></strong></p>
<pre><code class="language-yaml">  centos:
    runs-on: ubuntu-latest
    container: centos:7

    steps:
    - uses: actions/checkout@v3

    - name: Install C dependencies
      run: |
        yum install -y perl
        #yum install -y perl-ExtUtils-MakeMaker
        yum install -y perl-App-cpanminus
        cpanm Test::More
        cpanm ExtUtils::PkgConfig

    - name: Show Perl Version
      run: |
        perl -v

    - name: Run tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
      run: |
        perl Makefile.PL
        make
        make test



</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>Better one bird in the hand than two birds on the tree. Or some similar expression.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Be pragmatic setting up CI for the RDF::KV</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-07T21:00:01Z</updated>
    <pubDate>2022-12-07T21:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-rdf-kv-perl" />
    <id>https://code-maven.com/ci-for-rdf-kv-perl</id>
    <content type="html"><![CDATA[<p>Today I tried to set up CI on GitHub Actions for the <a href="https://metacpan.org/pod/RDF::KV">RDF::KV</a> Perl module
that I found on <a href="https://cpan-digger.perlmaven.com/">CPAN Digger</a> to be lacking CI.</p>
<p>It wasn't supposed to be difficult but I encountered some issues and had to be pragmatic in the setup even if far from ideal.</p>
<p>IMHO it is better to have a working CI that already checks part of what can be checked than to have nothing.</p>
<p>I cloned the Git repository of the package and as it came with a <b>Makefile.PL</b> I ran the usual</p>
<pre><code>perl Makefile.PL
</code></pre>
<p>just to see a nasty error:</p>
<pre><code>include /home/gabor/os/p5-rdf-kv/inc/Module/Install.pm
String found where operator expected at Makefile.PL line 5, near &quot;readme_from 'lib/RDF/KV.pm'&quot;
	(Do you need to predeclare readme_from?)
syntax error at Makefile.PL line 5, near &quot;readme_from 'lib/RDF/KV.pm'&quot;
Execution of Makefile.PL aborted due to compilation errors.
</code></pre>
<p>I tried to understand the source of the problem, but I figured it is better to <a href="https://github.com/doriantaylor/p5-rdf-kv/issues/2">report it</a>
maybe the author will point to something I am doing wrong or maybe the author will confirm the problem.</p>
<p>As I could not use the regular process, but I still wanted to see if the tests pass I installed the dependencies that were listed in the <b>Makefile.PL</b>
manually running <b>cpanm</b>. As I saw that the tests pass after I installed all the dependencies I set up GitHub Actions.</p>
<p>From the results I learned that the author tests need some additional modules, however after installing those one of the author tests failed.
I think it is probably related to the same issue I already reported, so instead of trying to figure out what's going on I removed the test module that enabled
that specific test.</p>
<p>At this point I could send the <a href="https://github.com/doriantaylor/p5-rdf-kv/pull/3">pull-request</a>.</p>
<p>We'll see how the author responds.</p>
<h2 class="title is-4">GitHub Action configuration file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rdf-kv/ci.yml">examples/rdf-kv/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        runner: [ubuntu-latest, macos-latest, windows-latest]
        perl: [ '5.30', '5.36' ]
        exclude:
          - runner: windows-latest
            perl: '5.36'
          - runner: windows-latest
            perl: '5.34'

    runs-on: ${{matrix.runner}}
    name: OS ${{matrix.runner}} Perl ${{matrix.perl}}

    steps:
    - uses: actions/checkout@v3

    - name: Set up perl
      uses: shogo82148/actions-setup-perl@v1
      with:
          perl-version: ${{ matrix.perl }}
          distribution: ${{ ( startsWith( matrix.runner, 'windows-' ) &amp;&amp; 'strawberry' ) || 'default' }}

    - name: Show Perl Version
      run: |
        perl -v

    - name: Install Modules
      run: |
        cpanm -v
        #cpanm --installdeps --notest .
        cpanm --notest Moose URI::BNode RDF::Trine URI::NamespaceMap XML::RegExp Data::UUID::NCName Data::GUID::Any
        cpanm --notest Test::Pod::Coverage Test::Pod
        # The test using Test::CheckManifest fails without the Module::Install which now not used because of this issue:
        # https://github.com/doriantaylor/p5-rdf-kv/issues/2

    - name: Show Errors on Windows
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'windows-')}}
      run: |
         ls -l C:/Users/
         ls -l C:/Users/RUNNER~1/
         cat C:/Users/runneradmin/.cpanm/work/*/build.log

    - name: Show Errors on Ubuntu
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'ubuntu-')}}
      run: |
         cat /home/runner/.cpanm/work/*/build.log

    - name: Show Errors on OSX
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'macos-')}}
      run: |
         cat  /Users/runner/.cpanm/work/*/build.log

    - name: Run tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
      run: |
        prove -l
        #perl Makefile.PL
        #make
        #make test



</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>It is better to have a CI running and executing some of the tests in a less-than-ideal way than to have no CI.
A working CI can (and actually has to) be improved all the time.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CI for Win32-Wlan Perl module</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-12-05T01:30:01Z</updated>
    <pubDate>2022-12-05T01:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-for-win32-wlan-perl-module" />
    <id>https://code-maven.com/ci-for-win32-wlan-perl-module</id>
    <content type="html"><![CDATA[<p>I found <a href="https://metacpan.org/dist/Win32-Wlan">Win32-Wlan</a> on <a href="https://cpan-digger.perlmaven.com/">CPAN Digger</a> as a Perl
package that does not have CI configured in its <a href="https://github.com/Corion/Win32-Wlan/">GitHub repository</a>.</p>
<p>While the indicates that this is a Windows-related thing, there are a number of packages on <a href="https://metacpan.org/">CPAN</a> that are in the
<a href="https://metacpan.org/search?size=50&q=Win32"><b>Win32</b></a> namespace, but also work on Linux. This one, it seems does not.
It seems at least one of its dependencies, the <a href="https://metacpan.org/dist/Win32-API">Win32-API</a> does not work on anything else besides
Windows.</p>
<p>In the <b>Makefile.PL</b> of Win32-API I saw this code:</p>
<pre><code>my $running_on_windows = $^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'msys';
die qq(OS unsupported\n)
    unless $running_on_windows
    or $ENV{WIN32_API_BUILD}     # So I can build it on Linux too
    ;
</code></pre>
<p>So it can also work on <b>cygwin</b> and <b>msys</b> and it can be packaged on <b>Linux</b> as well.</p>
<p>We might be able to setup a Linux machine to build the distribution of the module and then we can run the tests
on various versions of Perl on Windows. However I did not want to invest that much time before I even
see that it would be interesting to the maintainer of the package.</p>
<p>The setup was quite simple as you can see from the GitHub Action config file below.</p>
<p>I had to remove the two most recent versions of Perl as it seems they are not available in the GitHub Action I used.
That could be improved.</p>
<p>The <a href="https://github.com/Corion/Win32-Wlan/pull/4">Pull-Request</a></p>
<h2 class="title is-4">GitHub Actions</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/win32-wlan/ci.yml">examples/win32-wlan/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        runner: [windows-latest]
        perl: [ '5.30', '5.32' ] # It seems that perl 5.34 and 5.36 are not available

    runs-on: ${{matrix.runner}}
    name: OS ${{matrix.runner}} Perl ${{matrix.perl}}

    steps:
    - uses: actions/checkout@v3

    - name: Set up perl
      uses: shogo82148/actions-setup-perl@v1
      with:
          perl-version: ${{ matrix.perl }}
          distribution: ${{ ( startsWith( matrix.runner, 'windows-' ) &amp;&amp; 'strawberry' ) || 'default' }}

    - name: Show Perl Version
      run: |
        perl -v

    - name: Install Modules
      run: |
        cpanm -v
        cpanm --installdeps --notest .

    - name: Show Errors on Windows
      if:  ${{ failure() &amp;&amp; startsWith( matrix.runner, 'windows-')}}
      run: |
         ls -l C:/Users/
         ls -l C:/Users/RUNNER~1/
         cat C:/Users/runneradmin/.cpanm/work/*/build.log

    - name: Run tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
      run: |
        perl Makefile.PL
        make
        make test



</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>Sometimes you need Windows.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Add GitHub Action CI to the Net-Async-Redis-XS Perl module</title>
    <summary type="html"><![CDATA[The preparation was hard, but once I have everything prepared configuring GitHub Actions was quite easy.]]></summary>
    <updated>2022-12-02T11:30:01Z</updated>
    <pubDate>2022-12-02T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/add-ci-to-net-async-redis-xs-perl-module" />
    <id>https://code-maven.com/add-ci-to-net-async-redis-xs-perl-module</id>
    <content type="html"><![CDATA[<p>For the second day of the <a href="https://code-maven.com/2022-december-ci-challenge">2022 December CI Challenge</a>
I wanted to have a Perl module. Partially because I have working on adding CI to Perl modules for a while.</p>
<p>I looked at <a href="https://cpan-digger.perlmaven.com/">CPAN Digger</a> where some Perl script collects and analyses
the most recent uploads to CPAN, the central web site of of the Perl packages and <a href="https://metacpan.org/">MetaCPAN</a>
is the user-friendly place to view the content of all the packages.</p>
<p>When I looked at CPAN::Digger the first package that had a link to its GitHub repository but did not have CI
was the <a href="https://metacpan.org/dist/Net-Async-Redis-XS">Net-Async-Redis-XS</a> distribution.</p>
<p>I thought that could be a nice challenge as it will probably require having Redis installed on the CI server.</p>
<h2 class="title is-4">Background work</h2>
<p>Before I could start working on this project I wanted to create an example GitHub Action configuration where
we have a Redis server and it is being access by <b>curl</b>. I wasted a lot of time on this and thought I should
try to do something simpler that I can experiment with on my own computer and I don't need to send it to GitHub
and wait for it do run my code.</p>
<p>So I started to work on a Docker Compose configuration where I had two containers. One is a Redis service and the
other one is a simple client. Here to I failed to use <b>curl</b> as the client.
However, I could make it work using the official Redis client called <b>redis-cli</b>.
I added the example to my <a href="https://code-maven.com/slides/docker/docker-compose-redis-server-and-client">Docker slides</a>.</p>
<p>Once I managed to create the Docker Compose configuration, creating the one running on GitHub Actions was easier. You can find
my example in <a href="https://github.com/szabgab/github-actions-redis/">this repository</a>.</p>
<p>I 08 2-3 hours on the preparations, but I also created the examples so people will be able to base their work on these examples.</p>
<h2 class="title is-4">Creating the GitHub Action using Redis</h2>
<p>Once I had the Redis configuration the work on the Perl module was not that hard.
I made a few typos and missed the fact that the repository has a <b>Makefile.PL</b> so at first I tried to use <b>Dist::Zilla</b>.</p>
<p>I also had to include the installation of a few Perl modules in the GitHub Action configuration. I am not sure why is that.
Are they really missing from the list of dependencies of the module? If yes, how does it even get installed by users?
Did I miss a step that would have installed them?</p>
<p>I'll leave the discussion about this for later, after the initial version of the CI is enabled.</p>
<h2 class="title is-4">Supported versions of Redis and Perl</h2>
<p>I added 3 versions of Redis to the matrix and tried a number of versions of Perl, but it worked only with Perl 5.36.</p>
<p>Also I only tried this inside a Linux-based Docker container. Not on Windows and not on Mac OSX. I don't know if the module
is even intended to support those platforms.</p>
<h2 class="title is-4">Adding a test</h2>
<p>After sending the Pull-reques I went for a long walk. That helped me realize that I never told the tests what is the hostname of the
Redis servers. So I guess the tests of the module never actually tried to access the server.</p>
<p>When I got back in-front of the computer I looked at the tests and indeed they were very shallow never trying to execute any
operation that would need a server. So I created one, basically copying the example in the documentation of the module and put it in the
<b>t</b> directory where it belongs. The test will received the name of the Redis host via an environment variable called <b>REDIS_HOST</b>.
If this variable is not set these tests will be skipped. You can see the test-file here:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/Net-Async-Redis-XS/set_get.t">examples/Net-Async-Redis-XS/set_get.t</a></strong></p>
<pre><code class="language-perl">use strict;
use warnings;

use Test::More;
use Future::AsyncAwait;
use IO::Async::Loop;
use Net::Async::Redis::XS;

my $key = 'some-key';
my $value = 'some-value';

my $host = $ENV{REDIS_HOST};

plan skip_all =&gt; 'Set REDIS_HOST to run this test' if not $host;

my $loop = IO::Async::Loop-&gt;new;
$loop-&gt;add(my $redis = Net::Async::Redis::XS-&gt;new);
$redis-&gt;configure(host =&gt; $host);
await $redis-&gt;connect;
await $redis-&gt;set($key, $value);
my $result = await $redis-&gt;get($key);
is $result, $value;

done_testing();


</code></pre>
<p>I've also update the GitHub Action configuration file so it will set the <b>REDIS_HOST</b> environment variable to <b>redis</b>,
the name of <b>redis service</b> that was included in the configuration file.</p>
<h2 class="title is-4">GitHub Actions configuration file</h2>
<p>I've included here the configuration file for future reference as the one in the project, if it even gets accepted, will probably change.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/Net-Async-Redis-XS/ci.yml">examples/Net-Async-Redis-XS/ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: '42 5 * * *'

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        # Perl 5.30, 5.32., 5.34 all failed with all 3 versions of Redis
        perl: [ '5.36' ]
        redis: ['6.0', '7.0', 'latest']
        #redis: ['latest']

    services:
      redis:
        image: redis:${{matrix.redis}}

    runs-on: ubuntu-latest
    name: Perl ${{matrix.perl}} Redis ${{matrix.redis}}
    container: perl:${{matrix.perl}}

    steps:
    - name: Checkout
      uses: actions/checkout@v3

    - name: Show Perl Version
      run: |
        perl -v

    - name: Install Modules
      run: |
        cpanm --installdeps .
        cpanm --verbose Test::Fatal
        cpanm Net::Async::Redis
        cpanm Test::MemoryGrowth

    - name: Show Errors on Ubuntu
      if:  ${{ failure() &amp;&amp; matrix.runner == 'ubuntu-latest' }}
      run: |
         cat /home/runner/.cpanm/work/*/build.log

    - name: Run tests
      env:
        AUTHOR_TESTING: 1
        RELEASE_TESTING: 1
        REDIS_HOST: redis
      run: |
        perl Makefile.PL
        make
        make test
        prove -b xt/


</code></pre>
<h2 class="title is-4">Pull-Request</h2>
<p>I sent the <a href="https://github.com/team-at-cpan/Net-Async-Redis-XS/pull/1">Pull-Request</a>. Let's see if it gets commented on or accepted.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>The 2022 December CI Challenge</title>
    <summary type="html"><![CDATA[As series of articles - one every day - to show how to configure CI for various Open Source porjects]]></summary>
    <updated>2022-12-01T13:30:01Z</updated>
    <pubDate>2022-12-01T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/2022-december-ci-challenge" />
    <id>https://code-maven.com/2022-december-ci-challenge</id>
    <content type="html"><![CDATA[<p><a href="https://dev.to/szabgab/advent-calendars-in-2022-1kic">Advent Calendars</a> and <a href="https://dev.to/jarvisscript/2022-advent-code-challenges-5445">Advent Code Challenges</a>
are all the rage these days.</p>
<p>I am going to combine the ideas and write an article every day on how I configured Continuous Integration for an Open Source project
and I would like to <b>challenge you</b> to do the same!</p>
<p>This is going to be a series of articles (and videos) on setting up Continuous Integration (CI) for Open Source projects.</p>
<p>Each day during December 2022 (well, at least till the 25th) I am going to configure CI for an open source project.</p>
<p>Every day I'll try to find something different. A different programming language,
a different VCS hosting service, maybe some different extras that are needed (a database, etc.)</p>
<p>However this challenge is not only for me. I hope that you will also join me on this crazy journey,
find a project that does not have CI yet, write some test if there are non, set up the CI, send the pull-request,
and then post a link to it as a comment on the days post.</p>
<p>The VCS hosting services: I know most of the open source projects are hosted on <a href="https://github.com/">GitHub</a>.
A lot less on <a href="https://gitlab.com/">GitLab</a>. I'd be glad to hear about other hosting services where there are
Open Source projects.</p>
<p>Where can you find projects? You can search for them on the web site of the VCS hosting service or on one of the digger
projects I've been building. The currently existing projects are <a href="https://pydigger.com/">PyDigger for Python</a>,
<a href="https://cpan-digger.perlmaven.com/">CPAN Digger</a> for Perl, and the <a href="https://ruby-digger.code-maven.com/">Ruby Digger</a>.</p>
<p>Let's get started!</p>
<ul>
<li><a href="/test-and-ci-for-more-beautiful-python">Test and CI for MoreBeautifulPython</a></li>
<li><a href="/add-ci-to-net-async-redis-xs-perl-module">Add GitHub Action CI to the Net-Async-Redis-XS Perl module</a></li>
<li><a href="/ci-for-farmworld-python">CI for farmworld, a Python package - a failed attempt</a></li>
<li><a href="/github-actions-ci-for-python-wsblib">GitHub Action CI for wsblib Python</a></li>
<li><a href="/github-actions-for-colombian-spanish-in-python">GitHub Actions for Colombian Spanish. In Python</a></li>
<li><a href="/ci-for-win32-wlan-perl-module">CI for Win32-Wlan Perl module</a></li>
<li><a href="/ci-for-pcr-optimizer-python">GitHub Actions CI for the pcr_optimizer Python package</a></li>
<li><a href="/ci-for-rdf-kv-perl">Be pragmatic setting up CI for the RDF::KV</a></li>
<li><a href="/adding-ci-to-perl-efl">Adding CI to Perl::Efl - sometimes you need to do some extra work</a></li>
<li><a href="/ci-for-two-perl-projects">CI for Mojo-UserAgent-Cached and Plack-Middleware-Greylist</a></li>
<li><a href="/ci-for-rdf-kv-ruby">GitHub Actions CI for the rdf-kv Ruby Gem</a></li>
<li><a href="/ci-for-wp2txt-ruby-project">CI for wp2txt Ruby project</a></li>
<li><a href="/ci-for-sdk-py-python-packages">CI for sdk-py Python packages</a></li>
<li><a href="/ci-for-a-nist-python-project">CI for a Python project of the National Institute of Standards and Technology</a></li>
<li><a href="/ci-for-log-any-perl-module">CI For the Log::Any Perl module</a></li>
<li><a href="/failing-ci-helping-filesystem-issues">Failing CI to help fixing filesystem issues in a Python package</a></li>
<li><a href="/ci-for-marpa-r2">Moving from Travis-CI to GitHub Actions for Marpa::R2</a></li>
<li><a href="/ci-for-four-pillars-in-ruby">A JavaScript bug and GitHub Workflow CI for the four-pillars Ruby gem</a></li>
<li><a href="/ci-for-ruby-request-builder">GitHub Workflow for ruby-request-builder</a></li>
<li><a href="/ci-for-plack-middleware-logany">CI for Plack-Middleware-LogAny</a></li>
<li><a href="/ci-for-draftjs-html">CI for the draftjs_html Ruby Gem</a></li>
<li><a href="/ci-for-multi-string-replace">CI for multi_string_replace Ruby Gem</a></li>
<li><a href="/ci-for-prepper">Full gas in neutral - CI for prepper</a></li>
<li><a href="/ci-for-timescaledb">CI using timescaledb a PostgreSQL based time series database</a></li>
<li><a href="/ci-for-perl5-mime-types">CI for perl5-MIME-Types</a></li>
<li><a href="/ci-for-perl-data-alias">CI for Data::Alias in Perl - including threaded perl</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>GitHub Actions</title>
    <summary type="html"><![CDATA[A list of repositories with sample GitHub Action configuration]]></summary>
    <updated>2022-12-01T09:30:01Z</updated>
    <pubDate>2022-12-01T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/github-actions" />
    <id>https://code-maven.com/github-actions</id>
    <content type="html"><![CDATA[<p>A list of repositories with sample GitHub Action configurations. Feel free to use these skeletons!</p>
<p>For the full list visit the <a href="https://git.code-maven.com/github-actions/">GitHub Actions</a> book.</p>
<ul>
<li>
<p><a href="https://github.com/szabgab/github-actions-bash">Bash</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-crystal">Crystal</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-perl-build/">Perl with Build.PL</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-perl-dist-zilla/">Perl with Dist::Zilla</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-perl-makefile/">Perl with Makefile.PL</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-perldocker-perl-tester">Perl with Makefile.PL</a> using perldocker/perl-tester image</p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-postgresql">PostgreSQL</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-myqql">MySQL</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-python">Python</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-redis">Redis</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-rust">Rust</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-solr">Solr</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-with-parameters">GitHub Actions with parameters</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-run-code-if-files-change">Run code if file changes</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-with-linode-s3">Incremental caching demo using S3 compatibale object storage of Linode</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-restore-and-save">Cache restore and save</a> (not doing what I wanted)</p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-environment-variables">Environment variables</a></p>
</li>
<li>
<p><a href="https://github.com/Code-Maven/github-actions-dont-run-in-forks/">Check the owner</a> - don't run in forks.</p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-for-pr-branches">Run only on the main branch and the pr/* branches</a> to reduce CI runs in the organization, but allow CI runs for contributors in their forks</p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-reusable-workflow">Create Reusable Github Action workflow</a> and use it in another workflow file</p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-reuse-public-workflow">Reuse a GitHub Action workflow</a> from another (public) repository.</p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-needs/">GitHub jobs and workflows depending on each other</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-avoid-duplicate-trigger/">Avoid duplicate triggers</a> (push and pull_request for maintainers)</p>
</li>
<li>
<p><a href="https://github.com/szabgab/github-actions-list-files-changed/">List of files changed since the most recent push or in the current pull-request</a></p>
</li>
<li>
<p><a href="https://github.com/szabgab/try-github-actions/">Try others</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How do files really look like in the computer?</title>
    <summary type="html"><![CDATA[When you create a file with some text in it, you would think that that text is stored in the computer as it is. It is not. It is just numbers.]]></summary>
    <updated>2022-11-30T09:30:01Z</updated>
    <pubDate>2022-11-30T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/how-do-files-really-look-like-in-the-computer" />
    <id>https://code-maven.com/how-do-files-really-look-like-in-the-computer</id>
    <content type="html"><![CDATA[<p>When you create a file with some text in it, you would think that that text is stored in the computer as it is.</p>
<p>It is not like that. Each letter, each number, each punctuation (e.g. !?:) has a number and that number is stored.</p>
<p>Then the various programs you use to show that file will automatically convert the number to the drawing you are familiar with.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ALnV06KaONk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>The generic name of all these &quot;drawings&quot; (digits, letters, punctuation, even emojies) is <b>character</b> or <b>glyph</b>.
So we say we type in characters. Each character has a number associated with based on the standard called <a href="https://en.wikipedia.org/wiki/Unicode">Unicode</a>.
Each such value is then stored on the disk in one of the encodings. What we see here is the most common representation called <a href="https://en.wikipedia.org/wiki/UTF-8">UTF-8</a>.</p>
<p>We are going to use a program called <b>xxd</b> to show the real numbers representing each character in our files. It is available on Linux and I think on Mac OSX as well,
and I am quite sure you can find something similar for Windows as well.</p>
<p>Actually this program shows the hexa value of each byte. A byte can hold a number between 0-255 or in hexa between 0-ff. As you'll later see some characters are
represented by a single byte. Some by 2 and some even by 4.</p>
<p>Hexa numbers are represented by 0-9 and then a-f or A-F. The capitalization of these letters does not matter.</p>
<p>This program displays the hexadecimal values of each byte. That is, it uses base 16. We are going to also convert the numbers to base 10 as that's more familiar for most of us.</p>
<h2 class="title is-4">Hello World</h2>
<p>This is the file I created. This is how you'd see it if you opened it with any text editor:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/hello_world.txt">examples/hello_world.txt</a></strong></p>
<pre><code class="language-txt">Hello Wold!
Have a nice day!
</code></pre>
<p>This is how I run the <b>xxd</b> program:</p>
<pre><code>$ xxd -c 1 -d examples/hello_world.txt
</code></pre>
<p>(<b>-c 1</b> tells xxd to show only one byte per line, <b>-d</b> tells it to show the first column as decimal numbers)</p>
<p>This is its output:</p>
<pre><code>00000000: 48  H
00000001: 65  e
00000002: 6c  l
00000003: 6c  l
00000004: 6f  o
00000005: 20
00000006: 57  W
00000007: 6f  o
00000008: 6c  l
00000009: 64  d
00000010: 21  !
00000011: 0a  .
00000012: 48  H
00000013: 61  a
00000014: 76  v
00000015: 65  e
00000016: 20
00000017: 61  a
00000018: 20
00000019: 6e  n
00000020: 69  i
00000021: 63  c
00000022: 65  e
00000023: 20
00000024: 64  d
00000025: 61  a
00000026: 79  y
00000027: 21  !
</code></pre>
<p>The left-most column shows the location of the bytes. It is just an index starting from 0.
Then we see the hexadecimal (hexa) values in the file and finally, on the right hand side, we see our real characters. More-or-less.</p>
<p>Here you can see that the capital H is represented by the hexa number 48 which is decimal 72 (4*16+8)
You can see a subset of the <a href="https://en.wikipedia.org/wiki/List_of_Unicode_characters">Unicode characters</a>.
I found it by searching for &quot;Latin capital letter h&quot; on that page.</p>
<p>Then the letter e is hexa 65 which is decimal 101.</p>
<p>The next interesting thing comes on the 6th row (index 5) where you can see that a space is represented by the hexa number 20 which is decimal 32.</p>
<p>A bit further (index 10) you can see an exclamation mark <b>!</b> which is represented by hexa 21 which is decimal 33.</p>
<p>Then there is a dot <b>.</b> in this view. This dot is used by <b>xxd</b> to show that there is something, but that it cannot properly display it.
There are several so-called control characters that have a number in the Unicode table, but that instead of representing a drawing (a character or glyph)
the give an instruction to the computer what to do. For example, strange as it is, there is one called the &quot;<b>bell character</b>&quot; (hexa 7, decimal 7)
that will make a beeping sound when the computer encounters it.</p>
<p>In our case it the dot is shown instead of a character called &quot;<b>line feed</b>&quot; or <b>LF</b> (hexa a or 0a, decimal 10).</p>
<p>This tells the computer, well, at least Linux and Mac OSX, that the next character should be displayed in the next line.
If you look at how the file is displayed &quot;normal&quot; you will see that indeed the next thing, the letter H is displayed on a new line.
On Windows this works slightly differently, but I don't want to get into that. At least not now.</p>
<p>The reset is easy as we only have Latin letters, spaces and an exclamation point. All of which we have already seen.</p>
<h2 class="title is-4">Hungarian</h2>
<p>Next we'll see some text that uses Latin letters, but with a few additional characters.</p>
<p>English has 5 vowels: a, e, i, o, u, but depending on the word and the country where you are from, they might sound in various ways.</p>
<p>Hungarian has 14 vowels, each one has its distinct sound and they only slightly change based on the area the person is from.
They are represented using the 5 Latin vowels with some extra accent marks on the top.</p>
<p>This is how they look like:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/hungarian.txt">examples/hungarian.txt</a></strong></p>
<pre><code class="language-txt">aáeéiíoóöőuúüű
</code></pre>
<p>This is how they are represented in a file:</p>
<pre><code>$ xxd -c 1 -d examples/hungarian.txt
</code></pre>
<pre><code>00000000: 61  a
00000001: c3  .
00000002: a1  .
00000003: 65  e
00000004: c3  .
00000005: a9  .
00000006: 69  i
00000007: c3  .
00000008: ad  .
00000009: 6f  o
00000010: c3  .
00000011: b3  .
00000012: c3  .
00000013: b6  .
00000014: c5  .
00000015: 91  .
00000016: 75  u
00000017: c3  .
00000018: ba  .
00000019: c3  .
00000020: bc  .
00000021: c5  .
00000022: b1  .
</code></pre>
<p>The letter &quot;a&quot; did not cause any problems. It is hexa 61 which is decimal 97.</p>
<p>Given that a single byte can hold only up to 255 and there are way more characters in the world, the Unicode table has numbers that are higher than 255
and thus their will take up 2 or more bytes.</p>
<p>The <b>á</b> letter is represented by the bytes c3 and a1 (decimal 50081) in rows 1 and 2 above. See the row about UTF-8 on <a href="https://unicode-table.com/en/00E1/">this page</a>.</p>
<p>Because <b>xxd</b> shows us the content byte-by-byte it won't combine these two bytes and thus it uses dots in both of these lines to indicate that there
is something it cannot really show.</p>
<p>Then comes the letter &quot;<b>e</b>&quot; hexa 65 decimal 101 which is easy again. See <a href="https://unicode-table.com/en/0065/">here</a>.</p>
<p>The the letter &quot;<b>é</b>&quot; hexa c3 a9, decimal 50089. See  <a href="https://unicode-table.com/en/00E9/">here</a>.</p>
<p>The rest is similar.</p>
<h2 class="title is-4">Spanish</h2>
<p>Spanish has the famous <b>ñ</b> that actually sounds like the Hungarian <b>ny</b>, but let's not go into the Hungarian double and triple letters.</p>
<p>This is the text:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/spanish.txt">examples/spanish.txt</a></strong></p>
<pre><code class="language-txt">mañana
</code></pre>
<p>These are the numbers behind it:</p>
<pre><code>$ xxd -c 1 -d examples/spanish.txt
00000000: 6d  m
00000001: 61  a
00000002: c3  .
00000003: b1  .
00000004: 61  a
00000005: 6e  n
00000006: 61  a
</code></pre>
<p>The only thing that stands out here is the <b>ñ</b> that is represented by c3 b1 (decimal 50097) See <a href="https://unicode-table.com/en/00F1/">here</a>.</p>
<h2 class="title is-4">Hebrew</h2>
<p>Hebrew, Arabic, and Persian text can add an extra level of fun. Not just because they use a different alphabet, but also because they are written
from right to left. Here is an example in Hebrew:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/hebrew.txt">examples/hebrew.txt</a></strong></p>
<pre><code class="language-txt">שלום עולם

</code></pre>
<p>And here are the numbers behind the scene:</p>
<pre><code>$ xxd -c 1 -d examples/hebrew.txt
00000000: d7  .
00000001: a9  .
00000002: d7  .
00000003: 9c  .
00000004: d7  .
00000005: 95  .
00000006: d7  .
00000007: 9d  .
00000008: 20
00000009: d7  .
00000010: a2  .
00000011: d7  .
00000012: 95  .
00000013: d7  .
00000014: 9c  .
00000015: d7  .
00000016: 9d  .
00000017: 0a  .
</code></pre>
<p>The only familiar item here is the space index 8 that is represented by the hexa 20 decimal 32 as in the other cases.</p>
<p>The letter <b>ש</b> is the first character, on the right-hand side of the text. It is represented by d7 a9 (decimal 55209). See it <a href="https://unicode-table.com/en/05E9/">here</a>.</p>
<p>Then comes <b>ל</b> the second character from the right. It is d7 9c (decimal 55196). See <a href="https://unicode-table.com/en/05DC/">here</a></p>
<h2 class="title is-4">Korean, Japanese, Chinese, Thai, Urdu, ...</h2>
<p>I won't go into that as I am not familiar with either of those</p>
<h2 class="title is-4">Emojies</h2>
<p>However emojies are very common and well understood. Sort of.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/emojies.txt">examples/emojies.txt</a></strong></p>
<pre><code class="language-txt">👷👸👹👺👻✍👼👽👾👿💀💁💂
</code></pre>
<pre><code>$ xxd -c 1 -d examples/emojies.txt
00000000: f0  .
00000001: 9f  .
00000002: 91  .
00000003: b7  .
00000004: f0  .
00000005: 9f  .
00000006: 91  .
00000007: b8  .
00000008: f0  .
00000009: 9f  .
00000010: 91  .
00000011: b9  .
00000012: f0  .
00000013: 9f  .
00000014: 91  .
00000015: ba  .
00000016: f0  .
00000017: 9f  .
00000018: 91  .
00000019: bb  .
00000020: e2  .
00000021: 9c  .
00000022: 8d  .
00000023: f0  .
00000024: 9f  .
00000025: 91  .
00000026: bc  .
00000027: f0  .
00000028: 9f  .
00000029: 91  .
00000030: bd  .
00000031: f0  .
00000032: 9f  .
00000033: 91  .
00000034: be  .
00000035: f0  .
00000036: 9f  .
00000037: 91  .
00000038: bf  .
00000039: f0  .
00000040: 9f  .
00000041: 92  .
00000042: 80  .
00000043: f0  .
00000044: 9f  .
00000045: 92  .
00000046: 81  .
00000047: f0  .
00000048: 9f  .
00000049: 92  .
00000050: 82  .
</code></pre>
<p>The first one is apparently called <a href="https://unicode-table.com/en/1F477/">construction worker</a>
It is represented by 4 bytes. In hexa: F0 9F 91 B7 (in decimal 4,036,989,367. Yes that's a big number).</p>
<p>The rest are similar.</p>
<h2 class="title is-4">Unicode Table</h2>
<p>You can copy any character, including an emoji from this article or from elsewhere and paste it in the search form of the
<a href="https://unicode-table.com/">Unicode table</a> to find the information about it.</p>
<h2 class="title is-4">Conclusion</h2>
<p>There is a lot more to say about representation of content in files, both historically and the current best practices,
but I think this will be enough for now. I'll cover some related subjects later on.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: mounting host directory</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-24T07:03:01Z</updated>
    <pubDate>2022-11-24T07:03:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-mounting-host-directory" />
    <id>https://code-maven.com/docker-course-mounting-host-directory</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/YRqney9EQYU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Infinite scrolling and footer don&#39;t work well together (not even on DEV.to)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-23T07:30:01Z</updated>
    <pubDate>2022-11-23T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/infinite-scrolling-and-footer" />
    <id>https://code-maven.com/infinite-scrolling-and-footer</id>
    <content type="html"><![CDATA[<p>I like the <a href="https://dev.to/">DEV.to</a> website, I even <a href="https://dev.to/szabgab/">posted some articles there</a>, but the infinite scrolling on some of the
pages that also have a footer is driving me mad.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/LnW157GNMlg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Go to the page of this article on  <a href="https://dev.to/szabgab/infinite-scrolling-and-footer-dont-work-well-together-not-even-on-devto-3619">DEV.to</a> and press the END button on your keyboard.
It will jump to the bottom of the page where you'll see a footer with a number of links including one to <a href="https://www.forem.com/">Forem</a> the platform DEV runs on.</p>
<p>However, if you open the <a href="https://dev.to/">main page of DEV</a> or the listings of one of the <a href="https://dev.to/tags">tags</a>,
you will notice that after a very short period of time more content is loaded and the links disappear.
The automatic loading of additional content at the bottom of the page is called &quot;<em>infinite scrolling</em>&quot;.
Unfortunately this is rendering the footer unusable on these pages making the whole experience very frustrating.</p>
<p>So frustrating that I decided to write a whole post about it :-)</p>
<p>I seemed to remember that I already complained about it, but did not remember where. I was also wondering if it only frustrates me or others as well.</p>
<p>So I went to the GitHub repository of the project and found several related issues:</p>
<ul>
<li><a href="https://github.com/forem/forem/issues/11576">Infinte scrolling needs to be fix on homepage</a></li>
<li><a href="https://github.com/forem/forem/issues/9034">Footer should be viewable</a></li>
</ul>
<p>And a discussion <a href="https://github.com/forem/forem/discussions/15322">Footer should be viewable</a></p>
<p>I have not been able to read all the comments, but I am surprised this issue still exists. I think I'd just remove the footer from all the pages that have infinite scrolling.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: crontab</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-23T05:02:01Z</updated>
    <pubDate>2022-11-23T05:02:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-crontab" />
    <id>https://code-maven.com/docker-course-crontab</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/D7BE-Dyv_W8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: ENTRYPOINT vs CMD</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-22T06:01:01Z</updated>
    <pubDate>2022-11-22T06:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-entrypoint-vs-cmd" />
    <id>https://code-maven.com/docker-course-entrypoint-vs-cmd</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/PSxAMkZxjW8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: Install curl</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-21T16:25:01Z</updated>
    <pubDate>2022-11-21T16:25:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-install-curl" />
    <id>https://code-maven.com/docker-course-install-curl</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/FncEsWydGqw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://code-maven.com/slides/docker/docker-curl">Docker Install curl</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Reporting issues on GitHub (for Perl Advent)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-20T08:30:01Z</updated>
    <pubDate>2022-11-20T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/reporting-issues-on-github-for-perladvent" />
    <id>https://code-maven.com/reporting-issues-on-github-for-perladvent</id>
    <content type="html"><![CDATA[<p><a href="https://github.com/">GitHub</a> is used by many Open Source projects and corporations. In this video you can see
how to report issues (bug, errors) with an Open Source project. We happen to look at the web site of a Perl-based project,
but the same thing is relevant for any Open Source project and also any in-hous project that uses GitHub.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/6FuiM_e5Qlg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://metacpan.org/">MetaCPAN</a></li>
<li><a href="https://perladvent.org/">Perl Advent</a></li>
<li><a href="https://github.com/perladvent/Perl-Advent">Perl Advent on GitHub</a></li>
<li>Is it down for me?</li>
<li><a href="https://www.whatsmydns.net/">What is My DNS</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: COPY welcome.txt</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-19T07:15:01Z</updated>
    <pubDate>2022-11-19T07:15:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-copy-welcome" />
    <id>https://code-maven.com/docker-course-copy-welcome</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/TFN29o_mp8s" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://code-maven.com/slides/docker/docker-copy-welcome-file">Docker Ubuntu htop</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: Ubuntu htop</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-18T09:05:01Z</updated>
    <pubDate>2022-11-18T09:05:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-ubuntu-htop" />
    <id>https://code-maven.com/docker-course-ubuntu-htop</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/1hqKHJXxr3Q" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://code-maven.com/slides/docker/docker-ubuntu-htop">Docker Ubuntu htop</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: create image using Dockerfile</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-17T07:02:01Z</updated>
    <pubDate>2022-11-17T07:02:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-create-image-using-dockerfile" />
    <id>https://code-maven.com/docker-course-create-image-using-dockerfile</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/i4jXYKnU0fg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://code-maven.com/slides/docker/docker-empty-ubuntu">Create Docker image from Dockerfile</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: create image from container</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-16T21:01:01Z</updated>
    <pubDate>2022-11-16T21:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-create-image-from-container" />
    <id>https://code-maven.com/docker-course-create-image-from-container</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/ljXWRFoKZRg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://code-maven.com/slides/docker/create-your-own-docker-image">Create your own Docker image</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: Use Ubuntu Docker image</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-15T06:46:01Z</updated>
    <pubDate>2022-11-15T06:46:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-use-ubuntu-docker-image" />
    <id>https://code-maven.com/docker-course-use-ubuntu-docker-image</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/a7yCSgXupd4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://code-maven.com/slides/docker/">Use Ubuntu Docker image</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: Docker hub</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-14T15:05:01Z</updated>
    <pubDate>2022-11-14T15:05:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-docker-hub" />
    <id>https://code-maven.com/docker-course-docker-hub</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/k8nOS3gXWWk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://code-maven.com/slides/docker/docker-hub-images">Docker Hub</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: Exercise 1</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-13T09:22:01Z</updated>
    <pubDate>2022-11-13T09:22:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-exercise-1" />
    <id>https://code-maven.com/docker-course-exercise-1</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/DfQ-LW6T9GI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://code-maven.com/slides/docker/exercise-1">Docker Exercise 1</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: busybox part 2</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-12T21:03:01Z</updated>
    <pubDate>2022-11-12T21:03:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-busybox-part-2" />
    <id>https://code-maven.com/docker-course-busybox-part-2</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/zwfBIwaTnwM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://code-maven.com/slides/docker/run-and-remove-container">Run and remove Docker container</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: busybox</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-11T07:24:01Z</updated>
    <pubDate>2022-11-11T07:24:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-busybox" />
    <id>https://code-maven.com/docker-course-busybox</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/erwLS0DY9-4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/docker/">Slides</a></li>
<li><a href="https://code-maven.com/slides/docker/docker-busybox">Docker busybox</a></li>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: Hello World</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-10T22:01:01Z</updated>
    <pubDate>2022-11-10T22:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-hello-world" />
    <id>https://code-maven.com/docker-course-hello-world</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/ePuRkT0QUrE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Finally we get to the point where we actually start to use Docker.</p>
<p>On Linux and macOS open the Terminal, on Windows open the Command Prompt (click on the Windows button on your keyboard, type in &quot;cmd&quot; and press ENTER).
I'd also recommend you enlarge this window so you will see more content.</p>
<p>Type in the following command:</p>
<pre><code>docker run hello-world
</code></pre>
<p>At this point Docker will try to start a <b>container</b> using the latest version of the image called <b>hello-world</b>.
If this is the first time you try to do this, you won't have this images on your computer so you will see a warning:</p>
<pre><code>Unable to find image 'hello-world:latest' locally
</code></pre>
<p>Then Docker will automatically try to download the image from the <a href="https://hub.docker.com/">Docker HUB</a> and will let you know about this:</p>
<pre><code>latest: Pulling from library/hello-world
</code></pre>
<p>It shows you some progress and that it managed to download it:</p>
<pre><code>2db29710123e: Pull complete
Digest: sha256:c77be1d3a47d0caf71a82dd893ee61ce01f32fc758031a6ec4cf1389248bb833
Status: Downloaded newer image for hello-world:latest
</code></pre>
<p>Then it will start a Docker container based on the <b>hello-world:latest</b> image.</p>
<p>This will print some text on the screen starting with</p>
<pre><code>Hello from Docker!
</code></pre>
<p>The full output will look similar to this:</p>
<pre><code>Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:c77be1d3a47d0caf71a82dd893ee61ce01f32fc758031a6ec4cf1389248bb833
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the &quot;hello-world&quot; image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
</code></pre>
<p>Once the text is printed to the screen the container will stop running.</p>
<p>This is not a very sophisticated image, it can only print this text and has no further functionality.</p>
<h2 class="title is-4">After Hello World - check the status</h2>
<p>Before going on and trying to do more complex things with other images, let's look around to see what happened on the hard-disk of our computer.</p>
<p>Run</p>
<pre><code>docker ps -as
</code></pre>
<p>This will show you a report with a number of columns. The <b>-a</b> tells it to show <b>all</b> the containers and the <b>-s</b> told it to include the <b>SIZE</b> column.</p>
<p>This list all the containers that have ran and are still around on your disk.</p>
<p>IF this is a clean computer where you only ran the above command then this is more or less what you will see.</p>
<p>In the first column you will see the <b>CONTAINER ID</b>. This will be different as it is the ID of the container
which is the runtime version of the image. It changes from run to run.</p>
<p>The 2nd column is the name of the <b>IMAGE</b> which is <b>hello-world</b> as that's what we used.</p>
<p><b>COMMAND</b> is the command that was executed inside the container. This was the default command baked in the image.</p>
<p><b>CREATED</b> is the time when the container was created.</p>
<p><b>STATUS</b> is, well the status of the container. Currently it reports that this container has stopped running.</p>
<p><b>PORTS</b> is not interesting now.</p>
<p><b>NAME</b> holds the name of the <b>container</b>. If the user does not provide a name, and we did not provide a name, than docker will pick a random name created from two random words.</p>
<p><b>SIZE</b> is how much space the container takes up on the disk.</p>
<p>The command:</p>
<pre><code>docker ps -as
</code></pre>
<p>The output:</p>
<pre><code>CONTAINER ID   IMAGE        COMMAND   CREATED         STATUS                     PORTS  NAMES          SIZE
20dc20bcac8f   hello-world  &quot;/hello&quot;  31 minutes ago  Exited (0) 31 minutes ago         jovial_bouman  0B (virtual 13.3kB)
</code></pre>
<h2 class="title is-4">docker ps</h2>
<p>If I ran <b>docker ps</b> without the extra parameters then it would only show the titles as the command without the <b>-a</b> (all) flag only shows the currently running containers and ours has already finished running.</p>
<pre><code>docker ps -a
</code></pre>
<p>shows all the containers that are running and all the containers that have stopped but have not been deleted yet.</p>
<h2 class="title is-4">docker images</h2>
<p>If you type in</p>
<pre><code>docker images
</code></pre>
<p>you will see the list of images on your computer.</p>
<pre><code>REPOSITORY              TAG                IMAGE ID       CREATED         SIZE
hello-world             latest             feb5d9fea6a5   14 months ago   13.3kB
</code></pre>
<p>Here you can see the images that were downloaded or that were created locally.</p>
<p>You remember as we ran the <b>docker run ...</b> command docker told us that it cannot find the images locally and so it downloaded the image called <b>hello-world</b> with the <b>latest</b> tag.</p>
<p>In the first column you can see the name of the image. The second column is the tag. In this case it is <b>latest</b>.</p>
<p>The <b>IMAGE ID</b> is a short version of the unique ID of the image.</p>
<p><b>CREATED</b> shows when was the image created. In our case this is an image that was created 14 month ago.</p>
<p><b>SIZE</b> is the size of the whole image.</p>
<p>As you can see this is a really, really small image. Basically just the text we saw.</p>
<p>We can see that there are images and containers which are the runtime copies of the images.</p>
<h2 class="title is-4">Run Hello World again</h2>
<pre><code>docker run hello-world
</code></pre>
<p>This time it does not say that it can't find the image, and it does not need to download the image as we already have it locally.
It only prints the text starting with <b>Hello from Docker!</b>.</p>
<p>Now we take a look at the status of the containers:</p>
<pre><code>docker ps -as
</code></pre>
<p>The result will look something like this:</p>
<pre><code>CONTAINER ID   IMAGE        COMMAND   CREATED        STATUS                    PORTS NAMES             SIZE
f4b4ef0de525   hello-world  &quot;/hello&quot;  7 seconds ago  Exited (0) 6 seconds ago        focused_margulis  0B (virtual 13.3kB)
20dc20bcac8f   hello-world  &quot;/hello&quot;  8 minutes ago  Exited (0) 8 minutes ago        jovial_bouman     0B (virtual 13.3kB)
</code></pre>
<p>Now we have two lines. The second line is the same as we had earlier, except of the CREATED and STATUS columns that shows relative time and that has changed.</p>
<p>As you can see the <b>CONTAINER ID</b> is different in the two rows and the <b>NAMES</b> are different, but the <b>IMAGE</b> and the <b>COMMAND</b> are the same.</p>
<p>If we list the images using <b>docker images</b> we can see that the list of images has not changed. We still has that single image on our computer.</p>
<h2 class="title is-4">Remove container</h2>
<p>The last thing we would like to see now is how to get rid of these containers that were created and saved on the disk.</p>
<p>We can use the <b>CONTAINER ID</b> to remote a container.</p>
<pre><code>docker rm 20dc20bcac8f
</code></pre>
<p>If we run again</p>
<pre><code>docker ps -as
</code></pre>
<p>Then you can see that only one line remained:</p>
<pre><code>CONTAINER ID   IMAGE        COMMAND   CREATED        STATUS                    PORTS NAMES             SIZE
f4b4ef0de525   hello-world  &quot;/hello&quot;  27 seconds ago  Exited (0) 26 seconds ago      focused_margulis  0B (virtual 13.3kB)
</code></pre>
<p>We can also remove the other container in the same way after which there are no more containers left on the system as you can verify by running <b>docker ps -as</b> again.</p>
<h2 class="title is-4">Remove a Docker image</h2>
<p>The image is still there as you can see by running <b>docker images</b>.</p>
<p>In order to remove that we can use the <b>rmi</b> command:</p>
<pre><code>docker rmi hello-world
</code></pre>
<pre><code>Untagged: hello-world:latest
Untagged: hello-world@sha256:c77be1d3a47d0caf71a82dd893ee61ce01f32fc758031a6ec4cf1389248bb833
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
</code></pre>
<p>If we run again <b>docker images</b> then we can see it is gone.</p>
<h2 class="title is-4">Next</h2>
<p>Next we are going to see a slightly more complex example using the <b>busybox</b>, but before you go there I'd recommend you try the commands you just saw.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: Docker Registry</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-09T07:00:01Z</updated>
    <pubDate>2022-11-09T07:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-docker-registry" />
    <id>https://code-maven.com/docker-course-docker-registry</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/rkQc84L1qoI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>In this episode we are discussing the <a href="https://code-maven.com/slides/docker/docker-registry">Docker Registry</a>.
(See all the <a href="https://code-maven.com/slides/docker/">Slides</a>)</p>
<p>A Docker Registry is a place where people can upload their Docker images so others can use those images.
There are private and public registries. The main public registry is the <a href="https://hub.docker.com/">Docker Hub</a>
where you can upload public images for free and private images after certain payment.</p>
<p>The big cloud providers also have their own container registries which are integrated with their cloud offering.</p>
<p>For example there is the <a href="https://console.cloud.google.com/gcr/">GCR - Google Cloud Container Registry</a>,
the <a href="https://aws.amazon.com/ecr/">ECR - AWS Elastic Container Registry</a> and the <a href="https://azure.microsoft.com/en-us/products/container-registry/#overview">Azure Container Registry</a>.
The smaller players also offer it, for example there is the <a href="https://www.digitalocean.com/products/container-registry">Digital Ocean Container Registry</a>.</p>
<p>In these registries you can search for various Docker images.</p>
<p>For example visit the <a href="https://hub.docker.com/">Docker Hub</a> and search for <b>mongodb</b>. You'll find a number of images.
You can download them and use them and you will not have to worry yourself how to create a Docker image for many of the common services.</p>
<p>Then search for <b>Wordpress</b>. You'll find images that will make it easy to run Wordpress on your computer either locally or on a server.
You won't have to worry much about installation and configuration and relatively easily you'll be able to upgrade it to newer versions.</p>
<p>You can also create your account on <a href="https://hub.docker.com/">Docker Hub</a> and upload your own Docker images.
As long as the images are public you don't have to pay and I think you can also have one private image, but if you'd like
to have more than there is some fee involved.</p>
<p>The idea would be that you create and upload an image and then later you, some other members of your team, or even on your production server
you can download use that image.</p>
<p>Docker Hub is for the general use, but if you use one of the cloud providers then probably you should also use their Docker registry.</p>
<h2 class="title is-4">Set up your own registry</h2>
<p>If neither of those choices are good for you, for example because you'd like to have all the images in-house, you can
<a href="https://docs.docker.com/registry/deploying/">deploy your own registry server</a>.
It can be on premise, in the offices of your company or you can put it on some server elsewhere.</p>
<p>That's all for now about Docker registries. We are going to see them later on as all the images we are using are based on some other image that is in the Docker hub.</p>
<h2 class="title is-4">Hello World!</h2>
<p>The next episode will cover the <b>Hello World!</b> of Docker containers.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: host - daemon - client</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-08T06:02:01Z</updated>
    <pubDate>2022-11-08T06:02:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-host-daemon-client" />
    <id>https://code-maven.com/docker-course-host-daemon-client</id>
    <content type="html"><![CDATA[<p>In this episode we are going to learn about <a href="https://code-maven.com/slides/docker/docker-host-daemon-client">Docker host, daemon, and client</a>.</p>
<p>These are 3 entities involved in running Docker.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/6khOMKZ2Ny0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<h2 class="title is-4">Docker host</h2>
<p>Docker host is where at the end the Docker container will run. If your computer runs Linux then the Docker host is native.
It runs directly on your Linux machine. However if your container is a Linux-based container then on Windows and Mac OSX
it needs a Linux-based virtual machine to run on. So in this case we will have a virtual machine running on top of the operating
system that runs on our computer.</p>
<p>This means the performance is not going to be as good as if you were running it natively on Linux, but then on top of this
host, on the top of this virtual machine that runs on Windows or on OSX, you can have several Docker containers running.</p>
<h2 class="title is-4">Docker Daemon</h2>
<p>There is a <b>docker daemon</b> which is running on the host itself so it does not matter if your operating system is Linux or Windows or OSX
it is running on top of the host.</p>
<h2 class="title is-4">Docker Client</h2>
<p>Finally there is the Docker client, the one that you are actually interacting with, so when you type in <b>docker</b>, that's the Docker client
and that too runs on your Operating System that can be either Linux, OSX, or Windows.</p>
<p>So docker Daemon runs on the host, but the Docker client can run on another machine.
So one machine can have the client and then it can connect to the daemon running on some other host.</p>
<p>In this course we are going to run client and daemon on the same computer. So it's easier.</p>
<p>How do you start the daemon? You need to start the daemon in order to talk to it. The client you just type in <b>docker</b> and press ENTER. That's the client.</p>
<p>So we need to start the daemon which is just the Docker server. (For our purposes a daemon is just another word for a server.)</p>
<p>How do you do that?</p>
<p>It is depending on your installation.</p>
<p>In some cases the installation will configure the Docker daemon to start automatically when the computer boots. Depending on your use-case this might be the
preferable solution.</p>
<p>Sometimes you might prefer that it won't start together with the Operating System, so it won't use resources when you don't need it.
In that case you need to manually start the daemon.</p>
<p>On OSX you need to type in</p>
<pre><code>open -a Docker
</code></pre>
<p>to launch the Docker daemon.</p>
<p>On Linux you'd probably write</p>
<pre><code>sudo service docker start
</code></pre>
<p>On Windows you'll have an icon of the <b>Docker Desktop</b>. Just run that. It takes some time, maybe a minute to start it, but then the daemon is running.</p>
<p>Then you can use the Docker client (the <b>docker</b> command) in order to connect to the daemon and give it instructions.
Run those command that we saw in the help.</p>
<p>I think we have one more episode (video) before we start actually doing things with Docker because I'd like to talk a bit about the Docker Registry
before we start using Docker.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: getting help</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-11-07T15:41:01Z</updated>
    <pubDate>2022-11-07T15:41:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-getting-help" />
    <id>https://code-maven.com/docker-course-getting-help</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/m270lPL8eaw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>In order to <a href="https://code-maven.com/slides/docker/docker-help-cli">get help with Docker</a> you can use the following
commands:</p>
<pre><code>docker --help
docker help run
docker help ps
docker help images
docker help rm
docker help rmi
</code></pre>
<p>If you type in on the command line:</p>
<pre><code>docker --help
</code></pre>
<p>then you will see a list of the command available for Docker. You might need to scroll-up to see the beginning of the output
or on Linux and OSX you could run it through <code>less</code></p>
<pre><code>docker --help 2| less
</code></pre>
<p>You can ask for help by typing <code>docker help</code> and then the name of one of the commands so <code>docker help rmi</code> for example
and then it gives you some kind of an explanation of what does the <code>rmi</code> command do.</p>
<p>You will find a lot more detailed documentation on the web site of the <a href="https://docs.docker.com/">documentation of Docker</a>.
There you can search using the name of the command and find all kinds of documents.
For example the <a href="https://docs.docker.com/engine/reference/commandline/rmi/">reference page if docker rmi</a>.</p>
<p>That's basically how to get help, though you can just search on your <a href="https://duckduckgo.com/">favorite search engine</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: version and info</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-10-26T11:25:01Z</updated>
    <pubDate>2022-10-26T11:25:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-version-and-info" />
    <id>https://code-maven.com/docker-course-version-and-info</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/5SpRJd6IqOY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://github.com/szabgab/slides">Source of slides on GitHub</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
<p>Hello! In this episode ofthe Docker course of Code-Maven we are going to check out the first command in Docker.
Basically to see the version number and some information about Docker.</p>
<p>Normally, as usual the <a href="https://code-maven.com/slides/docker/">slides</a> are here
and we can get to the slide about <a href="https://code-maven.com/slides/docker/docker--version">Docker version</a>
where you can copy-paste the commands from.</p>
<p>At this time I am going also to show you on my command line.</p>
<h2 class="title is-4">docker --version</h2>
<p>So here you can see that if you type in <b>docker --version</b> in your terminal then you are supposed to get the output of Docker:</p>
<pre><code>Docker version 20.10.14, build a224086
</code></pre>
<p>In Windows you would probably open the CMD so you click on the &quot;Windows&quot; key and then you type in <b>cmd</b> and press ENTER.
That's how you get into the Windows terminal (Command Prompt).</p>
<p>On Linux you open a terminal.</p>
<p>On Mac you also open a terminal.</p>
<p>Just as I have it in the video.</p>
<p>In there you can type <b>docker --version</b>.</p>
<p>If you type in correctly, and sometime I do, then you get to see the current version number of Docker and that indicates that Docker is
available to you on the system now.</p>
<p>So that's one thing that you can do.</p>
<h2 class="title is-4">docker version</h2>
<p>Then you can get some more information by typing in <b>docker version</b> without the dashes.</p>
<p>In the previous command we had two dashes, this time we don't have dashes. This will show the
<a href="https://code-maven.com/slides/docker/docker-version">details</a> of the curently installed Docker.
This shows all kinds of information about the operating systema and so on.</p>
<h2 class="title is-4">docker info</h2>
<p>The last one to show is <b>docker info</b>. It will show a lot more information about the machine that hopefull you will not need any time soon.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: Install Docker</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-10-25T10:04:01Z</updated>
    <pubDate>2022-10-25T10:04:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-install-docker" />
    <id>https://code-maven.com/docker-course-install-docker</id>
    <content type="html"><![CDATA[<p>Hello and welcome to the Docker course of Code-Maven. My name is Gabor Szabo.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/3CbPCOx7-B0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>The <a href="https://code-maven.com/slides/docker/">slides</a> are in the usual place and we are
jumping ahead to the current slide: <a href="https://code-maven.com/slides/docker/install-docker">Install Docker</a>.</p>
<p>In order to use Docker you need to install it on your computer. On your local computer.</p>
<p>There are instructions on how to install Docker on all 3 of the major operating systems.
Here is the <a href="https://docs.docker.com/get-docker/">link</a> to them.
Just click on it to get to the place where you can download and install Docker from.</p>
<p>Obviously this page will change as time goes on. This time you can see you can install</p>
<ul>
<li>Docker Desktop for Mac.</li>
<li>Docker Desktop for Windows</li>
<li>Docker for Linux.</li>
</ul>
<p>The best is to follow the instructions there.</p>
<p>I'd like to point out a couple of things.</p>
<p>You could install Docker using <b>apt-get</b> or <b>yum</b> depending on the distribution of your Linux Operating System,
but probably it is better to use the installation method suggested in the Docker link because that way you'll get a better,
a newer version of Docker.</p>
<p>An one more thing for Linux. There is a link to the <a href="https://docs.docker.com/engine/install/linux-postinstall/">post installation for Linux</a>.</p>
<p>This is especially important if you start running Docker.</p>
<p>Normally you should be using your Linux machine as a regular user and not as root, but Docker needs special rights so it can access the kernel
in a special way. It is better not to run Docker as root so here some instructions on how to run Docker as non-root user.
So I am recommending that you follow these instructions. That's for Linux.</p>
<p>For Windows there are other things. Depending on the version of Windows you might be able to install the <a href="https://docs.docker.com/desktop/install/windows-install/"><b>Docker Desktop for Windows</b></a>
but there might be problems, especially if you are using older versions of Windows. In that case you might need to use the older version.</p>
<p>You have to check which version is working for you. In a minute or so we are going to see how you can actually check it out.</p>
<p>You can use the Command Prompt by running <b>cmd</b> and there you can type the <b>docker</b> command to see that Docker actually runs on your system.</p>
<p>We will have a separate recording especially for Windows, but for now let's hope that it already works for you.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Continuous Integration (CI)</title>
    <summary type="html"><![CDATA[Continuous Integration is one of the most valuable features you can add to your development process.]]></summary>
    <updated>2022-10-24T19:30:01Z</updated>
    <pubDate>2022-10-24T19:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci" />
    <id>https://code-maven.com/ci</id>
    <content type="html"><![CDATA[<p>Continuous Integration (commonly known as CI and usually talked about as part of a CI/CD pipeline) is one of the
most valuable features you can add to your software development process. The major git-hosting platforms
provide free, cloud-based CI running service, but there also various tools to set up in-house CI systems.</p>
<p>I provide help to individuals and teams with training, techniques, and tools for test automation, CI, and CD.</p>
<p>I try to help Open Source projects with the same services. This is helped by my <a href="https://szabgab.com/support.html">supporters</a>.
Both individuals and corporations.</p>
<p>In a separates series you can read and watch small <a href="/os">contributions to Open Source projects</a>.
Mostly configuring CI systems and adding automated tests.</p>
<h2 class="title is-4">Generic CI-related</h2>
<ul>
<li><a href="/ci-notification-strategy">CI notification strategy</a></li>
<li><a href="/devop-and-automation-questions">DevOps, CI/CD, and Automation assessment questions</a></li>
</ul>
<h2 class="title is-4">GitHub</h2>
<ul>
<li><a href="/setting-up-ci-and-docker-for-course-management-app">DevOps work - setting up CI and Docker for the course management project with Thomas Klausner</a></li>
</ul>
<h2 class="title is-4">GitLab</h2>
<ul>
<li><a href="/exploring-gitlab-ci">Exploring GitLab CI</a></li>
<li><a href="/gitlab-ci-job-building-docker-image">GitLab CI job building a Docker image</a></li>
<li><a href="/gitlab-ci-testing-docker-image">Testing a Docker image created by GitLab CI</a></li>
<li><a href="/build-docker-image-in-gitlab-pipeline">Build Docker image in GitLab CI/CD pipeline</a></li>
</ul>
<h2 class="title is-4">BitBucket</h2>
<ul>
<li><a href="/limit-bitbucket-pipelines-to-specific-branches">Limit Bitbucket pipelines to specific branches</a></li>
</ul>
<h2 class="title is-4">Travis-CI</h2>
<p>Since writing these post Travis has stopped supporting Open Source projects free of charge.</p>
<ul>
<li>
<p><a href="/travis-ci-why-use-continuous-integration">Travis-CI: Why use Continuous Integration?</a></p>
</li>
<li>
<p><a href="/enable-travis-ci-for-continous-integration">Enable Travis-CI for Continuous Integration</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Hello World with Rust and Cargo</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-10-21T13:00:01Z</updated>
    <pubDate>2022-10-21T13:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rust-cargo-hello-world" />
    <id>https://code-maven.com/rust-cargo-hello-world</id>
    <content type="html"><![CDATA[<p>In this short video we'll see how to create a <b>Hello World!</b> program using the <a href="https://www.rust-lang.org/">Rust Programming language</a>
and the <a href="https://doc.rust-lang.org/cargo/">Cargo</a> package manager.</p>
<p>Create a new project with the brilliant name &quot;abcd&quot;</p>
<pre><code>cargo new abcd
</code></pre>
<pre><code>cd abcd
</code></pre>
<p>The directory layout:</p>
<pre><code>.
├── Cargo.toml
└── src
    └── main.rs
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rust/abcd/Cargo.toml">examples/rust/abcd/Cargo.toml</a></strong></p>
<pre><code class="language-toml">[package]
name = &quot;abcd&quot;
version = &quot;0.1.0&quot;
edition = &quot;2021&quot;

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rust/abcd/src/main.rs">examples/rust/abcd/src/main.rs</a></strong></p>
<pre><code class="language-rust">fn main() {
    println!(&quot;Hello, world!&quot;);
}

</code></pre>
<p>Compile and run your program:</p>
<pre><code>cargo run
</code></pre>
<iframe width="560" height="315" src="https://www.youtube.com/embed/_JNhVlHot4k" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Add GitHub Actions to the scale_rb Ruby project</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-10-13T09:30:01Z</updated>
    <pubDate>2022-10-13T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/github-actions-for-scale-ruby-project" />
    <id>https://code-maven.com/github-actions-for-scale-ruby-project</id>
    <content type="html"><![CDATA[<p>After implementing the initial version of <a href="https://ruby-digger.code-maven.com/">Ruby Digger</a>
I found the <a href="https://github.com/wuminzhe/scale_rb">scale_rb</a> project that had a link to its GitHub repository,
but no Continuous Integration configured yet.</p>
<p>I thought this could be a good opportunity to see how is the GitHub Actions configuration file offered by GitHub itself.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/mMuuCHiWRMM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>I made a few changes to the default file, specifically I have removed some comments and enabled the job an all branches,
not only on the main branch of the project.</p>
<p>This was also important as it is usually better to work on a branch before sending a pull-request.</p>
<p>I committed the change to a branch I called CI.</p>
<p>The first run of the GitHub Actions failed for Ruby 3.0 and was cancelled for Ruby 2.6 and 2.7.
Then I added <b>fail-fast: false</b> to allow all the jobs to run till completition (or failure).</p>
<p>This allowed me to see that the tests pass on Ruby 2.6 and 2.7.</p>
<p>In the next change I've disabled Ruby 3.0 and sent the pull-request with the following file:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/scale_rb_ci.yml">examples/scale_rb_ci.yml</a></strong></p>
<pre><code class="language-yaml">name: Ruby

on:
  push:
  pull_request:

permissions:
  contents: read

jobs:
  test:

    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        ruby-version: ['2.6', '2.7'] # , '3.0'

    steps:
    - uses: actions/checkout@v3
    - name: Set up Ruby
    # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
    # change this to (see https://github.com/ruby/setup-ruby#versioning):
    # uses: ruby/setup-ruby@v1
      uses: ruby/setup-ruby@0a29871fe2b0200a17a4497bae54fe5df0d973aa # v1.115.3
      with:
        ruby-version: ${{ matrix.ruby-version }}
        bundler-cache: true # runs 'bundle install' and caches installed gems automatically
    - name: Run tests
      run: bundle exec rake

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Add GitHub actions to the xhash project written in Go</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-10-11T15:00:01Z</updated>
    <pubDate>2022-10-11T15:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/github-actions-for-golang-xhash" />
    <id>https://code-maven.com/github-actions-for-golang-xhash</id>
    <content type="html"><![CDATA[<p>I went to the <a href="https://github.com/topics/golang?o=desc&amp;s=updated">golang</a> topic of GitHub sorted by &quot;Recently updated&quot; and looked
at repositories that do not yet have a lot of stars. Most likely they are at an early stage so it might be easier to contribute simple things,
such as tests and GitHub Action configurations.</p>
<p>I found <a href="https://github.com/ricardobranco777/xhash">xhash</a> package.</p>
<p>As this is the first time I am adding GitHub Actions to a project written in Go I got a bit luck as this one had a Dockerfile
and a Makefile. Thus it was quite obvious how to run the tests.</p>
<pre><code>make
make test
</code></pre>
<p>I also looked at a more popular Golang project to see what they have and based on that I got the following config file
that I saved as <b>.github/workflows/ci.yml</b>. Besides a small typo I got it right and now the CI runs and tests the
code on 6 different platforms.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/xhash-ci.yml">examples/xhash-ci.yml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        runner: [ubuntu-latest, macos-latest, windows-latest]
        go: [ '1.18', '1.19' ]

    runs-on: ${{matrix.runner}}
    name: OS ${{matrix.runner}} Go ${{matrix.go}}

    steps:
    - uses: actions/checkout@v2

    - name: Install Go
      uses: actions/setup-go@v3
      with:
        go-version: ${{ matrix.go }}
        check-latest: true

    - name: Show Go Version and environment
      run: |
        go version
        go env

    - name: Install dependencies
      run: |
        make

    - name: Run tests
      run: |
        make test

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: container vs. image</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-10-02T09:03:01Z</updated>
    <pubDate>2022-10-02T09:03:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-container-vs-images" />
    <id>https://code-maven.com/docker-course-container-vs-images</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/OIWd6jZrYBc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Welcome back to the Code-Maven Docker course.</p>
<p>In this video we are going to learn about the difference between <b>Docker containers</b> and <b>Docker images</b>.</p>
<p>When people are talking about Docker, they usually use word container, but there are basically two main things: containers and images.</p>
<p>They are very similar, but slightly different.</p>
<p>The <a href="https://code-maven.com/slides/docker/">slides</a> as usual and jumping right to the current slide:
<a href="https://code-maven.com/slides/docker/docker-container-image">Docker container vs. image</a>.</p>
<p>So the big difference, or the way you could express this is basically that they are the same thing in different phases in their life.</p>
<p><b>A container can be seen as the run-time version of an image.</b></p>
<p>So when you create something, at the end you create an image and you store it on the disk and when you use it, it becomes a container.
It is called a container.</p>
<p>So basically just like a Linux image, like an ISO file, for a Virtual Machine and that's frozen, you can save it on the disk
and then when you start running it, it becomes a container.</p>
<p>It's a copy of the image, but when it is running.</p>
<p>If you are thinking in programming terms then some people like to compare it to the class and the instance.
In Python it is the class object and the instance object in other languages it's class and instance.</p>
<p>The class is the definition of the things, and the instance is what being used during the runtime.
So this is sort of the same with containers and images.</p>
<p>If it wasn't clear now, that's ok. You can come back and understand it later and I am sure as we go along
it will be clearer, much clearer later on.</p>
<p>So thank you for listening and goto the next video.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: What is Docker?</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-10-01T10:02:01Z</updated>
    <pubDate>2022-10-01T10:02:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-what-is-docker" />
    <id>https://code-maven.com/docker-course-what-is-docker</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/eKJWEVFKNLg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Welcome back to the Code-Maven Docker course.</p>
<p>This time we'll cover the question <b>What is really Docker?</b>.</p>
<p>A reminder the links to the <a href="https://code-maven.com/slides/docker/">slides</a> and my name is Gabor Szabo.</p>
<p>I am jumping right to the current slide which is quite short. The question: <a href="https://code-maven.com/slides/docker/what-is-docker">What is Docker?</a>.</p>
<p>Usually people who create a slide like this to talk about the subject, put an image of a container on it because they talk about containerization
so Docker, ....</p>
<p>If you are familiar with Virtual Server then Docker is basically a light-weight Virtual Server (VirtualBox).</p>
<p>It is described as a container. It is something you can put into stuff, your software basically.
You put in different pieces of your software, your libraries, your code and so on.
In a different container you'd put your database.
In a different container you'd put your web-server and so on.</p>
<p>And then you'd use together all these containers.</p>
<p>So basically it is, if you are familiar with VMware, it is a very light-weight version of it.
The point of being lightweight is that you can put many of these on the same machine, many more than you would
be able to run with Virtual Servers.</p>
<p>So basically that's it. It's not some kind of a magic. You'll see in the course how you can create these Docker containers
and how can you use them eventually.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course: Why use Docker?</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-09-30T08:01:01Z</updated>
    <pubDate>2022-09-30T08:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-why-use-docker" />
    <id>https://code-maven.com/docker-course-why-use-docker</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/CLr_VFMZf7E" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Hello and welcome back to the Code-Maven Docker course. My name is Gabor Szabo.</p>
<p>In this episode we are going to ask the question <b>Why to use Docker at all?</b></p>
<p>Remember this is the place where you can find the <a href="https://code-maven.com/slides/docker/">slides</a>
and I ma going directly to the page where we are discussing <a href="https://code-maven.com/slides/docker/why-use-docker">Why to use Docker?</a>.</p>
<p>One of the biggest problems that software development encounters is the different types of environments where we run our software.</p>
<p>So there are the developers who develop the application on some desktop system which is usually either Windows or Mac. Sometimes Linux, but usually
it is either Windows or Mac and then there might be some QA people who are checking the software - Quality Assurance (QA) and they might install
it on some environment which might resemble more the actual production environment, but it's still different from the production environment.
Which is probably some Linux server somewhere in the cloud and which has different capabilities.</p>
<p>The Operating System is different of course, the computers have different capabilities, have different rights, different rights to transfer data and so on.</p>
<p>So these differences make it really hard to make sure that the software that was running on the developer's machine will actually behave well
on the production server as well.</p>
<p>In addition there is what we usually call the &quot;<b>dependency hell</b>&quot;. An application depends on something and then another part of the same application
depends on the same thing, but might depend on a different version of that thing. So there is a common library let's say.</p>
<p>How can you run these two parts of the application on the very same server?</p>
<p>So this issue is really, really difficult. One of the solutions is of course to force everyone to use the same exact version, but that
usually means that people use the old version of something.
A much better way is to use some kind of a virtualization like Docker that allows that allows us to separate the various parts of the application
and each application (each part) can declare and use its own dependencies and can move forward with the dependencies as they feel fit. At their speed.
So that's another thing.</p>
<p>And the third thing that's really hard in many development companies or many companies is what we call on-boarding of new employees or new developers.</p>
<p>In a reasonably large application to set up an environment, a development environment, might take days or weeks even and it might have been documented,
maybe people need to go around and ask other people how to setup things and usually most of the people who get in these companies they will have a long
long time, maybe months or years till they figure out all kinds of issues that don't work on their environment because they did not set it up the
way it should have been set up. Or the ways other set up.</p>
<p>Docker, or in general virtualization can help us solve all of these problems. So the question of on-boarding.</p>
<p>So Docker and in general containerization or virtualization, but specifically Docker can allow us to create a standard environment
in which we develop the code, check the code (quality assurance), and deploy the code. And then the differences, well they won't disappear,
but they will be much smaller.</p>
<p>The same with on-boarding people. Once we have the standardized environment we can run on it, we can just tell the people to just
download this standardized environment and run it.</p>
<p>They still have plenty of things to set up. Maybe their editor or IDE or all kinds of other things, but at least they don't have to waste
so much time and energy by setting up their environment.</p>
<p>So that's about the <b>Why Docker</b> and we can go on now trying to figure out what Docker is.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker course intro</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-09-29T08:00:01Z</updated>
    <pubDate>2022-09-29T08:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-course-intro" />
    <id>https://code-maven.com/docker-course-intro</id>
    <content type="html"><![CDATA[<p>Hello and welcome to the Code-Maven Docker course. My name is Gabor Szabo.
This is the first video that you'll see and this is an administrative video.
Later we'll get into the actual content of the Docker course.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/W57v02jhyO8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Now what you are seeing is the opening page with a couple of links and these links are important.</p>
<p>The first link you can see here leads to the <a href="https://code-maven.com/slides/docker/">slides</a>
that we are going to utilize during the course.</p>
<p>I am going to click on this now so you can see. The link will be under the video as well so you'll be able to find
it easily, but I wanted to show you how it looks like.</p>
<p>So these are the slides which are on my web-site and these slides are available for everyone and will be available all
the time.
One of the things that you can do on these slides is press the question mark (<b>?</b>) that you can see at the top,
so I pressed the question mark and you can see all kinds of buttons for navigation.</p>
<p>I am going to go ahead a little bit here because one of the most important thing that you might want to click on is
the <b>h</b> key which you can also see here at the bottom. So the <b>h</b> button will open some extra text here.</p>
<p>In many slides, but not all of them, but in many slides there will be extra text and this text is going to grow
during the recording of the video course and therefore it will be there afterwards as well.
So you'll be able to read this extra text and then it will be able to help you even beyond the videos.
So that's part of the slides.</p>
<p>Then another thing is that in these slides you'll see a lot of examples. Each one of them is a file. Many of them will be files.
You'll see the names of the files somewhere in the slide and instead of copy-pasting from the slide that might be less comfortable
in many cases, I made it available.</p>
<p>So the link at the bottom (of the main page) you can see a link to the <a href="https://github.com/szabgab/slides">source of slides on GitHub.com</a>.
So all the slides and all the examples from all the courses I have are available in this repository and you can download by either just regularly cloning it:
You click on this link and then clone it:</p>
<pre><code>git clone https://github.com/szabgab/slides.git
</code></pre>
<p>If you are familiar with git and know how to do it.</p>
<p>Or, if you are not familiar with git, then you can also click on the big green button called <b>Clone or download</b> and download it as a zip file.</p>
<p>This way you'll get the most recent version of everything, but it will be a little bit harder to update things because you'll have to come here and download
it again and again, but you don't need to clone it.</p>
<p>So that's it.</p>
<p>Inside you'll see the material of all of my courses, specifically the <b>docker</b> is the one you are going to look at at this time.</p>
<p>So that's it basically at the beginning.  Then you'll see various videos feel free to jump around and see if some part you already know
then jump ahead if you feel that you are looking for something specific then look at that video and then come back later as you prefer.</p>
<p>Good luck with this training course.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Go Course: Install the Go compiler</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-09-23T11:10:01Z</updated>
    <pubDate>2022-09-23T11:10:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/golang-install-go-compiler" />
    <id>https://code-maven.com/golang-install-go-compiler</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/kC6f-y9z5XI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Go Course: Go and Open Source</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-09-20T08:31:01Z</updated>
    <pubDate>2022-09-20T08:31:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/golang-go-and-open-source" />
    <id>https://code-maven.com/golang-go-and-open-source</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/auoj4g3hsW4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Patch rdfind, a C++ project to avoid checksum checking</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-09-19T13:30:01Z</updated>
    <pubDate>2022-09-19T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/patch-rdfind-cpp-checksum" />
    <id>https://code-maven.com/patch-rdfind-cpp-checksum</id>
    <content type="html"><![CDATA[<p>Recently I was trying to clean up my backup disks and realized I have a mess.
So first I started to upload everything to Dropbox, but soon I realized I have lots of files in 2, 3, sometimes even 4 copies.
I was looking for a tool that will allow me to locate the duplicate files and found <a href="https://rdfind.pauldreik.se/">rdfind</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/HJ9sHwZnOSQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>It is nince. It first goes over the directory structure I give it on the command line and then starts to filter files.</p>
<ul>
<li>First it will eliminate all the files that have a unique size</li>
<li>Then it will compare the first few bytes of the files that have the same size</li>
<li>Then it will compare the last few bytes of the file that have the same size</li>
<li>Finally, among the still remaining candidates for equality it will compare their checksum using md4 or sha1</li>
</ul>
<p>The problem I had is that I have many huge files. Quite a few are larger than 1 Gb and many over 10 Gb. I have about 2TB data.</p>
<p>It takes a lot of time to go over all the files, especially computing the checksums takes a lot of time as the files need to be read.</p>
<p>Add to the injury that many of these files are still located on slow-to-access external disks.</p>
<p>I thought it would be better if I could skip the checksum step, but there was no such flag.</p>
<p>So what can I do.</p>
<p>First I <a href="https://github.com/pauldreik/rdfind/issues/118">opened a ticket</a> explaining my issue, but then I thought, what if I
try to implement it?</p>
<p>I clones the source code. It seems it is written in C++. I've never written C++ and even with C I have very little experience.</p>
<pre><code>git clone git@github.com:pauldreik/rdfind.git
</code></pre>
<h2 class="title is-4">Try to compile</h2>
<p>The next thing I had to find is how to compile the code. After a few failed experiments I ran</p>
<pre><code>grep release *
</code></pre>
<p>and found the <code>release_new_version.txt</code> that contained the instructions:</p>
<pre><code>git clean -xdf .
./bootstrap.sh
./configure
make dist-gzip
</code></pre>
<p>The first problem I encountered was a missing package. I had to install it:</p>
<pre><code>sudo apt-get install nettle-dev
</code></pre>
<p>Then I bumped intor the following error when running <b>make</b>:</p>
<pre><code>$ make
make  all-am
make[1]: Entering directory '/home/gabor/work/rdfind'
g++ -DHAVE_CONFIG_H -I.     -g -O2 -MT rdfind.o -MD -MP -MF .deps/rdfind.Tpo -c -o rdfind.o rdfind.cc
rdfind.cc: In function ‘Options parseOptions(Parser&amp;)’:
rdfind.cc:225:30: error: ‘numeric_limits’ is not a member of ‘std’
  225 |     o.maximumfilesize = std::numeric_limits&lt;decltype(o.maximumfilesize)&gt;::max();
      |                              ^~~~~~~~~~~~~~
rdfind.cc:225:45: error: expected primary-expression before ‘decltype’
  225 |     o.maximumfilesize = std::numeric_limits&lt;decltype(o.maximumfilesize)&gt;::max();
      |                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~
make[1]: *** [Makefile:658: rdfind.o] Error 1
make[1]: Leaving directory '/home/gabor/work/rdfind'
make: *** [Makefile:537: all] Error 2
</code></pre>
<p>Luckily a little search for the error message brought me to <a href="https://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1826627.html">this page</a>.
Not surprisingly I am not the first one to see this error. Better yet, apparently it has already been fixed in a branch.</p>
<p>So I using <code>git branch -a</code> I checked and saw that there is a branch called <b>devel</b>. I switched to that branch and ran the whole process again.
This time <code>make</code> worked and it create a file called <code>rdfind</code> in the root directory of the project.</p>
<p>Now that I knew I can compile and build the executable I started to look at the code.</p>
<p>First I wanted to find where it processes the command-line parameters so I'll be able to add a parameter called <code>-nochecksum</code>.</p>
<p>I searched for the string &quot;argv&quot; as that is the name of the variable that holds the command-line parameters in many languages.
Quite soon I found that is it in the <code>rdfind.cc</code> file.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rdfind-checksum.diff">examples/rdfind-checksum.diff</a></strong></p>
<pre><code class="language-diff">commit d3c6a523bf531fe4bf46c8b13397b111b3fb6634
Author: Gabor Szabo &lt;gabor@szabgab.com&gt;
Date:   Thu Sep 15 14:37:50 2022 +0300

    allow for '-checksum none' to disable checksum filtering. #118

diff --git a/rdfind.cc b/rdfind.cc
index 64dd8f6..cd35314 100644
--- a/rdfind.cc
+++ b/rdfind.cc
@@ -61,7 +61,7 @@ usage()
     &lt;&lt; &quot; -followsymlinks    true |(false) follow symlinks\n&quot;
     &lt;&lt; &quot; -removeidentinode (true)| false  ignore files with nonunique &quot;
        &quot;device and inode\n&quot;
-    &lt;&lt; &quot; -checksum           md5 |(sha1)| sha256\n&quot;
+    &lt;&lt; &quot; -checksum           md5 |(sha1)| sha256 | none\n&quot;
     &lt;&lt; &quot;                                  checksum type\n&quot;
     &lt;&lt; &quot; -deterministic    (true)| false  makes results independent of order\n&quot;
     &lt;&lt; &quot;                                  from listing the filesystem\n&quot;
@@ -103,6 +103,7 @@ struct Options
   bool followsymlinks = false;        // follow symlinks
   bool dryrun = false;                // only dryrun, don't destroy anything
   bool remove_identical_inode = true; // remove files with identical inodes
+  bool checksum = true;      // use some checksum
   bool usemd5 = false;       // use md5 checksum to check for similarity
   bool usesha1 = false;      // use sha1 checksum to check for similarity
   bool usesha256 = false;    // use sha256 checksum to check for similarity
@@ -174,8 +175,10 @@ parseOptions(Parser&amp; parser)
         o.usesha1 = true;
       } else if (parser.parsed_string_is(&quot;sha256&quot;)) {
         o.usesha256 = true;
+      } else if (parser.parsed_string_is(&quot;none&quot;)) {
+        o.checksum = false;
       } else {
-        std::cerr &lt;&lt; &quot;expected md5/sha1/sha256, not \&quot;&quot;
+        std::cerr &lt;&lt; &quot;expected md5/sha1/sha256/none, not \&quot;&quot;
                   &lt;&lt; parser.get_parsed_string() &lt;&lt; &quot;\&quot;\n&quot;;
         std::exit(EXIT_FAILURE);
       }
@@ -237,8 +240,10 @@ parseOptions(Parser&amp; parser)
   // done with parsing of options. remaining arguments are files and dirs.
 
   // decide what checksum to use - if no checksum is set, force sha1!
-  if (!o.usemd5 &amp;&amp; !o.usesha1 &amp;&amp; !o.usesha256) {
-    o.usesha1 = true;
+  if (o.checksum) {
+    if (!o.usemd5 &amp;&amp; !o.usesha1 &amp;&amp; !o.usesha256) {
+      o.usesha1 = true;
+    }
   }
   return o;
 }
@@ -356,17 +361,19 @@ main(int narg, const char* argv[])
     { Fileinfo::readtobuffermode::READ_FIRST_BYTES, &quot;first bytes&quot; },
     { Fileinfo::readtobuffermode::READ_LAST_BYTES, &quot;last bytes&quot; },
   };
-  if (o.usemd5) {
-    modes.emplace_back(Fileinfo::readtobuffermode::CREATE_MD5_CHECKSUM,
-                       &quot;md5 checksum&quot;);
-  }
-  if (o.usesha1) {
-    modes.emplace_back(Fileinfo::readtobuffermode::CREATE_SHA1_CHECKSUM,
-                       &quot;sha1 checksum&quot;);
-  }
-  if (o.usesha256) {
-    modes.emplace_back(Fileinfo::readtobuffermode::CREATE_SHA256_CHECKSUM,
-                       &quot;sha256 checksum&quot;);
+  if (o.checksum) {
+    if (o.usemd5) {
+      modes.emplace_back(Fileinfo::readtobuffermode::CREATE_MD5_CHECKSUM,
+                         &quot;md5 checksum&quot;);
+    }
+    if (o.usesha1) {
+      modes.emplace_back(Fileinfo::readtobuffermode::CREATE_SHA1_CHECKSUM,
+                         &quot;sha1 checksum&quot;);
+    }
+    if (o.usesha256) {
+      modes.emplace_back(Fileinfo::readtobuffermode::CREATE_SHA256_CHECKSUM,
+                         &quot;sha256 checksum&quot;);
+    }
   }
 
   for (auto it = modes.begin() + 1; it != modes.end(); ++it) {

</code></pre>
<p>At the end I felt it is better to change the already existing <code>-checksum&lt;/hl</code> flag and allow it to receive the value &quot;none&quot;
to avoid the checsum calculations.</p>
<p>I was lazy and did not add any new tests, but it could be done later if the author of the code requests it.</p>
<p>After making the change I pushed out the code to my forked repository of the project. The GitHub Actions were triggered and I saw that
all the tests pass.</p>
<p>I was very pleasantly surprised by the ease of finding the instructions how to build the code, the existing tests and the ease to make
the adjustments.</p>
<p>We'll see if the Pull-Request is accepted.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Go Course: Why use Go? The features of Golang</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-09-18T07:30:01Z</updated>
    <pubDate>2022-09-18T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/golang-why-use-go-the-features-of-golang" />
    <id>https://code-maven.com/golang-why-use-go-the-features-of-golang</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/uuRm7pIh5fs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Go Course: Getting started with the Golang course</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-09-15T06:30:01Z</updated>
    <pubDate>2022-09-15T06:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/golang-getting-started-with-the-course" />
    <id>https://code-maven.com/golang-getting-started-with-the-course</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/f6QUnRMD7nA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>OS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-09-14T13:15:01Z</updated>
    <pubDate>2022-09-14T13:15:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/os" />
    <id>https://code-maven.com/os</id>
    <content type="html"><![CDATA[<p>Videos on contributing to Open Source projects.</p>
<ul>
<li>
<p><a href="/introduce-ci-to-starpy">Introduce Continuous Integration (CI) to the starpy Python project</a></p>
</li>
<li>
<p><a href="/fix-url-to-repository-glob-linters">Fix URL to repository of the glob-linters Python project</a></p>
</li>
<li>
<p><a href="/patch-rdfind-cpp-checksum">Patch rdfind, a C++ project, allowing the user to disable checksum comparision</a></p>
</li>
<li>
<p><a href="/python-testing-interval-timer">Testing interval-timer, a Python module</a></p>
</li>
<li>
<p><a href="/make-it-easy-to-setup-ci-environment-python-once-utils">Make it easy to setup CI environment - python (once-utils)</a></p>
</li>
<li>
<p><a href="/python-helper-let-all-ci-jobs-fail-separately">Python helper: Let all CI jobs fail separately</a></p>
</li>
<li>
<p><a href="/python-automated-test-for-sssimp-simple-static-generator">Automated test for sssimp, a simple static site generator in Python</a></p>
</li>
<li>
<p><a href="/github-actions-for-golang-xhash">Add GitHub actions to the xhash project written in Go</a></p>
</li>
<li>
<p><a href="/github-actions-for-scale-ruby-project">Add GitHub Actions to the scale_rb Ruby project</a></p>
</li>
<li>
<p>All the Perl-related projects, videos, and blog posts are on the <a href="https://perlmaven.com/os">Perl Maven web site</a></p>
</li>
</ul>
<h2 class="title is-4">How to find Open Source projects</h2>
<p>A few ideas on how to find projects to contribute to.</p>
<ul>
<li>Python: On <a href="https://pydigger.com/">PyDigger</a> find projects that have <a href="https://pydigger.com/search/has-github-no-ci">Link to GitHub, but no CI</a></li>
<li>Perl: The <a href="https://github.com/szabgab/CPAN-Digger">CPAN Digger</a> project has a script called bin/cpan-digger that can create a report with some logs of recently uploaded Perl modules.</li>
<li>In general: Visit the <a href="https://github.com/topics">Explore topics</a> page of GitHub, select a topic, select the language, sort by &quot;Recently uploaded&quot;. In the list look for projects with few stars. They are probably the newer
ones with less things already in place. For example this is the link for <a href="https://github.com/topics/go?l=go&amp;o=desc&amp;s=updated">Go</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Fix URL to repository of the glob-linters Python project</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-09-14T12:50:01Z</updated>
    <pubDate>2022-09-14T12:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/fix-url-to-repository-glob-linters" />
    <id>https://code-maven.com/fix-url-to-repository-glob-linters</id>
    <content type="html"><![CDATA[<p>While looking for another Python project to add CI to, I encountered the <a href="https://github.com/bowentan/glob-linters/">glob-linters</a> project
that and incorrect GitHub URL in its configuration files. So before I even get to check if it has tests I went
ahead and fixed the URL.</p>
<p>The video started at the <a href="https://pydigger.com/">PyDigger</a> project.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/KXOcMD4B3Jo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Introduce Continuous Integration (CI) to the starpy Python project</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-09-13T14:30:01Z</updated>
    <pubDate>2022-09-13T14:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/introduce-ci-to-starpy" />
    <id>https://code-maven.com/introduce-ci-to-starpy</id>
    <content type="html"><![CDATA[<p>One of the first thing I do when start working on a project (either open source or in a corporation) is to make sure the
is a Continuous Integration system set up. In this video you will see how I added GitHub Actions to the
<a href="https://github.com/Equal-Vote/starpy/">starpy</a> project.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/d6815sRIZ-Q" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>The points I made</p>
<ul>
<li>Make sure you have the python requirements listed in the <code>requirements.txt</code> file</li>
<li>Make sure you can run <code>pytest</code> and it will find your tests. (test filenames start with <code>test_*</code></li>
<li>Having a README.md is also a nice thing with instruction how to set up an environment and how to run the tests.</li>
</ul>
<p>This is the content of the <code>.github/workflows/ci.yaml</code> file from the project that configures GitHub Actions.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/starpy/ci.yaml">examples/starpy/ci.yaml</a></strong></p>
<pre><code class="language-yaml">name: CI

on:
  push:
  pull_request:

jobs:
  build_python:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [&quot;3.7&quot;, &quot;3.8&quot;, &quot;3.9&quot;, &quot;3.10&quot;]

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install dependencies
      run: pip install -r requirements.txt

    - name: Check Python version
      run: python -V

    - name: Test with pytest
      run: pytest -vs


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Convert any script to a Linux service (daemon)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-08-21T09:30:01Z</updated>
    <pubDate>2022-08-21T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/convert-to-linux-service" />
    <id>https://code-maven.com/convert-to-linux-service</id>
    <content type="html"><![CDATA[<p>A <b>service</b> or in Unix/Linux terms a <b>daemon</b> is a program that continuously runs in the background.
Sometimes it listens to some port or some events and based on the input does something.
Sometimes it uses the internal clock of the computer to execute some functions periodically.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/nyPrRKHMYzY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>There are many well known services that either run on your computer by default or you can install them.
The former might be the service waiting for you to type in your username and password on the terminal to log in,
or waiting for an ssh connection, or running your cron jobs. The latter might be a web-server, a database server.
(Things that are called servers are usually installed as services so they would run in the background.)</p>
<p>Services are usually configured to start when the computer boots up to be able to provide service even without
the login of any user.</p>
<h2 class="title is-4">How can we create a service / daemon?</h2>
<p>The following file is just a very simple script that will print the timestamp in a file every 1 second.
There is noting special about it.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/daemon/timestamp.py">examples/daemon/timestamp.py</a></strong></p>
<pre><code class="language-python">import datetime
import time
import sys

param = &quot;&quot;

if len(sys.argv) &gt; 1:
  param = sys.argv[1]

while True:
   with open(&quot;/tmp/timestamp.log&quot;, &quot;a&quot;) as fh:
       fh.write(param + ' ' + str(datetime.datetime.now()) + &quot;\n&quot;)
   time.sleep(1)


</code></pre>
<p>You can run the script on the command line:</p>
<pre><code>python examples/daemon/timestamp.py
</code></pre>
<p>and then in a <b>separate terminal</b> you can observe the file growing by running the following command:</p>
<pre><code>tail -f /tmp/timestamp.log
</code></pre>
<p>In order to stop the script you need to switch back to the first terminal and press <b>Crtl-C</b>.</p>
<p>Then you can try to run the script with some parameter. e.g.:</p>
<pre><code>python examples/daemon/timestamp.py hello
</code></pre>
<p>And switch to the 2nd terminal to observe the output.</p>
<h2 class="title is-4">The service / daemon configuration file</h2>
<p>In order to turn this into a service we need to create a service configuration file:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/daemon/timestamp.service">examples/daemon/timestamp.service</a></strong></p>
<pre><code class="language-txt">[Unit]
Description=Demo Service

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/bin/python3 /home/gabor/work/code-maven.com/examples/daemon/timestamp.py &quot;my daemon&quot;
Restart=always
WorkingDirectory=/tmp
Nice=19
LimitNOFILE=16384

[Install]
WantedBy=multi-user.target

</code></pre>
<p>The most important field here is:</p>
<p><b>ExecStart</b></p>
<p>Create a symbolic link from the system-wide location of all the services in <b>/usr/lib/systemd/system/</b>
to the place where our service configuration file is. (Alternatively you could also copy the <b>timestamp.service</b> file.</p>
<pre><code>sudo ln -s /home/gabor/work/code-maven.com/examples/daemon/timestamp.service  /usr/lib/systemd/system/timestamp.service
</code></pre>
<p>Then we need to tell the <b>daemon-service</b> no reload all the configuration files. We need to do this every time we
add a new service or change the configuration file of a service.</p>
<pre><code>sudo systemctl daemon-reload
</code></pre>
<p>Then we can <b>start the service</b></p>
<pre><code>sudo systemctl start timestamp.service
</code></pre>
<p>At this time we should be able to use the <b>tail</b> command to observe how the service works and the file grows
one line every second.</p>
<pre><code>tail -f /tmp/timestamp.log
</code></pre>
<h2 class="title is-4">Troubleshooting pitfalls, potential issues and fixes</h2>
<p>If you the timestamp.log file does not grow you it means we had some issues.</p>
<p>You can observe the status of the service by running the following command:</p>
<pre><code>sudo systemctl status timestamp.service
</code></pre>
<p>You can also look at the log in the <b>syslog</b> file:</p>
<pre><code>less /var/log/syslog
</code></pre>
<p>While writing this article I had two issues:</p>
<h2 class="title is-4">Issue one: typo in command</h2>
<p>At first I had a typo in the command on the ExecStart line. That was easy to fix.</p>
<h2 class="title is-4">Issue two: rights on the log file</h2>
<p>Even after the typo was fixed I still did not see the log file growing.</p>
<pre><code>sudo systemctl status timestamp.service
</code></pre>
<p>got me this output:</p>
<pre><code>× timestamp.service - Demo Service
     Loaded: loaded (/lib/systemd/system/timestamp.service; disabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sun 2022-08-21 09:35:46 IDT; 7s ago
    Process: 2046747 ExecStart=/usr/bin/python3 /home/gabor/work/code-maven.com/examples/daemon/timestamp.py mydaemon (code=exited, status=1/FAILURE)
   Main PID: 2046747 (code=exited, status=1/FAILURE)
        CPU: 119ms

Aug 21 09:35:46 code-maven systemd[1]: timestamp.service: Scheduled restart job, restart counter is at 5.
Aug 21 09:35:46 code-maven systemd[1]: Stopped Demo Service.
Aug 21 09:35:46 code-maven systemd[1]: timestamp.service: Start request repeated too quickly.
Aug 21 09:35:46 code-maven systemd[1]: timestamp.service: Failed with result 'exit-code'.
Aug 21 09:35:46 code-maven systemd[1]: Failed to start Demo Service.
</code></pre>
<p>Then I looked at the syslog:</p>
<pre><code>less /var/log/syslog
</code></pre>
<p>and saw this:</p>
<pre><code>Aug 21 09:37:44 code-maven python3[2047136]:   File &quot;/home/gabor/work/code-maven.com/examples/daemon/timestamp.py&quot;, line 11, in &lt;module&gt;
Aug 21 09:37:44 code-maven python3[2047136]:     with open(&quot;/tmp/timestamp.log&quot;, &quot;a&quot;) as fh:
Aug 21 09:37:44 code-maven python3[2047136]: PermissionError: [Errno 13] Permission denied: '/tmp/timestamp.log'
</code></pre>
<p>Apparently the daemon that is currently configured as user root does not have permissions to open the log file for writing.</p>
<pre><code>$ ls -l /tmp/timestamp.log
-rw-rw-r-- 1 gabor gabor 504 Aug 21 09:35 /tmp/timestamp.log
</code></pre>
<p>At this point I could have changed the configuration file of the service to run as user <b>gabor</b>,
I could have changed the right on the file so everyone can write to it.</p>
<p>I decided to get rid of the file and let the daemon create it by itself:</p>
<pre><code>$ rm -f /tmp/timestamp.log
</code></pre>
<p>Then I started the daemon again. This time it started to work.</p>
<pre><code>$ sudo systemctl status timestamp.service

● timestamp.service - Demo Service
     Loaded: loaded (/lib/systemd/system/timestamp.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-08-21 09:54:13 IDT; 3s ago
   Main PID: 2049558 (python3)
      Tasks: 1 (limit: 18981)
     Memory: 3.5M
        CPU: 26ms
     CGroup: /system.slice/timestamp.service
             └─2049558 /usr/bin/python3 /home/gabor/work/code-maven.com/examples/daemon/timestamp.py &quot;my daemon&quot;

Aug 21 09:54:13 code-maven systemd[1]: Started Demo Service.

</code></pre>
<p>I can observe the file as well. Now it is owned by user root:</p>
<pre><code>$ ls -l /tmp/timestamp.log
-rw-r--r-- 1 root root 4508 Aug 21 09:54 /tmp/timestamp.log
</code></pre>
<h2 class="title is-4">Stop the service</h2>
<pre><code>sudo systemctl stop timestamp.service
</code></pre>
<h2 class="title is-4">Restart the service</h2>
<pre><code>sudo systemctl restart timestamp.service
</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>It is very easy to convert a script to a daemon, but one needs to be careful with the rights on files and also the environment
that is different for a daemon and for a script that runs on the command line.</p>
<p>We only scratched the surface of the daemonization. There are tons of other options you can deal with, but this should already
get you started.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Materialize CSS: Side-nav with hierarchy</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-08-17T16:00:06Z</updated>
    <pubDate>2022-08-17T16:00:06Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/materialize-side-nav-with-hierarchy" />
    <id>https://code-maven.com/materialize-side-nav-with-hierarchy</id>
    <content type="html"><![CDATA[<p>We had a failed attempt to create hierarchy in the sidenav while creating <a href="/materialize-2-side-nav-vanilla-javascript">Two side-navs with Vanilla JavaScript - left-hand side-nav and right-hand side-nav</a>.
<a href="/materialize">Materialize</a> has <a href="https://materializecss.com/collapsible.html">collapsibles</a> that can be used for this.</p>
<p>For more details see the documentation of the <a href="https://materializecss.com/sidenav.html">sidenav</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/materializecss/side-nav-with-hierarchy.html">examples/materializecss/side-nav-with-hierarchy.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css&quot;&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://fonts.googleapis.com/icon?family=Material+Icons&quot;&gt;

    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;/&gt;
    &lt;title&gt;Materialize: Sidenav with vanilla JavaScript&lt;/title&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
      &lt;!-- start the definition of the sidenav --&gt;
      &lt;ul id=&quot;slide-out&quot; class=&quot;sidenav&quot;&gt;
        &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;First Sidebar Link&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Second Sidebar Link&lt;/a&gt;&lt;/li&gt;
        &lt;li class=&quot;no-padding&quot;&gt;
          &lt;ul class=&quot;collapsible collapsible-accordion&quot;&gt;
            &lt;li&gt;
              &lt;a class=&quot;collapsible-header&quot;&gt;Dropdown&lt;i class=&quot;material-icons&quot;&gt;arrow_drop_down&lt;/i&gt;&lt;/a&gt;
              &lt;div class=&quot;collapsible-body&quot;&gt;
                &lt;ul&gt;
                  &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;First&lt;/a&gt;&lt;/li&gt;
                  &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Second&lt;/a&gt;&lt;/li&gt;
                  &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Third&lt;/a&gt;&lt;/li&gt;
                  &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Fourth&lt;/a&gt;&lt;/li&gt;
                &lt;/ul&gt;
              &lt;/div&gt;
            &lt;/li&gt;
          &lt;/ul&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
      &lt;!-- end the definition of the sidenav --&gt;

      &lt;div class=&quot;row&quot;&gt;
        &lt;!-- the button to open the sidenav --&gt;
        &lt;div class=&quot;col s1&quot;&gt;&lt;a href=&quot;#&quot; data-target=&quot;slide-out&quot; class=&quot;sidenav-trigger&quot;&gt;show main menu&lt;/a&gt;&lt;/div&gt;
        &lt;div class=&quot;col s11&quot;&gt;&amp;nbsp;&lt;/div&gt;

        &lt;div class=&quot;col s12&quot;&gt;
          &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
           dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
           ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
           fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
           mollit anim id est laborum.&quot;
        &lt;/div&gt;
      &lt;/div&gt;


    &lt;/div&gt;

    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;

&lt;script&gt;
document.addEventListener('DOMContentLoaded', function() {
    const elem = document.getElementById('slide-out');
    const options = {};
    const instance = M.Sidenav.init(elem, options);
    // instance.open()

    const collapsibles = document.querySelectorAll('.collapsible');
    const coptions = {};
    const collapsible_instances = M.Collapsible.init(collapsibles, coptions);
});
&lt;/script&gt;

</code></pre>
<p><a href="examples/materializecss/side-nav-with-hierarchy.html">view</a></p>
<p>In order to open the side navigation bar the user needs to click on the &quot;show main menu&quot; link.</p>
<p>We had to initialize both the sidenav and the collapsible in the JavaScript code.</p>
<p>In order to see the little triangle to open the second level of items we had to include the Material fonts (the second <code>stylesheet</code> include at the top of the file).</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Materialize CSS: Side-nav with Vanilla JavaScript on both sides</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-08-17T11:00:06Z</updated>
    <pubDate>2022-08-17T11:00:06Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/materialize-2-side-nav-vanilla-javascript" />
    <id>https://code-maven.com/materialize-2-side-nav-vanilla-javascript</id>
    <content type="html"><![CDATA[<p>We already saw how to create a <a href="/materialize-side-nav-vanilla-javascript">Side-nav with Vanilla JavaScript</a>
in <a href="/materialize">Materialize</a>. Now we are goint to create two. A left-side navbar and a right-side navbar.</p>
<p>For more details see the documentation of the <a href="https://materializecss.com/sidenav.html">sidenav</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/materializecss/2-side-nav-vanilla-javascript.html">examples/materializecss/2-side-nav-vanilla-javascript.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;/&gt;
    &lt;title&gt;Materialize: Sidenav with vanilla JavaScript&lt;/title&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;

      &lt;!-- start the definition of the sidenav --&gt;
      &lt;ul id=&quot;main-slide-out&quot; class=&quot;sidenav&quot;&gt;
          &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;div class=&quot;divider&quot;&gt;&lt;/div&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a class=&quot;subheader&quot;&gt;Subheader&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Other link&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;Outdented Title
            &lt;ul&gt;
                &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Alfa&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Beta&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;div class=&quot;divider&quot;&gt;&lt;/div&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;&quot;&gt;Title&lt;/a&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Alfa&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Beta&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
      &lt;/ul&gt;

      &lt;ul id=&quot;secondary-slide-out&quot; class=&quot;sidenav&quot;&gt;
          &lt;li&gt;&lt;a class=&quot;subheader&quot;&gt;Secondary&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;div class=&quot;divider&quot;&gt;&lt;/div&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Yet another link&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      &lt;!-- end the definition of the sidenav --&gt;

      &lt;div class=&quot;row&quot;&gt;
        &lt;!-- the button to open the sidenav --&gt;
        &lt;div class=&quot;col s1&quot;&gt;&lt;a href=&quot;#&quot; data-target=&quot;main-slide-out&quot; class=&quot;sidenav-trigger&quot;&gt;&lt;i class=&quot;material-icons&quot;&gt;show main menu&lt;/i&gt;&lt;/a&gt;&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;&lt;a href=&quot;#&quot; data-target=&quot;secondary-slide-out&quot; class=&quot;sidenav-trigger&quot;&gt;&lt;i class=&quot;material-icons&quot;&gt;show secondary menu&lt;/i&gt;&lt;/a&gt;&lt;/div&gt;
        &lt;div class=&quot;col s11&quot;&gt;&amp;nbsp;&lt;/div&gt;

        &lt;div class=&quot;col s12&quot;&gt;
          &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
           dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
           ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
           fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
           mollit anim id est laborum.&quot;
        &lt;/div&gt;
      &lt;/div&gt;


    &lt;/div&gt;

    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;

&lt;script&gt;
document.addEventListener('DOMContentLoaded', function() {
    const elem1 = document.getElementById('main-slide-out');
    const options1 = {
        'edge': 'left'
    };
    const instance1 = M.Sidenav.init(elem1, options1);
    // instance1.open()


    const elem2 = document.getElementById('secondary-slide-out');
    const options2 = {
        'edge': 'right'
    };
    const instance2 = M.Sidenav.init(elem2, options2);
    // instance2.open();
});
&lt;/script&gt;

</code></pre>
<p><a href="examples/materializecss/2-side-nav-vanilla-javascript.html">view</a></p>
<p>In order to open the left-side navigation bar the user needs to click on the &quot;show main menu&quot; link.
In order to open the right-side navigation bar the user needs to click on the &quot;show secondary menu&quot; link.</p>
<p>The bar automatically closes when the user clicks on the content of the page outside the navbar.</p>
<p>The main by sidenav is aligned to the left side of the screen. The secondary is aligned to the right-side of the screen.</p>
<p>At the bottom of the file you can see the JavaScript code. In this example we searched for the navbars one-by-one using their ID
and then initialized them separately using (slightly) different options.</p>
<p>I also included a commented out line of code that would open the navbars when the page is loaded.</p>
<p>You could also use the <b>open<b> method if you wanted to open the secondary navbar when the user selected something on the primary navbar.</p>
<p>In this example I also tried to add a second level of hierachy to the links in the sidenav. It was not really successful.
In the first case I had a title that was not a link itself and it got outdented. In the second case everything was just in the same column
so the hiearachy is not visible to the users.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Materialize CSS: Side-nav with Vanilla JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-08-17T11:00:05Z</updated>
    <pubDate>2022-08-17T11:00:05Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/materialize-side-nav-vanilla-javascript" />
    <id>https://code-maven.com/materialize-side-nav-vanilla-javascript</id>
    <content type="html"><![CDATA[<p><a href="/materialize">Materialize</a> has several features that require the use of JavaScript. One of the is the side navigation bar.</p>
<p>For more details see the documentation of the <a href="https://materializecss.com/sidenav.html">sidenav</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/materializecss/side-nav-vanilla-javascript.html">examples/materializecss/side-nav-vanilla-javascript.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;/&gt;
    &lt;title&gt;Materialize: Sidenav with vanilla JavaScript&lt;/title&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;

      &lt;!-- start the definition of the sidenav --&gt;
      &lt;ul id=&quot;slide-out&quot; class=&quot;sidenav&quot;&gt;
          &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;div class=&quot;divider&quot;&gt;&lt;/div&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a class=&quot;subheader&quot;&gt;Subheader&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;#!&quot;&gt;Other link&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      &lt;!-- end the definition of the sidenav --&gt;

      &lt;div class=&quot;row&quot;&gt;
        &lt;!-- the button to open the sidenav --&gt;
        &lt;div class=&quot;col s1&quot;&gt;&lt;a href=&quot;#&quot; data-target=&quot;slide-out&quot; class=&quot;sidenav-trigger&quot;&gt;&lt;i class=&quot;material-icons&quot;&gt;show menu&lt;/i&gt;&lt;/a&gt;&lt;/div&gt;
        &lt;div class=&quot;col s11&quot;&gt;&amp;nbsp;&lt;/div&gt;

        &lt;div class=&quot;col s12&quot;&gt;
          &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
           dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
           ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
           fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
           mollit anim id est laborum.&quot;
        &lt;/div&gt;
      &lt;/div&gt;


    &lt;/div&gt;

    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;

&lt;script&gt;
document.addEventListener('DOMContentLoaded', function() {
    const elems = document.querySelectorAll('.sidenav');
    const options = {
        'edge': 'right'
    };
    var instances = M.Sidenav.init(elems, options);

    // Enable this to make the side-nav open automatically when page is loaded.
    // instances[0].open();
});
&lt;/script&gt;

</code></pre>
<p><a href="examples/materializecss/side-nav-vanilla-javascript.html">view</a></p>
<p>In order to open the navigation bar the user needs to click on the &quot;show menu&quot; link.
The bar automatically closes when the user clicks on the content of the page outside the navbar.</p>
<p>By default the navbar is aligned to the left side of the screen. In our example we used the &quot;edge&quot; field of the &quot;options&quot;
to make it appear on the right side.</p>
<p>At the bottom of the file you can see the JavaScript code. In this example we searched for <b>all</b> the navbars (even though we only have one in our example)
and then initialized all of them by a single call using the same options. If you have more than one navbar you could locate each one of them by their id
and initialize each one of them with different options.</p>
<p>I also included a commented out line of code that would open the navbar when the page is loaded.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Materialize CSS: Rows and columns - a grid</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-08-17T08:00:04Z</updated>
    <pubDate>2022-08-17T08:00:04Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/materialize-grid" />
    <id>https://code-maven.com/materialize-grid</id>
    <content type="html"><![CDATA[<p>In order to make it easy to place various objects on the web page, people usually use a grid.  In <a href="/materialize">Materialize</a>
the grid can have multiple rows and each row can be divided into 12 columns. The name &quot;row&quot; is actually slightly confusing in this context.
A name such as &quot;block&quot; might have been better as each &quot;row&quot; can actually contain several 12-width physical row.</p>
<p>For more details see the documentation of the <a href="https://materializecss.com/grid.html">grid</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/materializecss/rows-and-columns.html">examples/materializecss/rows-and-columns.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;!-- Compiled and minified CSS --&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css&quot;&gt;


    &lt;!--Let browser know website is optimized for mobile--&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;/&gt;

    &lt;title&gt;Materialize: rows and columns&lt;/title&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;

      &lt;h3&gt;A row with a single line of 12 1-width columns&lt;/h3&gt;
      &lt;div class=&quot;row&quot;&gt;
        &lt;div class=&quot;col s1&quot;&gt;1&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;2&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;3&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;4&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;5&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;6&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;7&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;8&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;9&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;10&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;11&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;12&lt;/div&gt;
      &lt;/div&gt;

      &lt;h3&gt;A row with two lines: a line with a single 12-width column and a line with 2 6-width columns&lt;/h3&gt;
      &lt;div class=&quot;row&quot;&gt;
        &lt;div class=&quot;col s12&quot;&gt;This div is 12-width column on all screen sizes&lt;/div&gt;
        &lt;div class=&quot;col s6&quot;&gt;6-width column&lt;/div&gt;
        &lt;div class=&quot;col s6&quot;&gt;6-width column&lt;/div&gt;
      &lt;/div&gt;

      &lt;h3&gt;A row with two lines: a line with a single 12-width column and a line with various width columns&lt;/h3&gt;
      &lt;div class=&quot;row&quot;&gt;
        &lt;div class=&quot;col s12&quot;&gt;This div is 12-columns wide on all screen sizes&lt;/div&gt;
        &lt;div class=&quot;col s1&quot;&gt;1-col&lt;/div&gt;
        &lt;div class=&quot;col s2&quot;&gt;2-col&lt;/div&gt;
        &lt;div class=&quot;col s3&quot;&gt;3-col&lt;/div&gt;
        &lt;div class=&quot;col s6&quot;&gt;6-col&lt;/div&gt;
      &lt;/div&gt;

      &lt;div class=&quot;row&quot;&gt;
        &lt;div class=&quot;col s12&quot;&gt;&lt;span class=&quot;flow-text&quot;&gt;This div is 12-width column&lt;/span&gt;&lt;/div&gt;

        &lt;div class=&quot;col s6 offset-s6&quot;&gt;&lt;span class=&quot;flow-text&quot;&gt;6-width column (offset-by-6)&lt;/span&gt;&lt;/div&gt;

        &lt;div class=&quot;col s6 offset-s3&quot;&gt;&lt;span class=&quot;flow-text&quot;&gt;6-width column (offset-by-3)&lt;/span&gt;&lt;/div&gt;
        &lt;div class=&quot;col s3&quot;&gt;&lt;span class=&quot;flow-text&quot;&gt;&amp;nbsp;&lt;!-- has to be filled with something to take up the rest of the line --&gt;&lt;/span&gt;&lt;/div&gt;

        &lt;div class=&quot;col s2&quot;&gt;&lt;span class=&quot;flow-text&quot;&gt;2-width col&lt;/span&gt;&lt;/div&gt;
        &lt;div class=&quot;col s10&quot;&gt;&lt;span class=&quot;flow-text&quot;&gt;This div is 10-width column&lt;/span&gt;&lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;
    &lt;!--JavaScript at end of body for optimized loading--&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;

&lt;style&gt;
.col:nth-of-type(even) {
    background-color: #add8e6;
}
.col:nth-of-type(odd) {
    background-color: #e0e0e0;
}
&lt;/style&gt;



</code></pre>
<p><a href="examples/materializecss/rows-and-columns.html">view</a></p>
<p>At the bottom of the file I've added some manual CSS in order to change the background-color of the boxes.
Hopefully this will make it easier to see the individual cells in the grid.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Materialize CSS - div container</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-08-17T08:00:03Z</updated>
    <pubDate>2022-08-17T08:00:03Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/materialize-div-container" />
    <id>https://code-maven.com/materialize-div-container</id>
    <content type="html"><![CDATA[<p>Probably in every project built using <a href="/materialize">Materialize</a> all the content is wrapped in a <code>div</code> element with a <code>class</code> called <code>container</code>.
In this example we can see it being used.
The sample content is from <a href="https://lipsum.com/">Lorem Ipsum</a>.</p>
<p>Removing this <code>div</code> element or removing the <code>container</code> class from it will make the site take up the full width of the browser.
Check the <a href="/materialize-skeleton">skeleton</a> to see it.</p>
<p>For more details see the beginning of documentation of the <a href="https://materializecss.com/grid.html">grid</a> where this is mentioned.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/materializecss/div-container.html">examples/materializecss/div-container.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;!-- Compiled and minified CSS --&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css&quot;&gt;


    &lt;!--Let browser know website is optimized for mobile--&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;/&gt;
    &lt;title&gt;Materialize: div - container&lt;/title&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;

    &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
     dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
     ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
     fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
     mollit anim id est laborum.&quot;

    &lt;/div&gt;


    &lt;!--JavaScript at end of body for optimized loading--&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;



</code></pre>
<p><a href="examples/materializecss/div-container.html">view</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Materialize CSS - Skeleton</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-08-17T08:00:02Z</updated>
    <pubDate>2022-08-17T08:00:02Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/materialize-skeleton" />
    <id>https://code-maven.com/materialize-skeleton</id>
    <content type="html"><![CDATA[<p>There are a number of ways to get started with <a href="/materialize">Materialize</a>. Probably the easiest is to include it from a CDN.
This could be a good skeleton for a project.</p>
<p>The sample content is from <a href="https://lipsum.com/">Lorem Ipsum</a>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/materializecss/skeleton.html">examples/materializecss/skeleton.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;!-- Compiled and minified CSS --&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css&quot;&gt;


    &lt;!--Let browser know website is optimized for mobile--&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;/&gt;

    &lt;title&gt;Materialize: Skeleton&lt;/title&gt;
  &lt;/head&gt;

  &lt;body&gt;

    &quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
     dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
     ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
     fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
     mollit anim id est laborum.&quot;

    &lt;!--JavaScript at end of body for optimized loading--&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;



</code></pre>
<p><a href="examples/materializecss/skeleton.html">view</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Materialize CSS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-08-17T08:00:01Z</updated>
    <pubDate>2022-08-17T08:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/materialize" />
    <id>https://code-maven.com/materialize</id>
    <content type="html"><![CDATA[<p><a href="https://materializecss.com/">Materialize CSS</a> is an HTML/CSS framework based on <a href="https://material.io/">Material Design</a> to create the front-end of web applications.
It was created and designed by Google.</p>
<p>Here we are going to see a few basic examples. Below each example you'll find a link that says <b>Try!</b>. You can click on it to see the example in your browser.</p>
<ul>
<li><a href="/materialize-skeleton">Skeleton</a></li>
<li><a href="/materialize-div-container">DIV container</a></li>
<li><a href="/materialize-grid">Rows and columns - a grid</a></li>
<li><a href="/materialize-side-nav-vanilla-javascript">Side-nav with Vanilla JavaScript</a></li>
<li><a href="/materialize-2-side-nav-vanilla-javascript">Two side-navs with Vanilla JavaScript - left-hand side-nav and right-hand side-nav</a></li>
<li><a href="/materialize-side-nav-with-hierarchy">Side-nav with hierarchy</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Multiple counters with plain JavaScript and local storage</title>
    <summary type="html"><![CDATA[Simple Vanilla JavaScript example useing localStorage, getItem, setItem, getElementById, addEventListener, innerHTML to create a counter.]]></summary>
    <updated>2022-03-04T11:20:01Z</updated>
    <pubDate>2022-03-04T11:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/multiple-counters-with-plain-javascript-and-local-storage" />
    <id>https://code-maven.com/multiple-counters-with-plain-javascript-and-local-storage</id>
    <content type="html"><![CDATA[<p>As part of the big <a href="/counter">Counter Example</a> project,
in this article we'll see how to create a counter with multiple buttons
with plain JavaScript utilizing the Local Storage introduced in HTML5.</p>
<p>In HTML5 <b>localStorage</b> is a term used for a flat key-value database inside the browser (or more specifically on
the hard-disk of the computer, table, or smartphone where the browser runs) that can be accessed using JavaScript.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/multi_counter.html">examples/js/multi_counter.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Multi counter&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;counter&quot;&gt;&lt;/div&gt;
&lt;button id=&quot;reset_all&quot;&gt;Reset All&lt;/button&gt;

&lt;div id=&quot;counters&quot;&gt;
&lt;/div&gt;

&lt;input id=&quot;name&quot;&gt;&lt;button id=&quot;add_counter&quot;&gt;Add counter&lt;/button&gt;

&lt;div id=&quot;status&quot;&gt;&lt;/div&gt;

&lt;script&gt;
let counters = {};


function load_counters() {
    let counters_str = localStorage.getItem('multi_counter');
    if (counters_str === null) {
        console.log('new multi counter system');
    } else {
        counters = JSON.parse(counters_str);
    }
    show_counters();
}

function increase_counter(event) {
    let name = event.target.getAttribute(&quot;data-name&quot;);
    counters[name]++;
    localStorage.setItem('multi_counter', JSON.stringify(counters));
    show_counters();
}

function show_counters() {
    let counter_list =  Object.keys(counters);
    console.log(counter_list);
    let html = &quot;&quot;;
    for (let ix = 0; ix &lt; counter_list.length; ix++) {
        let name = counter_list[ix];
        html += `&lt;button class=&quot;counter&quot; data-name=&quot;${name}&quot;&gt;${name} : ${counters[name]}&lt;/button&gt; `;
    }
    document.getElementById('counters').innerHTML = html;
    let elements = document.getElementsByClassName('counter');
    console.log(elements);
    for (let ix = 0; ix &lt; elements.length; ix++) {
        elements[ix].addEventListener('click', increase_counter);
    }
}


function reset_all() {
    document.getElementById('status').innerHTML = '';
    counters = {};
    localStorage.removeItem('multi_counter');
    show_counters();
}

function add_counter() {
    let name = document.getElementById('name').value;
    // remove spaces
    name = name.replace(/^\s+/g, &quot;&quot;);
    name = name.replace(/\s+$/g, &quot;&quot;);
    if (name == &quot;&quot;) {
        document.getElementById('status').innerHTML = 'Missing name for new counter';
        return;
    }
    // console.log(counters[name]);
    if (name in counters) {
        document.getElementById('status').innerHTML = `counter '${name}' already exists`;
        return;
    }
    counters[name] = 1;
    localStorage.setItem('multi_counter', JSON.stringify(counters));
    document.getElementById('status').innerHTML = 'added';
    document.getElementById('name').value = &quot;&quot;;
    show_counters();
}

document.getElementById('reset_all').addEventListener('click', reset_all);
document.getElementById('add_counter').addEventListener('click', add_counter);
load_counters();
show_counters();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;



</code></pre>
<p><a href="examples/js/multi_counter.html">view</a></p>
<p>Click on the <a href="/try/examples/js/multi_counter.html" target="_new">Try!</a> link to see how it works in a separate window.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>LibreLingo - adding a Cancel button</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2022-01-23T20:30:01Z</updated>
    <pubDate>2022-01-23T20:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/librelingo-2022-01-23" />
    <id>https://code-maven.com/librelingo-2022-01-23</id>
    <content type="html"><![CDATA[<p><a href="https://librelingo.app/">LibreLingo</a> is an open source language learning platform created by <a href="https://daniel-kantor.com/">Dániel Kántor</a>.
In this pair programming session we learn how to get started contributing to it. Join us on the <a href="https://riot.im/app/#/group/+librelingo:matrix.org">Matrix channel</a>
or go straight to the <a href="https://github.com/LibreLingo/LibreLingo">source code</a></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/4EJ2sCqUIVE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://www.cypress.io/">Cypress</a></li>
<li><a href="https://svelte.dev/">Svelte</a></li>
<li><a href="https://bulma.io/">Bulma</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bitbucket</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-10-25T11:30:01Z</updated>
    <pubDate>2021-10-25T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bitbucket" />
    <id>https://code-maven.com/bitbucket</id>
    <content type="html"><![CDATA[<p><a href="https://bitbucket.org/">Bitbucket</a> is the git hosting service of <a href="https://www.atlassian.com/">Atlassian</a>.</p>
<ul>
<li><a href="/limit-bitbucket-pipelines-to-specific-branches">Limit Bitbucket pipelines to specific branches</a></li>
<li><a href="https://perlmaven.com/bitbucket-pipelines-for-perl-projects">Bitbucket Pipelines (the CI system) for Perl projects</a></li>
<li><a href="https://perlmaven.com/bitbucket-pipelines-testing-perl-projects">Bitbucket Pipelines testing Perl projects</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>git branching strategy for when you cannot use the --force</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-09-29T11:30:01Z</updated>
    <pubDate>2021-09-29T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/git-branching-strategy-for-when-you-cannot-use-the-force" />
    <id>https://code-maven.com/git-branching-strategy-for-when-you-cannot-use-the-force</id>
    <content type="html"><![CDATA[<p>One nice thing about the way git works is that I can update my feature development branch from the main development branch whatever it is called, without a trail of merges. We can use rebase
to pretend we have started our branch using the most up-to-date version of the main development branch. In such case, if we have already pushed out our branch to a remote repository we' will
have to use the --force to push out the version of our branch.</p>
<p>This can be done safely if there is only a single person working on such branch and if everyone looking at that branch is aware that this might happen.</p>
<p>However there are certain situations when this technique cannot be used. For example if repository syncing is set up (e.g. between BitBucket and GitLab) then a push --force will stop the syncing of that branch.</p>
<p>My solution for this situation is to create a new branch based on the first one. e.g.</p>
<pre><code>git checkout -b feature_a_v1
</code></pre>
<p>work, push to this branch</p>
<p>In the meantime the main development branch, let's call it 'dev' moved ahead. This is what I'll do:</p>
<pre><code># update the local version of dev
git checkout dev
git pull
</code></pre>
<pre><code># go to my branch and create a new branch based on this:
git checkout  feature_a_v1
git checkout  -b feature_a_v2
</code></pre>
<pre><code># Now on feature_a_v2 rebase the dev branch and then push it out
git rebase dev
git push --set-upstream origin feature_a_v2
</code></pre>
<pre><code># remove the old branch both locally and from the server
git branch -d feature_a_v1
git push origin --delete feature_a_v1
</code></pre>
<p>Alternative: remove the remote branch (but that probably will not remote the branch from the synced version) and add it again. (this might not work)</p>
<p>Alternative: just add a new remote branch and remove the old one. No need to have a new local branch.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops - part 10</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-09-08T23:00:01Z</updated>
    <pubDate>2021-09-08T23:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop-10" />
    <id>https://code-maven.com/online-self-knowledge-workshop-10</id>
    <content type="html"><![CDATA[<p>In this live coding session we are going to start the application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are going to use <a href="https://reactjs.org/">ReactJS</a>.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/rgG_cERS5l8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://github.com/devill/selfknowledge">Source code</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Testing a Docker image created by GitLab CI</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-08-16T15:30:01Z</updated>
    <pubDate>2021-08-16T15:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/gitlab-ci-testing-docker-image" />
    <id>https://code-maven.com/gitlab-ci-testing-docker-image</id>
    <content type="html"><![CDATA[<p>We have already see how to set up a GitLab Runner and how to <a href="https://code-maven.com/build-docker-image-in-gitlab-pipeline">build a Docker image in a GitLab pipeline</a>.</p>
<p>Now we are going to see how to test the image.</p>
<p>For this we need a little project, this is our directory layout:</p>
<pre><code>.
├── app.py
├── Dockerfile
└── .gitlab-ci.yml
</code></pre>
<p>The application that we would like to add to the Docker image is a really small Python Flask application:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/gitlab-test-docker-image/app.py">examples/gitlab-test-docker-image/app.py</a></strong></p>
<pre><code class="language-python">from flask import Flask
from datetime import datetime
import os
import socket

version = 1

app = Flask('Demo')

@app.route(&quot;/&quot;)
def main():
    return f&quot;&quot;&quot;
        Version {version}&lt;br&gt;
        At {datetime.now()}&lt;br&gt;
        PID {os.getpid()}&lt;br&gt;
        Hostname {socket.gethostname()}&lt;br&gt;
    &quot;&quot;&quot;

</code></pre>
<p>The Docker image is also not very complex:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/gitlab-test-docker-image/Dockerfile">examples/gitlab-test-docker-image/Dockerfile</a></strong></p>
<pre><code class="language-Dockerfile">FROM alpine:latest
RUN apk add python3 py3-pip
RUN pip install flask
WORKDIR /opt
COPY app.py .
CMD [&quot;flask&quot;, &quot;run&quot;, &quot;--host&quot;, &quot;0.0.0.0&quot;]

</code></pre>
<h2 class="title is-4">GitLab CI pipeline</h2>
<p>The interesting part is the GitLab pipeline:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/gitlab-test-docker-image/.gitlab-ci.yml">examples/gitlab-test-docker-image/.gitlab-ci.yml</a></strong></p>
<pre><code class="language-yaml">stages:
  - build
  - test

build:
  image: docker:19.03.12
  stage: build
  variables:
    DOCKER_TLS_CERTDIR: &quot;/certs&quot;
  services:
    - docker:19.03.12-dind
  script:
    - docker build -t mydocker:latest .

    - docker tag mydocker:latest $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/flasker:latest

    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker push $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/flasker:latest
  tags:
    - docker-runner-tls

test-image:
  services:
    - name: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/flasker:latest
      alias: flasker
      #command: [&quot;flask&quot;, &quot;run&quot;, &quot;--host&quot;, &quot;0.0.0.0&quot;, &quot;--port&quot;, &quot;5000&quot;]
  image: python:3.7.2
  script:
    #- curl https://code-maven.com/
    - curl http://flasker:5000/


</code></pre>
<p>There are two jobs.</p>
<p>The build job will build the image and upload it to the Docker registry of GitLab.</p>
<p>The test-image job will start the newly built image as a <a href="https://docs.gitlab.com/ee/ci/services/">GitLab CI service</a>. GitLab will automatically map the ports that are opened in the image
and the &quot;alias&quot; field can used to define a hostname for the service. One could also add a command to be executed on the docker container,
but in our case that's not necessary as we have it inside the Dockerfile.</p>
<p>Then we have the &quot;image&quot; field that tells GitLab what image to use for the CI job and finally we have simple &quot;script&quot; tag that uses <b>curl</b>
to access the web application running in our container that was created from the image we just built.</p>
<p>At this point you could write any types of test that would access the application from the outside. You could also launch other services, for example a database server and thus you
can have an environment that resembles your production system.</p>
<p>One caveat that I think I bumped into at a client, is that you might have created the GitLab username and/or the project name with mixed case letter and I using the $CI_PROJECT_NAMESPACE
and variable $CI_PROJECT_NAME will retain the case, but as I recall the Docker registry did not like that. However now thinking back, that might have been a totally different issue.
In any case, let me leave this warning here.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Working on PyDigger with Upasana Shukla - part 4</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-07-25T21:30:02Z</updated>
    <pubDate>2021-07-25T21:30:02Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/pydigger-4" />
    <id>https://code-maven.com/pydigger-4</id>
    <content type="html"><![CDATA[<p>In this <a href="/live">live pair programming</a> session
<a href="https://www.linkedin.com/in/upasana-shukla/">Upasana Shukla</a> and myself were working on the
<a href="https://pydigger.com/">PyDigger</a> project.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/aSszEQLRsgg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Programming Crystal Language Course - part 1</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-07-12T19:30:01Z</updated>
    <pubDate>2021-07-12T19:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/crystal-course-1" />
    <id>https://code-maven.com/crystal-course-1</id>
    <content type="html"><![CDATA[<p>Learn Crystal with me!</p>
<p>Part 1 of the <a href="/crystal-course">Crystal course</a></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/LC1srwCOKLc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://code-maven.com/slides/crystal/">Crystal slides</a></li>
<li><a href="https://github.com/szabgab/slides">Source code of the slides and exercises</a></li>
<li><a href="https://github.com/veelenga/awesome-crystal">Awesome Crystal list</a></li>
<li>Use asdf version manager to install Crystal</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Web Application development in Laravel with Natalie O&#39;Brien</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-07-06T07:40:01Z</updated>
    <pubDate>2021-07-06T07:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/laravel" />
    <id>https://code-maven.com/laravel</id>
    <content type="html"><![CDATA[<p>In this live coding session we are working on an application with <a href="https://www.linkedin.com/in/natalie-o-brien-680366/">Natalie O'Brien</a>
who runs <a href="https://www.nobitsolutions.com/">NOB IT Solutions</a>. (<a href="https://github.com/natalie0b">GitHub</a>)
We are using the <a href="https://laravel.com/">Laravel</a> framework written in <a href="/php">PHP</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/JjfGOq-xnIs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<!--
Scheduled for <span id="localdate" x-schedule="2021-07-06T16:00:00+03:00"></span>

Also see our [calendar](/live).

<a class="btn btn-lg btn-success" href="https://us02web.zoom.us/meeting/register/tZ0tf-GtpjojGNM8qiq9L0hySoZnLzAFulsu">Register here</a>
-->
<ul>
<li><a href="https://laravel.com/docs/8.x">Laravel</a></li>
<li><a href="https://github.com/natalie0b/service-desk-project">service desk project on GitHub</a></li>
<li><a href="https://www.apachefriends.org/">Apache Friends</a></li>
<li><a href="https://getcomposer.org/">Getcomposer</a></li>
<li><a href="https://hub.docker.com/r/bitnami/laravel">Bitnami</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Learn Crystal with me!</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-07-04T04:30:01Z</updated>
    <pubDate>2021-07-04T04:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/crystal-course" />
    <id>https://code-maven.com/crystal-course</id>
    <content type="html"><![CDATA[<p>Learn Crystal with me!</p>
<p>In this series of meetings we are going to learn the <a href="https://crystal-lang.org/">Crystal programming language</a> together.</p>
<p>I have a lot of background programming and teaching other programming languages and I have been learning Crystal myself since
May 15, 2021. As I learn the language I prepare small examples that eventually become a series of
<a href="/slides/crystal/">slides for the Crystal programming language</a>.
During this course and workshop I'll go over the slides I already have and will create more examples and
more slides as we make progress.</p>
<p>During each session I'll give a presentation and then you'll have time to practice. I'll be around helping you and learning from you!</p>
<h2 class="title is-4">Learning Crystal</h2>
<ul>
<li><a href="/crystal-2">Crystal part 2 - </a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Sequence without 1-on-1 in Crystal</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-07-02T18:30:01Z</updated>
    <pubDate>2021-07-02T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/crystal-sequence-without-1-on-1" />
    <id>https://code-maven.com/crystal-sequence-without-1-on-1</id>
    <content type="html"><![CDATA[<p>This is the solution for <a href="https://theweeklychallenge.org/blog/perl-weekly-challenge-119/">the weekly challenge</a> called
<b>Sequence without 1-on-1</b> in which we are asked to generate a sequence of numbers starting with 1 where each element can contain only the digits 1, 2, or 3
and there can't be 1 twice next to each other. That is &quot;11&quot; cannot be part of the decimal representation of the number.</p>
<p>This solution is written in the <a href="/crystal">Crystal programming language</a>.</p>
<h2 class="title is-4">Directory layout</h2>
<pre><code>.
├── spec
│   └── seq_spec.cr
└── src
    ├── list_seq.cr
    ├── seq.cr
    └── use_seq.cr
</code></pre>
<h2 class="title is-4">The implementation</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/crystal/sequence-without-1-on-1/src/seq.cr">examples/crystal/sequence-without-1-on-1/src/seq.cr</a></strong></p>
<pre><code class="language-crystal">def seq(&amp;block)
  val = 0
  loop do
    val += 1
    next if val.to_s =~ /[04-9]|11/
    yield val
  end
end

def seq(n : Int32) : Int32
  seq {|num|
    n -= 1
    return num if n &lt;= 0
  }
end


</code></pre>
<p>Crystal has multiple-dispatch so we can defined the same function with different signatures.
Here we have two definitions of the <b>seq</b> function. The first one expects a block and will
call the block on every iteration when the code reaches the <b>yield</b> statement.
The function declaration contains <b>&amp;block</b> but that's optional and I only included
in the hope that it makes it clearer that the function expects a block of code.</p>
<p>Inside we have a condition-less <b>loop do ... end</b> which is basically an endless loop.
(even though we do have the <b>end</b> word there ... I know, this was a bad pun)</p>
<p>Inside the loop we increment the value (there is no <b>++</b> in Crystal), then use a regular expression
on the stringified (<b>to_s</b>) version of the number. <b>=~</b> is the regex match operator just as in Perl.
<b>//</b> delimiters the regex, just as in Perl. <b>next</b> is the same as in Perl (other languages have <b>continue</b> instead).</p>
<p>In Crystal an <b>if</b> can be written as the <a href="https://crystal-lang.org/reference/syntax_and_semantics/as_a_suffix.html">suffix of an expression</a>
and it becomes a statement modifier as it is called in Perl. The condition checked first and only if it <b>true</b> then <b>next</b> is called.</p>
<p>Then we have the <b>yield num</b> statement that will execute the block passing <b>num</b> as an argument. You can see this in use in the <b>list_seq.cr</b> file below
and also in the second implementation of the <b>seq</b> function.</p>
<p>Here we are expecting an Int32 number and we also declare that we are going to return an Int32 number.
Inside we call seq with a block (so this will execute the first implementation). We count down from N to 0 and thus return the Nth
element of the sequence.</p>
<h2 class="title is-4">Use the sequence generator</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/crystal/sequence-without-1-on-1/src/list_seq.cr">examples/crystal/sequence-without-1-on-1/src/list_seq.cr</a></strong></p>
<pre><code class="language-crystal">require &quot;./seq&quot;

seq {|num|
  puts num
  break if num &gt; 200
}

</code></pre>
<p>In this example we use the sequence generator directly. If we did not have some
explicit statement to leave the block it would iterate till we run out of Int32
and then it would raise an exception: <b>Unhandled exception: Arithmetic overflow (OverflowError)</b></p>
<p><b>break if num &gt; 200</b> still first checks the condition and only if it is <b>true</b> then it will <b>break</b> out of the block.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/crystal/sequence-without-1-on-1/src/use_seq.cr">examples/crystal/sequence-without-1-on-1/src/use_seq.cr</a></strong></p>
<pre><code class="language-crystal">require &quot;./seq&quot;

if ARGV.size != 1
  abort(&quot;Usage: #{PROGRAM_NAME} NUM&quot;, 1)
end

puts seq(ARGV[0].to_i)

</code></pre>
<p>This is the example in which you can pass a number on the command line and it will print the Nth value in the sequence.</p>
<pre><code>crystal src/use_seq.cr 60
</code></pre>
<h2 class="title is-4">Testing / Spec</h2>
<p>This is the spec file. One could cd into the root of the &quot;project&quot; and type <b>crystal spec</b>
to execute the tests.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/crystal/sequence-without-1-on-1/spec/seq_spec.cr">examples/crystal/sequence-without-1-on-1/spec/seq_spec.cr</a></strong></p>
<pre><code class="language-crystal">require &quot;spec&quot;
require &quot;../src/seq&quot;

describe &quot;Seq&quot; do
  it &quot;verify&quot; do
    seq(5).should eq(13)
    seq(10).should eq(32)
    seq(60).should eq(2223)
  end
end

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Crystal: Swap Nibbles</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-07-02T17:00:01Z</updated>
    <pubDate>2021-07-02T17:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/crystal-swap-nibbles" />
    <id>https://code-maven.com/crystal-swap-nibbles</id>
    <content type="html"><![CDATA[<p>In this <a href="https://theweeklychallenge.org/blog/perl-weekly-challenge-119/">weekly challenge</a> the task was to swap the lower and upper 4 bits (nibbles) of an integer.</p>
<p>This is my implementation in the <a href="/crystal">Crystal language</a>.</p>
<p>At first I thought to convert the number to its binary representation and do the swapping there, but then I fugured it is just a simple mathematical operation.</p>
<ul>
<li><b>%</b> is modulo</li>
<li><b>//</b> is integer division</li>
</ul>
<p>Below the function I included the code to iterate over the range between 0 and 255 (inclusive)
and for each iteration print the binary representation (padded with 0s) and the decimal representation of the original number
followed by the decimal representation of the nibble-swapped number.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/crystal/swap_nibbles.cr">examples/crystal/swap_nibbles.cr</a></strong></p>
<pre><code class="language-crystal">
def swap_nibbles(n)
  return 16 * (n % 16) + (n // 16)
end

#puts swap(101)
#puts swap(18)

(0..255).each {|num|
  puts &quot;%08b %3s %3s&quot; % {num, num, swap_nibbles(num)}
}

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Binary Palindrom - Crystal</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-26T12:30:01Z</updated>
    <pubDate>2021-06-26T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/crystal-binary-palindrom" />
    <id>https://code-maven.com/crystal-binary-palindrom</id>
    <content type="html"><![CDATA[<p>A Binary Palindrom is a positive integer for which the binary representation is a palindrom.
See the <a href="https://theweeklychallenge.org/blog/perl-weekly-challenge-118/">Weekly challange</a>.</p>
<p>This is a solution in the <a href="/crystal">Crystal programming language</a>.</p>
<h2 class="title is-4">Directory layout</h2>
<pre><code>.
├── spec
│   └── palindrome_spec.cr
└── src
    ├── palindrome.cr
    └── use_palindrome.cr
</code></pre>
<h2 class="title is-4">Implementation</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/crystal/binary_palindrome/src/palindrome.cr">examples/crystal/binary_palindrome/src/palindrome.cr</a></strong></p>
<pre><code class="language-crystal">def palindrome?(n : Int32)
  raise ArgumentError.new(&quot;Negative number not accepted&quot;) if n &lt; 0
  binary = sprintf(&quot;%b&quot;, n)
  return binary == binary.reverse
end

</code></pre>
<p>In Crystal you can have <b>?</b> as the last character of a function name.
It is often used for functions that return a boolean value.</p>
<p>The original requets was for returning 1 and 0, but most likely it was defined that way
because Perl does not have a special boolean type. In the Crystal solution I opted to return <b>true</b> or <b>false</b>
respectively as that's the right way to do it in Crystal.</p>
<p>Functions in Crystal return the value of the last statement so the <b>return</b> keyword is optional, but I prefer to have it explicitely.</p>
<p>Extra: If the function is called with a negative value an ArgumentError exception is raised.</p>
<h2 class="title is-4">Usage</h2>
<p>A simple Crystal program that will accept one or more numbers on the command line and will print Yes or No for
each number:</p>
<pre><code>$ crystal src/use_palindrome.cr 3 4 5
3 Yes
4 No
5 Yes
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/crystal/binary_palindrome/src/use_palindrome.cr">examples/crystal/binary_palindrome/src/use_palindrome.cr</a></strong></p>
<pre><code class="language-crystal">require &quot;./palindrome&quot;

if ARGV.size == 0
  puts &quot;Usage: #{PROGRAM_NAME} [NUMBERs]&quot;
  exit 1
end

ARGV.each {|number|
  puts %[#{number} #{palindrome?(number.to_i) ? &quot;Yes&quot; : &quot;No&quot;}]
}


</code></pre>
<ul>
<li>
<p><b>ARGV</b> is an array of string containing the values from the command line</p>
</li>
<li>
<p><b>#{}</b> is interpolation of variables and expressions inside a string</p>
</li>
<li>
<p>A string can be delimitered using double-quotes <b>&quot;</b> or this construct: <b>%[]</b> where you can use any type of brackets.</p>
</li>
<li>
<p><b>ARGV.each</b> iterates over the elements of <b>ARGV</b> and on each iteration the current value is assigned to the &quot;number&quot; variable.</p>
</li>
<li>
<p><b>to_i</b> converts a string to an integer.</p>
</li>
<li>
<p><b>?:</b> is just the conditional operator (aka. the ternary operator)</p>
</li>
</ul>
<h2 class="title is-4">Spec tests</h2>
<p>I also included a test script.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/crystal/binary_palindrome/spec/palindrome_spec.cr">examples/crystal/binary_palindrome/spec/palindrome_spec.cr</a></strong></p>
<pre><code class="language-crystal">require &quot;spec&quot;
require &quot;../src/palindrome&quot;

describe &quot;Palindrome&quot; do
  it &quot;verify&quot; do
    palindrome?(5).should be_true
    palindrome?(4).should be_false
    palindrome?(15).should be_true
    palindrome?(14).should be_false
    palindrome?(0).should be_true
    expect_raises(ArgumentError, &quot;Negative number not accepted&quot;) do
      palindrome?(-1)
    end
  end
end

</code></pre>
<p>In order to run the tests <a href="https://crystal-lang.org/">install Crystal</a>,
re-created the directory layout with the two files.
(You can clone <a href="https://github.com/szabgab/code-maven.com/">the repository</a> and cd to <b>examples/crystal/binary_palindrome/</b>)
Then  run</p>
<pre><code>crystal spec
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Testing 3rd party packages on end-user&#39;s machine during installation</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-26T07:30:01Z</updated>
    <pubDate>2021-06-26T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/testing-package-during-installation" />
    <id>https://code-maven.com/testing-package-during-installation</id>
    <content type="html"><![CDATA[<p>Regardless of the programming language you will probably rely a lot on <a href="/package-registry">3rd party packages (aka. libraries)</a>.
Many packages have automated tests and many package developers run some sort of Continuous Integration (CI) system to verify that
their code works.</p>
<p>They can use a testing matrix to run the tests on a number of different platforms, architectures, and versions of your programming language,
but that's still very far from covering all the possibilities.</p>
<p>In addition they usually test their code with the latest version of their dependencies.</p>
<p>You have good chance that the code was never tested on a system like yours.</p>
<p>How can you be confident that the code you just installed works as expected on your computer as well?</p>
<h2 class="title is-4">Test the 3rd party packages on your system!</h2>
<p>In the Perl world there are a number of clients for <a href="https://www.cpan.org/">CPAN</a>, the package management
system. The common feature is that by default they run all the automated tests of every dependency as they are
installed recursively. Not only that, but if enabled they can also send the results to a central database
called <a href="http://www.cpantesters.org/">CPAN Testers</a> where both the author and other users can see the results
and can inspect the failures if necessary.</p>
<p>This system was invaluable before the introduction of the various cloud-based CI services, but even today it provieds a lot of value.
It's data is integrated into <a href="https://metacpan.org/">Meta CPAN</a>, the site where people locate 3rd party Perl packages.
One can easily see the ratio of success and failure reports.</p>
<p>If the current version of the package does not work on your system you can easily locate a version of the package that had passing reports
and you can switch to that version while waiting for a bug-fix to arrive.</p>
<p>I think this is an awesome feature of the Perl ecosystem that I wish other languages have also adopted.</p>
<h2 class="title is-4">Speed</h2>
<p>The main drawback of the system is running the tests for all the dependencies can take a lot of time.
I mean 10s of minutes. The <b>cpan</b> clients allow you to opt-out and install the dependencies without running the tests.</p>
<h2 class="title is-4">Failures</h2>
<p>Another issue with this system is the question what happens if a test of a package fails. On one hand it is a good thing as
it probably revealed a situation in which the package does not work properly. If this happens to experienced developers they
will probably know how to report the bug. If this happens to someone who is less experienced or who is new to the language
this might freak them out.</p>
<p>A special case of this is when the failure is due to something incorrect in the tests themselves.</p>
<h2 class="title is-4">Design / Wish-list</h2>
<p>I think if I could design this myself I would probably make the default not to test. So beginners have a smoother experience.
I would also make it easy to configure the tool to run the tests during the installation.</p>
<p>I would make it possible that the client run the tests selectively only on some of the packages.
For example only the tests of the immediate dependencies, or only the tests of the package the user deem to be very important.</p>
<p>I would also make it easy to run the tests on the already installed packages.</p>
<p>I would definitely have a central database of the reports and let people opt-in to send the reports there.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Live Crystal Shardbox development with Johannes Müller (straight-shoota)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-23T21:30:01Z</updated>
    <pubDate>2021-06-23T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/crystal-shardbox" />
    <id>https://code-maven.com/crystal-shardbox</id>
    <content type="html"><![CDATA[<p>Live <a href="https://crystal-lang.org/">Crystal</a> <a href="https://shardbox.org/">Shardbox</a> development with
<a href="https://www.linkedin.com/in/johannes-m%C3%BCller-b4929786/">Johannes Müller</a> (<a href="https://github.com/straight-shoota">straight-shoota</a>)</p>
<p>The resulting <a href="https://github.com/shardbox/shardbox-web/pull/9">Pull Request</a></p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/hlC88df4qqM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=0">0:00 Welcome, a bit of background.</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=70">1:10 Johannes introduces himself.</a> he works at <a href="https://manas.tech/">Manas Tech</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=210">3:30 Gabor introduces himself.</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=360">6:00 Gabor is trying to explain what does Shardbox do.</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=840">14:00 Explaining the Shardbox catalog.</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=1255">20:55 Explaining the Shardbox core.</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=1320">22:00 Schema overview</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=2370">39:30 Explaining about the code of Shardbox core</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=2905">48:25 Setting up the development environment - PostgreSQL in Docker</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=3590">58:50 Install Crystal dependencies for the Shardbox core (till 1:14:30)</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=4580">1:16:20 Build the worker</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=4960">1:22:40 Start setting up the Shardbox web application</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=5355">1:29:15 We have Shardbox running on my computer!</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=5630">1:33:50 Change the Jinja templates to add links to the licenses</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=5805">1:36:45 Change the search route to accept the new parameter</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=7020">1:57:00 Showing the query on the search result page</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=7380">2:03:00 Commit the changes, send pull-request.</a></p>
</li>
<li>
<p><a href="https://youtu.be/hlC88df4qqM?t=7750">2:09:10 Plans for Shardbox</a></p>
</li>
</ul>
<p>Schema overview is in this file: db/schema-overview.svg in the <a href="https://github.com/shardbox/shardbox-core">shardbox-core repository</a>.</p>
<p>The <b>catalog</b> directory in the <a href="https://github.com/shardbox/catalog">catalog</a> repository contains the manually mapped shards.</p>
<h2 class="title is-4">PostgreSQL in Docker</h2>
<p>Start running the Docker container:</p>
<pre><code>docker run -v$(pwd):/opt --name shardbox -e POSTGRES_PASSWORD=Secret -d postgres
</code></pre>
<p>Connect to the container:</p>
<pre><code>docker exec -it shardbox bash
</code></pre>
<p>In the container:</p>
<pre><code>cd /opt
apt-get update
apt-get install make
PGUSER=postgres TEST_DATABASE_URL=postgres://postgres:Secret@localhost/shardbox_test make test_db
</code></pre>
<p>At the end of the session working on sharbox you can stop the container:</p>
<pre><code>docker stop shardbox
</code></pre>
<p>Packages we had to install (on the Ubuntu host)</p>
<pre><code>sudo apt-get install libsass-dev
sudo apt-get install postgresql-client
sudo apt-get install libgit2-dev
</code></pre>
<p>Get the IP address of the Docker container:</p>
<pre><code>docker inspect shardbox
</code></pre>
<p>Use that IP address in the following commands:</p>
<p>We checked if we can access the database using psql:</p>
<pre><code>psql postgres://postgres:Secret@172.17.0.2/shardbox_test
</code></pre>
<p>Running the tests of shardbox-core:</p>
<pre><code>export TEST_DATABASE_URL=postgres://postgres:Secret@172.17.0.2/shardbox_test
export SHARDS_OPTS=--ignore-crystal-version
# make test # this did not work
crystal spec
</code></pre>
<p>Build the worker</p>
<pre><code>make build
</code></pre>
<p>Setting up for development database:</p>
<pre><code>export DATABASE_URL=postgres://postgres:Secret@172.17.0.2/shardbox_test
</code></pre>
<p>Create a <a href="https://github.com/settings/tokens">Personal access token</a> with a name that you can easily recognize, e.g. &quot;Shardbox Development Token&quot; using the following rights:</p>
<pre><code>repo
   x public_repo

user
   x read:user
   x user:email
</code></pre>
<pre><code>export GITHUB_TOKEN=...
./bin/worker
./bin/worker import_catalog ../shardbox-catalog/catalog/
</code></pre>
<p>Importing the whole catalog can take a lot of time so we copied a single file from the catalog
and ran on it. I would think a flag to limit the number of shards to be imported would help here.</p>
<pre><code>mkdir catalog/
cp ../shardbox-catalog/catalog/Web_Servers.yml catalog/
./bin/worker import_catalog catalog/
</code></pre>
<p>One can also update the metrics:</p>
<pre><code>./bin/worker update_metrics
</code></pre>
<h2 class="title is-4">Building the web applicaton in shardbox-web</h2>
<pre><code>SHARDS_OPTS=--ignore-crystal-version make build
</code></pre>
<p>Only the web application:</p>
<pre><code>SHARDS_OPTS=--ignore-crystal-version make bin/app
</code></pre>
<p>Run the web application</p>
<pre><code>./bin/app
</code></pre>
<p>Format the source code:</p>
<pre><code>crystal tool format
</code></pre>
<!--
Scheduled for <span id="localdate" x-schedule="2021-06-23T16:00:00+03:00"></span>

<a class="btn btn-lg btn-success" href="https://us02web.zoom.us/meeting/register/tZEuceuprT8iGNLbQHGEeE10-rDF0HNSh-pJ">Register here</a>

Check out all the other [live](https://code-maven.com/live) events and the calendar where you'll be able to see the time given in your time-zone.
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops - part 9</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-23T07:00:01Z</updated>
    <pubDate>2021-06-23T07:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop-9" />
    <id>https://code-maven.com/online-self-knowledge-workshop-9</id>
    <content type="html"><![CDATA[<p>In this live coding session we are going to start the application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are going to use <a href="https://reactjs.org/">ReactJS</a>.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ZOjzbVoH-Kg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://github.com/devill/selfknowledge">Source code</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>DevOps vs. DevOps Engineer</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-21T15:30:01Z</updated>
    <pubDate>2021-06-21T15:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/devops-vs-devops-engineer" />
    <id>https://code-maven.com/devops-vs-devops-engineer</id>
    <content type="html"><![CDATA[<p>The name <a href="https://en.wikipedia.org/wiki/DevOps">DevOps</a>  was coined in 2009 and it covered
&quot;a set of practices intended to reduce the time between committing a change to a system and the change being placed into
normal production, while ensuring high quality&quot;.</p>
<p>The intention of the naming was to indicate the cooperation between Development and Operations including QA, Security and every other discipline in an organization
that touches the product or service the company builds.</p>
<p>However, in many organization instead of introducing and enhancing these practices a job title called DevOps Engineer was created.
In other places the <b>operations team</b>, or the <b>external system team</b> was renamed to be <b>DevOps team</b>.
So today you will see lots of job ads looking for DevOps Engineers.
The task of the people in these positions is very similar to what system administrators used to do, but now they are expected to also understand &quot;the cloud&quot;,
the various cloud-based infrastructures and systems. They are also expected to know a lot more &quot;scripting&quot; than it was used to expected from system administrators.
The quotes around &quot;scripting&quot; is due to the fact that it is actually programming using one of the dynamic languages (e.g. perl, python, ruby, groovy) or in the unix shell.
However compiled languages are also in use, for example Go.</p>
<p>In many cases the real problem the DevOps movement tried to solve was not addressed.
The Developers and now the &quot;DevOps team&quot; are separate silos.
The developers write some code and then throw it over the virtual wall to the &quot;QA team&quot; to test or to the &quot;DevOps team&quot; to deploy.</p>
<p>One of the push-backs I get when I say that DevOps should not be a job-title, but definitely should not be a team,
is that &quot;who will then do the work DevOps do now, the developers?&quot;.</p>
<p>Well, partially yes.</p>
<p>Partially it is a different organization structure. Instead of &quot;developers&quot;, &quot;devops&quot;, &quot;qa&quot;, &quot;infosec&quot; teams, we have
teams that correspond to products (or services) that contain the expertise from the various fields.</p>
<p>We don't expect the developers to learn all that is to learn about the various cloud infrastructures or how to maintain
a database server, but we probably expect more involvement than used to be.</p>
<p>We probably also need to have an <b>Infrastructure team</b> that provides the shared tools for all the service-oriented-teams
to do they work. From development through deployment to maintenance of the service.</p>
<h2 class="title is-4">What can be done?</h2>
<p>I can tell you how I am trying to help improve the speed of development and the speed of value creation.</p>
<p>I help introducing automation - starting from the proper use of version control and branching through test automation,
containerization, Continuous Integration (CI) and sometimes even Continuous Deployment (CD).</p>
<p>The real value isn't in the installation and configuration of the respective tools.
The real value is getting the team used to think about the whole process from the change to the source code till the
deployment of that code on the server or on the computer of the client.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Solution: rectangle in Ruby (CLI and STDIN = Standard IO)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-21T12:01:39Z</updated>
    <pubDate>2021-06-21T12:01:39Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/solution-ruby-rectangular" />
    <id>https://code-maven.com/solution-ruby-rectangular</id>
    <content type="html"><![CDATA[<p>Exercise: rectangle</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ruby/rectangle.rb">examples/ruby/rectangle.rb</a></strong></p>
<pre><code class="language-ruby">width = 23
length = 19

area = width * length
circumference = 2 * (width + length)
puts &quot;area: #{area}&quot;
puts &quot;circumference: #{circumference}&quot;

</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ruby/rectangle_cli.rb">examples/ruby/rectangle_cli.rb</a></strong></p>
<pre><code class="language-ruby">if ARGV.size != 2
    puts &quot;#{$PROGRAM_NAME} WIDTH LENGTH&quot;
    exit 1
end

width = ARGV[0].to_f
length = ARGV[1].to_f

area = width * length
circumference = 2 * (width + length)
puts &quot;area: #{area}&quot;
puts &quot;circumference: #{circumference}&quot;

</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ruby/rectangle_stdin.rb">examples/ruby/rectangle_stdin.rb</a></strong></p>
<pre><code class="language-ruby">print &quot;Width:&quot;
width = gets.strip.to_f

print &quot;Length:&quot;
length = gets.strip.to_f

area = width * length
circumference = 2 * (width + length)
puts &quot;area: #{area}&quot;
puts &quot;circumference: #{circumference}&quot;

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bash prompt showing git status</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-21T09:30:01Z</updated>
    <pubDate>2021-06-21T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bash-prompt-showing-git-status" />
    <id>https://code-maven.com/bash-prompt-showing-git-status</id>
    <content type="html"><![CDATA[<p>This code snippet can be included un the ~/.bash_profile It will change the Linux shell prompt
to indicate the name of the current branch (if the current working directory is inside a git repository).
It will also use color-code to indicate if there are non-committed files in the current repository.</p>
<p>Red for when there are non-committed files, yellow when everything is committed, but some changes have not been pushed to remote yet,
and green when the directory is clean.</p>
<p>Of course it works on the current branch so if you have unpushed commits in other branches this won't indicate it.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/bash_git_prompt.sh">examples/bash_git_prompt.sh</a></strong></p>
<pre><code class="language-bash"># Bash: when in a git repository, show the current branch, indicate if the working directory is clean or not.
function __set_my_prompt
{
   local RED=&quot;\033[0;31m&quot;
   local GREEN=&quot;\033[0;32m&quot;
   local NOCOLOR=&quot;\033[0m&quot;
   local YELLOW=&quot;\033[0;33m&quot;
   local BLACK=&quot;\033[0;30m&quot;

   local git_modified_color=&quot;\[${GREEN}\]&quot;
   local git_status=$(git status 2&gt;/dev/null | grep &quot;Your branch is ahead&quot; 2&gt;/dev/null)
   if [ &quot;$git_status&quot; != &quot;&quot; ]
   then
       git_modified_color=&quot;\[${YELLOW}\]&quot;
   fi
   local git_status=$(git status --porcelain 2&gt;/dev/null)
   if [ &quot;$git_status&quot; != &quot;&quot; ]
   then
       git_modified_color=&quot;\[${RED}\]&quot;
   fi

   local git_branch=$(git branch --show-current 2&gt;/dev/null)
   if [ &quot;$git_branch&quot; != &quot;&quot; ];
   then
      git_branch=&quot;($git_modified_color$git_branch\[${BLACK}\]) &quot;
   fi
   PS1=&quot;\[${BLACK}\]\u@\h \w $git_branch$\[${NOCOLOR}\] &quot;
}

PROMPT_COMMAND='__set_my_prompt'

</code></pre>
<p>Feel free to reuse any part of this code.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Working on PyDigger with Upasana Shukla - part 3</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-20T21:30:02Z</updated>
    <pubDate>2021-06-20T21:30:02Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/pydigger-3" />
    <id>https://code-maven.com/pydigger-3</id>
    <content type="html"><![CDATA[<p>In this <a href="/live">live pair programming</a> session
<a href="https://www.linkedin.com/in/upasana-shukla/">Upasana Shukla</a> and myself were working on the
<a href="https://pydigger.com/">PyDigger</a> project.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/uG6G92t7JV8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>The source code of the <a href="https://code-maven.com/slides/python/cwd-context-manager">cwd context manager</a>.</p>
<p><a href="https://stackoverflow.com/questions/16492891/mongodb-aggregation-get-counts-of-key-value-pairs">MongoDB aggregation get counts of key value pairs</a></p>
<ul>
<li><a href="https://youtu.be/uG6G92t7JV8?t=0">0:00 Hello - Our code is now deployed!</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=110">1:50 Updating the local Git of Upasana and trying to remember what we did last time.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=480">8:00 Discussing the new and proper way of using Docker-compose override.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=1010">16:50 Get inside the docker container (exec) to run our program.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=1200">20:00 Trying to understand why config.yml is needed and why is it missing.</a> <a href="https://github.com/szabgab/pydigger.com/issues/50">#50</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=1570">26:10 After fixing that we encounter the missing dev.yml. Because we change directory in the process and don't change it back.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=1630">27:10 Explaining about context managers in Python, creating one for chdir.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=2235">37:15 Remove the temporary directory when we are done with it using a context manager.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=2790">46:30 Let's figure out why the --url parameter did not have the expected impact and how to run the fetch.py properly. Let's also update the README file.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=3000">50:00 Start collecting the flake8 results</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=3300">55:00 Trying to figure out why the flake8 code does not get executed.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=3750">1:02:30 Add the --package command line option</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=4190">1:09:50 Finally we have Flake8 results!</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=4370">1:12:50 Adding the Flake8 results to the datastructure and store it in MongoDB.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=4575">1:16:15 Trying to run mongo, the MongoDB client inside the container.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=5070">1:24:30 Deleting (dropping) the MongoDB database</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=5150">1:25:50 Describing this in the README</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=5280">1:28:00 Start looking at the web page to see the newly collected Flake8 report.</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=5820">1:37:00 Trying to figure out the right MongoDB query</a></li>
<li><a href="https://youtu.be/uG6G92t7JV8?t=6900">1:55:00 Cleaning up making sure tests are passing and the previous code still works.</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Build Docker image in GitLab CI/CD pipeline</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-18T07:50:01Z</updated>
    <pubDate>2021-06-18T07:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/build-docker-image-in-gitlab-pipeline" />
    <id>https://code-maven.com/build-docker-image-in-gitlab-pipeline</id>
    <content type="html"><![CDATA[<p>When running a GitLab CI/CD pipeline you can use any public Docker image, but you can also build your own images and use them later on.
In this article we'll see how to do that.</p>
<p>Out of the several options we'll see setting up your own Runner and using Docker on it.</p>
<p>A Runner is any real or virtual box. (AFAIK it can be Linux, Windows, and Mac as well.) On this box there is an application provided by GitLab
that handles the runner. In a pipeline you can execute code directly on the runner, but in most cases it is better to use a Docker container on top
of the Runner for your regular CI system.</p>
<p>However, when building a Docker image you will want to execute the docker commands directly on the Runner.</p>
<h2 class="title is-4">Create a Virtual Machine</h2>
<p>I tried this once with a <a href="/digitalocean">Digital Ocean Droplet</a> that already had Docker installed and once
on <a href="https://azure.com">Azure</a> where I had to install Docker manually.</p>
<h2 class="title is-4">Install Docker</h2>
<p>Follow the <a href="https://docs.docker.com/get-docker/">Docker installation</a> on the machine and also
the post installation needed on Linux to allow non-root user to run docker. Enable it for the user <b>gitlab-runner</b>.</p>
<h2 class="title is-4">Install GitLab Runner</h2>
<p>First thing is to <a href="https://docs.gitlab.com/runner/install/">Install GitLab Runner</a>.</p>
<p>I personally followed the instructions to <a href="https://about.gitlab.com/blog/2016/04/19/how-to-set-up-gitlab-runner-on-digitalocean/">Setup Docker Runner on Digital Ocean</a></p>
<p>Also see <a href="https://docs.gitlab.com/ee/ci/docker/using_docker_build.html">using docker build</a>.</p>
<h2 class="title is-4">Register the runner and restart</h2>
<pre><code>sudo gitlab-runner register -n --url https://gitlab.com/ --registration-token $TOKEN --executor shell --description &quot;ShellRunner&quot; --tag-list shell-runner
sudo gitlab-runner restart
</code></pre>
<p>In order to run the CI jobs in a Docker container we will need another runner:</p>
<pre><code>sudo gitlab-runner register -n --url https://gitlab.com/ --registration-token $TOKEN --executor docker --description &quot;Docker Runner&quot; --tag-list docker-runner --docker-image alpine:3.14.0
sudo gitlab-runner restart
</code></pre>
<p>The docker-image parameter sets the default image. I don't think it is very important what you set here as you should always explicitly define it in the .gitlab-ci.yml file anyway.</p>
<p>Edit the following file and comment out everything</p>
<pre><code>/home/gitlab-runner/.bash_logout
</code></pre>
<p><a href="https://docs.gitlab.com/ee/user/packages/container_registry/">Container registry</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/gitlab-docker/Dockerfile">examples/gitlab-docker/Dockerfile</a></strong></p>
<pre><code class="language-Dockerfile">FROM alpine:latest
WORKDIR /opt
RUN date &gt; date.txt

</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/gitlab-docker/.gitlab-ci.yml">examples/gitlab-docker/.gitlab-ci.yml</a></strong></p>
<pre><code class="language-yaml">build_image:
  stage: build
  script:
    - hostname
    - uptime
    - uname -a
    - docker info
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY/szabgab/gl-try:latest .
    - docker push $CI_REGISTRY/szabgab/gl-try:latest
  tags:
    - shell-runner

use_image:
  stage: test
  image: $CI_REGISTRY/szabgab/gl-try:latest
  script:
    - hostname
    - uptime
    - uname -a
    - pwd
    - ls -l
    - ls -l /opt
    - cat /opt/date.txt
    - date


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops - part 8</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-16T22:50:01Z</updated>
    <pubDate>2021-06-16T22:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop-8" />
    <id>https://code-maven.com/online-self-knowledge-workshop-8</id>
    <content type="html"><![CDATA[<p>In this live coding session we are going to start the application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are going to use <a href="https://reactjs.org/">ReactJS</a>.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/iOrJcJberxY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://github.com/devill/selfknowledge">Source code</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Crystal part 2 - puts, print, p!</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-14T08:30:01Z</updated>
    <pubDate>2021-06-14T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/crystal-2" />
    <id>https://code-maven.com/crystal-2</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/mSwmG8S0_Do" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Crystal part 1 - installation</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-14T08:00:01Z</updated>
    <pubDate>2021-06-14T08:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/crystal-1" />
    <id>https://code-maven.com/crystal-1</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/hoKd7kcD_CA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Crystal</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-14T07:30:01Z</updated>
    <pubDate>2021-06-14T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/crystal" />
    <id>https://code-maven.com/crystal</id>
    <content type="html"><![CDATA[<p><a href="https://crystal-lang.org/">Crystal Language</a>
<a href="/slides/crystal/">Crystal language slides</a></p>
<h2 class="title is-4">Crystal Course</h2>
<ul>
<li><a href="/crystal-course">Crystal course</a></li>
<li><a href="/crystal-course-1">Crystal course part 1</a></li>
</ul>
<h2 class="title is-4">Learning Crystal</h2>
<ul>
<li><a href="/crystal-1">Crystal part 1 - installation, Hello World!</a></li>
<li><a href="/crystal-2">Crystal part 2 - puts, print, p!, interpolation</a></li>
</ul>
<h2 class="title is-4">Other</h2>
<ul>
<li>
<p><a href="/crystal-shardbox">Crystal Shardbox live pair programming</a></p>
</li>
<li>
<p><a href="/crystal-binary-palindrom">Binary Palindrom in Crystal</a></p>
</li>
<li>
<p><a href="/crystal-swap-nibbles">Swap Nibbles Crystal</a></p>
</li>
<li>
<p><a href="/crystal-sequence-without-1-on-1">Sequence without 1-on-1 in Crystal</a></p>
</li>
</ul>
<h2 class="title is-4">Continue</h2>
<ul>
<li><a href="/crystal-2">Crystal part 2</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops - part 7</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-10T22:50:01Z</updated>
    <pubDate>2021-06-10T22:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop-7" />
    <id>https://code-maven.com/online-self-knowledge-workshop-7</id>
    <content type="html"><![CDATA[<p>In this live coding session we are going to start the application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are going to use <a href="https://reactjs.org/">ReactJS</a>.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/dpdiyy_at00" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://github.com/devill/selfknowledge">Source code</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops - part 6</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-06-06T22:50:01Z</updated>
    <pubDate>2021-06-06T22:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop-6" />
    <id>https://code-maven.com/online-self-knowledge-workshop-6</id>
    <content type="html"><![CDATA[<p>In this live coding session we are going to start the application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are going to use <a href="https://reactjs.org/">ReactJS</a>.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/MwhXk3TXDbI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://github.com/devill/selfknowledge">Source code</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops - part 5</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-30T09:50:01Z</updated>
    <pubDate>2021-05-30T09:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop-5" />
    <id>https://code-maven.com/online-self-knowledge-workshop-5</id>
    <content type="html"><![CDATA[<p>In this live coding session we are going to start the application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are going to use <a href="https://reactjs.org/">ReactJS</a>.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ajU3jo_c0dU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://www.joshwcomeau.com/react/persisting-react-state-in-localstorage/">Persisting React State in localStorage</a></li>
<li><a href="https://emojipedia.org/cross-mark/">cross-mark emoji</a></li>
<li><a href="https://github.com/devill/selfknowledge">Source code</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops - part 4</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-27T07:50:01Z</updated>
    <pubDate>2021-05-27T07:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop-4" />
    <id>https://code-maven.com/online-self-knowledge-workshop-4</id>
    <content type="html"><![CDATA[<p>In this live coding session we are going to start the application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are going to use <a href="https://reactjs.org/">ReactJS</a>.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/eNFYQZ9a2_A" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://aws.amazon.com/amplify/">AWS Amplify</a></li>
<li><a href="https://master.d5ibbnhxrpyii.amplifyapp.com/">Amplify generated URL</a></li>
<li><a href="https://identity.lgbt-quiz.net/">Identity LGBT Quiz</a></li>
<li><a href="https://github.com/devill/selfknowledge">Source code</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Learning ReactJS in a live session</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-26T17:30:01Z</updated>
    <pubDate>2021-05-26T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/learning-reactjs" />
    <id>https://code-maven.com/learning-reactjs</id>
    <content type="html"><![CDATA[<p>In this live session <a href="https://steve.dondley.com/">Steve Dondley</a> and myself will star learning ReactJS
and trying to prepare some small examples for my <a href="https://code-maven.com/slides/">slides</a>.</p>
<p>Steve Dondley on <a href="https://github.com/sdondley">GitHub</a> and on <a href="https://metacpan.org/author/STEVIED">MetaCPAN</a>.</p>
<p>Scheduled for <span id="localdate" x-schedule="2021-06-01T16:00:00+03:00"></span></p>
<p><a class="btn btn-lg btn-success" href="https://us02web.zoom.us/meeting/register/tZYkfu6gqjMjGtNuexcUXrfB_yKDXm3x6u26">Register here</a></p>
<p>Check out all the other <a href="https://code-maven.com/live">live</a> events and the calendar where you'll be able to see the time given in your time-zone.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Working on PyDigger with Upasana Shukla</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-24T13:30:01Z</updated>
    <pubDate>2021-05-24T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/pydigger-2" />
    <id>https://code-maven.com/pydigger-2</id>
    <content type="html"><![CDATA[<p>In this <a href="/live">live pair programming</a> session
<a href="https://www.linkedin.com/in/upasana-shukla/">Upasana Shukla</a> and myself were working on the
<a href="https://pydigger.com/">PyDigger</a> project.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/X5xqXwhaASg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://youtu.be/X5xqXwhaASg?t=0">0:00 Hello, showing dev.pydigger.com that was a temporary place for the Docker based setup.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=110">1:50 Docker compose</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=240">4:00 Issues. Explaining flake8 and mypy.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=385">6:25 Decide on Driver-Navigator again; Setting up the Python virtual environment again.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=608">10:08 Looking at the the CI (GitHub Actions) to see how we run the tests</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=720">12:00 Running the tests with the flake8 flag and running through the issues.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=1020">17:00 Using a variable that does not exist. Digging through git history understanding what we did last time.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=1470">24:30 Development configuration (dev.yml)</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=1845">30:45 Using</a> <code>git stash</code> and then <code>git checkout</code> older version to find how we broke the code. Upasana showing her total control of git.</li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=2406">40:06 We found the bug. Now let's check it and the clean up more of the issues reported by flake8.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=2850">47:30 Add flake8 testing to the CI system as well.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=2940">49:00 Looking at the flake8 configuration in setup.cfg and explaining about them.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=3044">50:44 How Gabor likes to indent code</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=3310">55:10 Explain about sys.path</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=3675">1:01:15 The stats page is broken. Explaining why.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=3748">1:02:28 Buy my books and support my work!</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=3855">1:04:15 Getting back to the flake8 ticket collecting this information about all the projects.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=4060">1:07:40 Telling about the idea of showing the images (gravatars) of all the authors of the packages.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=4270">1:11:10 Flake8 it is</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=4340">1:12:20 Explaining <strong>name</strong> == '<strong>main</strong>'</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=4610">1:16:50 Adding logging</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=5780">1:36:20 Now that we know how to use the myflake8 module we can start thinking how to run it on the source code of other projects.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=5850">1:37:30 Download a zip file using requests to a temporary directory and then unzip it.</a></li>
<li><a href="https://youtu.be/X5xqXwhaASg?t=6990">1:56:30 Wrapping up</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Working on PyDigger</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-23T21:30:01Z</updated>
    <pubDate>2021-05-23T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/pydigger" />
    <id>https://code-maven.com/pydigger</id>
    <content type="html"><![CDATA[<p>In this <a href="/live">live pair programming</a> session
<a href="https://www.linkedin.com/in/upasana-shukla/">Upasana Shukla</a> and myself were working on the
<a href="https://pydigger.com/">PyDigger</a> project.</p>
<p>Next sessions is scheduled for <span id="localdate" x-schedule="2021-08-30T10:00:00+03:00"></span></p>
<p><a class="btn btn-lg btn-success" href="https://us02web.zoom.us/meeting/register/tZAodO-srDksG9UTK8huzyjSJ5B9Wuz3z0Th">Register here</a></p>
<p>Check out all the other <a href="https://code-maven.com/live">live</a> events and the calendar.</p>
<ul>
<li><a href="/pydigger-1">Part 1</a></li>
<li><a href="/pydigger-2">Part 2</a></li>
<li><a href="/pydigger-3">Part 3</a></li>
<li><a href="/pydigger-4">Part 4</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops - part 3</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-20T23:30:01Z</updated>
    <pubDate>2021-05-20T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop-3" />
    <id>https://code-maven.com/online-self-knowledge-workshop-3</id>
    <content type="html"><![CDATA[<p>In this live coding session we are going to start the application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are going to use <a href="https://reactjs.org/">ReactJS</a>.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/w7KkzHcm2gg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://github.com/devill/selfknowledge">Source code</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Registry of 3rd party libraries / packages / modules</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-15T11:30:01Z</updated>
    <pubDate>2021-05-15T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/package-registry" />
    <id>https://code-maven.com/package-registry</id>
    <content type="html"><![CDATA[<p>Most of the major programming languages have lots of open source extensions. Many of the development frameworks also have
packages. Even some of the editors and IDEs have such extensions.</p>
<p>These extensions are sometimes referred to as modules or libraries or packages.</p>
<p>Sometime they get a different name.</p>
<p><a href="http://www.modulecounts.com/">Module counts</a> show the list of all the module/package/library systems and the number of items in them.</p>
<p>Here I tried to replicate and extend that list.</p>
<h2 class="title is-4">Programming Languages</h2>
<ul>
<li>Clojure <a href="https://clojars.org/">Clojars</a></li>
<li>Crystal <a href="https://crystalshards.xyz">CrystalShards</a> and <a href="https://shardbox.org/">Shardbox</a></li>
<li>C# .NET <a href="https://www.nuget.org/">NuGet</a> the package manager for .NET.</li>
<li>D lang <a href="https://code.dlang.org/">DUB</a> the D package registry</li>
<li>Erlang / Elixir<a href="https://hex.pm/">Hex.pm</a> The package manager for the Erlang ecosystem</li>
<li>Go <a href="https://pkg.go.dev/">Go Packages</a></li>
<li>Haskell - <a href="https://www.haskell.org/cabal/">Cabal</a> - Common Architecture for Building Applications and Libraries and <a href="http://hackage.haskell.org/">Hackage</a> The Haskell Package Repository</li>
<li>Java <a href="https://search.maven.org/">Maven Central</a></li>
<li>JavaScript (NodeJS) - <a href="https://www.npmjs.com/">npm</a> - Node Package Manager</li>
<li>Julia <a href="https://julialang.org/packages/">Julia packages</a></li>
<li>Lua <a href="https://luarocks.org/">Lua Rocks</a></li>
<li>Nim <a href="https://github.com/nim-lang/nimble/">Nimble</a></li>
<li>Objective-C - <a href="https://cocoapods.org/">CocoaPods</a> a dependency manager for Swift and Objective-C Cocoa projects.</li>
<li>Perl <a href="https://www.cpan.org/">CPAN</a> - Comprehensive Perl Archive Network and the real UI: <a href="https://metacpan.org/">MetaCPAN</a></li>
<li>PHP <a href="https://pear.php.net/">PEAR</a> PHP Extension and Application Repository and <a href="https://packagist.org/">Packagist</a> The PHP Package Repository</li>
<li>Python <a href="https://pypi.org/">PyPI</a> Python Package Index</li>
<li>R <a href="https://cran.r-project.org/">CRAN</a> The Comprehensive R Archive Network</li>
<li>Raku <a href="https://modules.raku.org/">Raku Modules</a></li>
<li>Ruby <a href="https://rubygems.org/">RubyGems</a></li>
<li>Rust <a href="https://crates.io/">Crates</a> The Rust community's crate registry</li>
<li>Scala <a href="https://index.scala-lang.org/">The Scala Library Index</a></li>
<li>Swift <a href="https://swiftpackageregistry.com/">Swift Package Registry</a></li>
<li>TypeScript - See JavaScript</li>
</ul>
<h2 class="title is-4">C++ seems to be a category of itself</h2>
<p><a href="https://github.com/jnareb">Jakub Narębski</a> wrote me:</p>
<p>The C++ language does not come with an integrated package manager to deal with external dependencies of a project.
However, there exists various third party package managers for C++ with their package repositories:</p>
<ul>
<li><a href="https://conan.io/">Conan</a> with <a href="https://conan.io/center/">ConanCenter</a> with 867 packages</li>
<li><a href="https://build2.org/">build2</a> with <a href="https://cppget.org/">cppget</a> with 83 packages</li>
<li><a href="https://mesonbuild.com/">Meson</a> with <a href="https://wrapdb.mesonbuild.com/">Wrap DB</a> with 163 packages (recipes)</li>
<li><a href="https://github.com/microsoft/vcpkg">vcpkg</a> from Microsoft with <a href="https://vcpkg.io/en/packages.html">vcpkg</a> with 1656 packages</li>
</ul>
<h2 class="title is-4">Frameworks</h2>
<ul>
<li><a href="https://www.djangoproject.com/">Django (Python)</a> - <a href="https://djangopackages.org/">Django Packages</a></li>
<li><a href="https://www.drupal.org/">Drupal (PHP)</a> - <a href="https://www.drupal.org/project/project_module">Drupal modules</a></li>
<li><a href="https://laravel.com/">Laravel (PHP)</a> - <a href="https://packalyst.com/">Packalyst</a></li>
</ul>
<h2 class="title is-4">Editors</h2>
<ul>
<li>Emacs <a href="https://melpa.org/">MELPA</a> Milkypostman's Emacs Lisp Package Archive</li>
<li>Vim <a href="https://www.vim.org/scripts/">Vim Scripts</a></li>
<li>VS Code<a href="https://marketplace.visualstudio.com/">VS Marketplace</a> Extensions for the Visual Studio family of products</li>
<li>Sublime Text 3<a href="https://www.sublimetext.com/">Sublime Text</a> has <a href="https://packagecontrol.io/">Packages</a></li>
</ul>
<h2 class="title is-4">Other</h2>
<ul>
<li>
<p>Docker <a href="https://hub.docker.com/">Docker HUB</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Working on the workout-app with Rachel Normand - part 2 - Python Flask, Pytest</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-11T11:50:01Z</updated>
    <pubDate>2021-05-11T11:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/workout-app-2" />
    <id>https://code-maven.com/workout-app-2</id>
    <content type="html"><![CDATA[<p>In this live coding session we are working on the <a href="https://github.com/rnewstead1/workout-app">workout-app</a>
of <a href="https://www.linkedin.com/in/rnewstead/">Rachel Normand</a>.</p>
<p>The project has a <a href="/flask">Flask</a> <a href="/python">Python</a> back-end and a <a href="/reactjs">ReactJS</a> front-end.</p>
<ul>
<li><a href="https://github.com/rnewstead1/workout-app">Source code on GitHub</a></li>
<li><a href="https://flask-sqlalchemy.palletsprojects.com/">Flask-SQLAlchemy</a></li>
<li><a href="https://marcosschroh.github.io/yoyo-database-migrations/">Yoyo database migrations</a></li>
<li><a href="https://docs.pytest.org/en/6.2.x/tmpdir.html">pytest temporary directories and files</a></li>
<li><a href="https://code-maven.com/python-flask-before-first-request">before_first_request</a></li>
</ul>
<iframe width="560" height="315" src="https://www.youtube.com/embed/tSf2G4W1tcA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Working on the workout-app with Rachel Normand</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-11T11:30:01Z</updated>
    <pubDate>2021-05-11T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/workout-app" />
    <id>https://code-maven.com/workout-app</id>
    <content type="html"><![CDATA[<p>In this live coding session we are working on the <a href="https://github.com/rnewstead1/workout-app">workout-app</a>
of <a href="https://www.linkedin.com/in/rnewstead/">Rachel Normand</a>.</p>
<p>The project has a <a href="/flask">Flask</a> <a href="/python">Python</a> back-end and a <a href="/reactjs">ReactJS</a> front-end.</p>
<ul>
<li><a href="/workout-app-1">Part 1 - ReactJS</a></li>
<li><a href="/workout-app-2">Part 2 - Python Flask and testing with Pytest</a></li>
</ul>
<iframe width="560" height="315" src="https://www.youtube.com/embed/Ynfca9OzqMU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-11T07:40:01Z</updated>
    <pubDate>2021-05-11T07:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop" />
    <id>https://code-maven.com/online-self-knowledge-workshop</id>
    <content type="html"><![CDATA[<p>In this live coding session we are working on an application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are using <a href="https://reactjs.org/">ReactJS</a> for the front-end.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<ul>
<li><a href="/online-self-knowledge-workshop-1">Part 1</a></li>
<li><a href="/online-self-knowledge-workshop-2">Part 2</a></li>
<li><a href="/online-self-knowledge-workshop-3">Part 3</a></li>
<li><a href="/online-self-knowledge-workshop-4">Part 4 (Refactoring and Deployment)</a></li>
<li><a href="/online-self-knowledge-workshop-5">Part 5</a> (persistent data, local storage)</li>
<li><a href="/online-self-knowledge-workshop-6">Part 6</a></li>
<li><a href="/online-self-knowledge-workshop-7">Part 7</a></li>
<li><a href="/online-self-knowledge-workshop-8">Part 8</a></li>
<li><a href="/online-self-knowledge-workshop-9">Part 9</a></li>
<li><a href="/online-self-knowledge-workshop-10">Part 10</a></li>
</ul>
<!--
Next session:

Scheduled for <span id="localdate" x-schedule="2021-06-22T18:00:00+03:00"></span>

Also see our [calendar](/live).

<a class="btn btn-lg btn-success" href="https://us02web.zoom.us/meeting/register/tZUqdeChqz8vE9wqUBKXqS526bJjdPU3ihbV">Register here</a>

-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops - part 2</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-11T07:30:01Z</updated>
    <pubDate>2021-05-11T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop-2" />
    <id>https://code-maven.com/online-self-knowledge-workshop-2</id>
    <content type="html"><![CDATA[<p>In this live coding session we are going to start the application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are going to use <a href="https://reactjs.org/">ReactJS</a>.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/Na3JZM8Dh7Y" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li>
<p><a href="https://github.com/devill/selfknowledge">Source code</a></p>
</li>
<li>
<p><a href="https://reactjs.org/docs/hooks-effect.html">hooks effect</a></p>
</li>
</ul>
<p>Next session:</p>
<p>Scheduled for <span id="localdate" x-schedule="2021-05-10T19:00:00+03:00"></span></p>
<p>Also see our <a href="/live">calendar</a>.</p>
<p><a class="btn btn-lg btn-success" href="https://us02web.zoom.us/meeting/register/tZUqdeChqz8vE9wqUBKXqS526bJjdPU3ihbV">Register here</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Working on PyDigger with Upasana Shukla</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-09T21:30:01Z</updated>
    <pubDate>2021-05-09T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/pydigger-1" />
    <id>https://code-maven.com/pydigger-1</id>
    <content type="html"><![CDATA[<p>In this <a href="/live">live pair programming</a> session
<a href="https://www.linkedin.com/in/upasana-shukla/">Upasana Shukla</a> and myself were working on the
<a href="https://pydigger.com/">PyDigger</a> project.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/gHXzNLx4oF4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p><a href="https://stackoverflow.com/questions/43720339/docker-error-could-not-find-an-available-non-overlapping-ipv4-address-pool-am">ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network</a></p>
<ul>
<li><a href="https://youtu.be/gHXzNLx4oF4">0:00 The beginning</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=60">1:00 Upasana introducing herself</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=168">2:48 There's more than one way to do it - in Python as well</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=225">3:45 The method of working (Driver-Navigator)</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=268">4:28 Introducing the PyDigger project</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=675">11:15 What are we going to do?</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=710">11:50 Visit the Issues</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=770">12:50 What operating system do you use? Let's setup the development environment</a> (The docker-compose has changed a bit since we recorded the video. See the <a href="https://github.com/szabgab/pydigger.com/">README of the project</a> Upasana fixing the Docker network issue.</li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=1847">30:47 The development environment is running. Run the tests. Collect some data.</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=2005">33:25 Updating the GitHub Actions file</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=2305">38:25 Create a branch and commit the first change to the project. Wait for the CI system to run.</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=2850">47:30 Looking at the GitHub Issues</a> Does the Python project use GitHub Actions?</li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=3030">50:30 Trying to figure out the code finding the Travis-CI configuration file.</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=4010">1:06:50 Creating a GitHub Personal Access Token</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=4310">1:11:50 Update the stats.html template</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=5800">1:36:40 Make it easy to fetch a specific project (add the --url parameter)</a></li>
<li><a href="https://youtu.be/gHXzNLx4oF4?t=8040">2:14:00 We are done! Some cleanup,git commit and git push. Sending a Pull Request</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Show dates in the timezone of the reader using JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-07T08:30:01Z</updated>
    <pubDate>2021-05-07T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/dates-in-the-timezone-of-the-reader-javascript" />
    <id>https://code-maven.com/dates-in-the-timezone-of-the-reader-javascript</id>
    <content type="html"><![CDATA[<p>I am running <a href="/live">live</a> online events that people can join from anywhere in the world if they know when the events start. Computing and showing the
date and time in every possible timezone is exhausting and would be probably confusing to the reader. The best is to show the scheduled date and time
in their local time-zone.</p>
<p>Encouraged by the <a href="https://dev.to/mjgardner/localizing-dates-in-a-perl-web-application-with-javascript-1n24">posts of Mark Gardner</a> I wanted to implement
it using JavaScript only. This is what I got:</p>
<p>In the first example we have a date string in the <b>mydate</b> variable and then we use the <b>toLocaleString</b> method with various <b>dateStyle</b> options
and <b>toLocaleDateString</b> options to show the date in different formats. You can click on the <b>try</b> link below the example to see the code running
in a separate tab.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/date.html">examples/javascript/date.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Date&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;default&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;long&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;medium&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;short&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;special-long&quot;&gt;&lt;/div&gt;
&lt;div id=&quot;special-short&quot;&gt;&lt;/div&gt;


&lt;/body&gt;
&lt;/html&gt;


&lt;script&gt;
const mydate = &quot;2021-04-13T19:00:00-04:00&quot;;
const date = new Date(mydate);
document.getElementById(&quot;default&quot;).innerHTML = date;
document.getElementById(&quot;long&quot;).innerHTML = date.toLocaleString( [], {dateStyle: &quot;long&quot;})
document.getElementById(&quot;medium&quot;).innerHTML = date.toLocaleString( [], {dateStyle: &quot;medium&quot;})
document.getElementById(&quot;short&quot;).innerHTML = date.toLocaleString( [], {dateStyle: &quot;short&quot;})
document.getElementById(&quot;special-long&quot;).innerHTML = date.toLocaleDateString( [], {
        weekday: 'long',
        year: 'numeric',
        month: 'long',
        day: 'numeric',
        hour: 'numeric',
        minute: 'numeric',
        timeZoneName: 'long'
    })
document.getElementById(&quot;special-short&quot;).innerHTML = date.toLocaleDateString( [], {
        weekday: 'long',
        year: 'numeric',
        month: 'long',
        day: 'numeric',
        hour: 'numeric',
        minute: 'numeric',
        timeZoneName: 'short'
    })
&lt;/script&gt;



</code></pre>
<p><a href="examples/javascript/date.html">view</a></p>
<p>See the list of <a href="https://tc39.es/ecma402/#sup-date.prototype.tolocalestring">options of toLocalString</a></p>
<h2 class="title is-4">A more real-world version</h2>
<p>In the second example you can see a more real-world version. The date string is in an attribute of a <b>div</b> element. It could have been
added there manually or by some back-end application with a template.</p>
<p>Then there is a function that check if there is an HTML element with the &quot;localdate&quot; id. Takes the attribute from it and uses the same
techniques as above to set the date in a nice format. (Use the <b>try</b> link to see it working.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/localdate.html">examples/javascript/localdate.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Date&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;localdate&quot; x-schedule=&quot;2021-04-13T19:00:00-04:00&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;


&lt;script&gt;
function set_local_date() {
    // Assume a date format of &quot;2021-04-13T19:00:00+03:00&quot;;
    // Display time in localtime of the browser.
    const obj = document.getElementById(&quot;localdate&quot;);
    if (! obj) {
        return;
    }
    const mydate = obj.getAttribute(&quot;x-schedule&quot;);
    const date = new Date(mydate);
    if (obj) {
        obj.innerHTML = date.toLocaleDateString( [], {
            weekday: 'long',
            year: 'numeric',
            month: 'long',
            day: 'numeric',
            hour: 'numeric',
            minute: 'numeric',
            timeZoneName: 'long'
        });
    }
}
set_local_date();
&lt;/script&gt;

</code></pre>
<p><a href="examples/javascript/localdate.html">view</a></p>
<h2 class="title is-4">Live events</h2>
<p>Now it is your turn to check out our <a href="/live">live</a> events and join one.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>ReactJS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-04T12:00:01Z</updated>
    <pubDate>2021-05-04T12:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/reactjs" />
    <id>https://code-maven.com/reactjs</id>
    <content type="html"><![CDATA[<p><a href="https://reactjs.org/">ReactJS</a> is a JavaScript library for building user interfaces.</p>
<ul>
<li><a href="/workout-app">Workout App</a> with Rachel Normand - ReactJS front-end, Python Flask back-end.</li>
<li><a href="/online-self-knowledge-workshop">Online self-knowledge workshop</a> with Ivett Ördög - ReactJS front-end, NodeJS back-end.</li>
<li><a href="https://he.code-maven.com/front-end-testing-of-react">Testing front-end written in ReactJS</a> with Ynon Perek (in Hebrew)</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Working on the workout-app with Rachel Normand - part 1 ReactJS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-04T11:30:01Z</updated>
    <pubDate>2021-05-04T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/workout-app-1" />
    <id>https://code-maven.com/workout-app-1</id>
    <content type="html"><![CDATA[<p>In this live coding session we are working on the <a href="https://github.com/rnewstead1/workout-app">workout-app</a>
of <a href="https://www.linkedin.com/in/rnewstead/">Rachel Normand</a>.</p>
<p>The project has a <a href="/flask">Flask</a> <a href="/python">Python</a> back-end and a <a href="/reactjs">ReactJS</a> front-end.</p>
<ul>
<li><a href="https://github.com/rnewstead1/workout-app">Source code on GitHub</a></li>
<li><a href="https://jasonwatmore.com/post/2020/02/01/react-fetch-http-post-request-examples"></a></li>
</ul>
<iframe width="560" height="315" src="https://www.youtube.com/embed/Ynfca9OzqMU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Nest session:</p>
<p>Scheduled for <span id="localdate" x-schedule="2021-05-11T09:00:00+03:00"></span></p>
<p>See our <a href="/live">calendar</a> as well.</p>
<p><a class="btn btn-lg btn-success" href="https://us02web.zoom.us/meeting/register/tZApdu-przIqHtYFkt_H9M2pcZmyWMekORBx">Register here</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Developing an application for organising online self knowledge workshops - Part 1</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-05-04T07:30:01Z</updated>
    <pubDate>2021-05-04T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/online-self-knowledge-workshop-1" />
    <id>https://code-maven.com/online-self-knowledge-workshop-1</id>
    <content type="html"><![CDATA[<p>In this live coding session we are going to start the application with <a href="https://www.linkedin.com/in/ivett-%C3%B6rd%C3%B6g-03aa9035/">Ivett Ördög</a>.
We are going to use <a href="https://reactjs.org/">ReactJS</a>.</p>
<p>Also follow the YouTube channel of Ivett: <a href="https://www.youtube.com/channel/UCm27Xuroww1AxPdR3Zz_5jA">Cup of Code</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ZCVQht4Q1K0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://github.com/devill/selfknowledge">Source code</a></li>
<li><a href="https://devhints.io/react">Reach hints</a></li>
<li><a href="https://reactjs.org/docs/forms.html">ReactJS forms</a></li>
<li><a href="https://www.npmjs.com/package/uuid">npmjs uuid</a></li>
<li><a href="https://reactjs.org/docs/handling-events.html">ReactJS handling events</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>DevOps work - setting up CI and Docker for the course management project with Thomas Klausner</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-04-29T16:30:01Z</updated>
    <pubDate>2021-04-29T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/setting-up-ci-and-docker-for-course-management-app" />
    <id>https://code-maven.com/setting-up-ci-and-docker-for-course-management-app</id>
    <content type="html"><![CDATA[<p>In this <a href="/live">live pair programming</a> session
<a href="https://www.linkedin.com/in/thomas-klausner-40079/">Thomas Klausner</a> (aka. <a href="https://metacpan.org/author/DOMM">domm</a>)
and myself worked on the &quot;DevOps aspects&quot; of the
<a href="https://perlmaven.com/course-management-app-in-mojolicious">course management application</a>.</p>
<p>We created a Docker container for the project. A docker-compose file and set up GitHub Actions for CI.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/byugeGi1cNc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Check for more <a href="https://code-maven.com/live">live events</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Working on s3path the Python File-System/Path like interface for AWS S3 with Lior Mizrahi</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-04-27T15:30:01Z</updated>
    <pubDate>2021-04-27T15:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/working-on-s3path" />
    <id>https://code-maven.com/working-on-s3path</id>
    <content type="html"><![CDATA[<p>Recording of a <a href="/live">live</a> pair programming even in which <a href="https://www.linkedin.com/in/lior-mizrahi-b894aa26/">Lior Mizrahi</a>
introduces his <a href="https://github.com/liormizr/s3path">s3path</a> project and then we fixed an issue.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/Oww2d4X1lSk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p><a href="https://docs.python.org/library/pathlib.html">pathlib</a></p>
<p><a href="https://github.com/liormizr/s3path/pull/62">pull-request 62 - add missing_ok parameter to the unlink method</a> fixing <a href="https://github.com/liormizr/s3path/issues/61">issue 61</a>.</p>
<p><a href="https://github.com/liormizr/s3path/pull/63">pull-request 63 - gitignore pyproject.toml</a>.</p>
<p>Setup environment</p>
<pre><code>python -m
pipenv install  --python python3 --skip-lock --dev

pipenv shell
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Setting up ELK using Rexify</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-04-26T11:40:01Z</updated>
    <pubDate>2021-04-26T11:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/elk-with-rex" />
    <id>https://code-maven.com/elk-with-rex</id>
    <content type="html"><![CDATA[<p>During this meeting <a href="https://www.linkedin.com/in/ferki/">Ferenc Erki</a>, the lead developer of <a href="https://www.rexify.org/">Rex</a>
is going to lead us setting up a system using several different Linux distributions and handling the differences.</p>
<p>We will also attempt to set up a full <a href="https://www.elastic.co/">ELK stack</a>.</p>
<p>We will start where we left of las time when FErki gave us an <a href="/automation-with-rex">introduction to Rex</a></p>
<!--
It is scheduled for April 25: 14:00 Israel

<a class="btn btn-lg btn-success" href="https://us02web.zoom.us/meeting/register/tZUtf-usrjMoGtf5wZLaHykTidIuMUl71htT">Register here</a>

For the time in your timezone check out the registration form or visit the page of [all the live events](/live)
-->
<h2 class="title is-4">Plan</h2>
<h2 class="title is-4">ELK</h2>
<p>Most of this will be probably delayed to a future meeting:</p>
<ul>
<li>Download the rpm file of ElasticSearch and install on a CentOS based box.</li>
<li>Configure the /etc/elasticsearch/elasticsearch.yml file</li>
<li>Make sure we can access it locally with curl</li>
<li>Install Kibana on another machine</li>
<li>Configure ElastiSearch and Kibana so Kibana can access ElasticSearch</li>
<li>Configure Nginx on the Kibana machine as a reverse proxy and add Basic Authentication.</li>
<li>Install Metricbeat on all the machines and make them send the data to the ElasticSearch</li>
<li>Add different tags to the instances.</li>
<li>Install our log generator application on one of the boxes.</li>
<li>Install Logstash on one of the boxes</li>
<li>Install Filebeat on the box with the log generator application</li>
<li>Configure filebeat to process the logfile and send it to the Logstash</li>
<li>Configure Logstash to accept the data from filebeat and send it to ElasTicsearch</li>
</ul>
<iframe width="560" height="315" src="https://www.youtube.com/embed/k3uz7-7E3Ws" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="/ansible-elk">ELK with Ansible</a></li>
<li><a href="https://metacpan.org/pod/Rex::Group::Lookup::YAML">Rex::Group::Lookup::YAML</a> for inventory</li>
</ul>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/Rexfile">examples/ansible/elk/Rexfile</a></strong></p>
<pre><code class="language-txt">use Rex -feature =&gt; [qw( 1.4 exec_autodie)];
use Rex::Group::Lookup::YAML;
use Rex::CodeMaven::Nginx;
use Rex::CodeMaven::Elasticsearch;
# Module::Pluggable

groups_yaml('rex_inventory.yml');

desc 'Just printing hostname';
task 'print_hostname', sub {
    say run('hostname');
};


# vim: syntax=perl


</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/rex_inventory.yml">examples/ansible/elk/rex_inventory.yml</a></strong></p>
<pre><code class="language-yaml">demo:
 - 159.203.85.198

</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/lib/Rex/CodeMaven/Elasticsearch.pm">examples/ansible/elk/lib/Rex/CodeMaven/Elasticsearch.pm</a></strong></p>
<pre><code class="language-perl">package Rex::CodeMaven::Elasticsearch;
use strict;
use warnings;

use Rex -base;

desc 'Base Setup';
task base_setup =&gt; sub {
    update_package_db;
    pkg 'wget', ensure =&gt; 'present';
};


desc 'Setup Elasticsearch';
task setup =&gt; sub {
    needs 'base_setup';

    my $elastic = 'elasticsearch-7.11.2-x86_64.rpm';
    my $project_root = '/root';
    my $url = &quot;https://artifacts.elastic.co/downloads/elasticsearch/$elastic&quot;;
    my $dest = &quot;$project_root/$elastic&quot;;
    file $project_root, ensure =&gt; 'directory';
    run(&quot;wget $url -O $dest&quot;, unless =&gt; &quot;test -e $dest&quot;);
    run(&quot;rpm -vi $dest&quot;, unless =&gt; &quot;rpm -q elasticsearch&quot;);

    needs 'config';
    service 'elasticsearch', ensure =&gt; 'started';
};

desc 'Config Elasticsearch';
task config =&gt; sub {
    file '/etc/elasticsearch/elasticsearch.yml',
        source =&gt; 'files/etc/elasticsearch/elasticsearch.yml',
        on_change =&gt; sub {
            service 'elasticsearch' =&gt; 'restart';
        };
};

task verify =&gt; sub {
    say run(&quot;curl http://localhost:9200&quot;);
};


1;


</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/lib/Rex/CodeMaven/Nginx.pm">examples/ansible/elk/lib/Rex/CodeMaven/Nginx.pm</a></strong></p>
<pre><code class="language-perl">package Rex::CodeMaven::Nginx;
use strict;
use warnings;

use Rex -base;

desc 'Setup nginx';
task setup =&gt; sub {
    update_package_db;
    pkg 'nginx', ensure =&gt; 'present';
    service 'nginx', ensure =&gt; 'started';
};

desc 'Configure Nginx';
task configure =&gt; sub {
    my $reload_needed = FALSE;
    # We only checked this on CentOs
    my $nginx_root_dir =&quot;/etc/nginx&quot;;
    file &quot;$nginx_root_dir/nginx.conf&quot;,
        source =&gt; 'files/etc/nginx/nginx.conf',
        on_change =&gt; sub {
            $reload_needed = TRUE;
        };


    my $nginx_conf_dir = case operating_system, {
                qr{Debian|Ubuntu}i  =&gt; &quot;$nginx_root_dir/sites-enabled&quot;,
                qr{Fedora|Centos}i  =&gt; &quot;$nginx_root_dir/conf.d&quot;,
              };

    file &quot;$nginx_conf_dir/default&quot;, ensure =&gt; 'absent';

    file &quot;$nginx_conf_dir/nginx-elk.conf&quot;,
        source =&gt; 'files/etc/nginx/conf.d/nginx-elk.conf',
        on_change =&gt; sub {
            $reload_needed = TRUE;
        };

    file &quot;/usr/share/nginx/html/.htpasswd&quot;,
        source =&gt; 'files/usr/share/nginx/html/.htpasswd',
        on_change =&gt; sub {
            $reload_needed = TRUE;
        };

    run(&quot;setsebool httpd_can_network_connect on -P&quot;);

    service 'nginx' =&gt; 'reload' if $reload_needed;
};

1;


</code></pre>
<pre><code>rex -u root -d -g demo CodeMaven:Elasticsearch:setup
rex -u root -d -g demo CodeMaven:Elasticsearch:config
rex -u root -d -g demo CodeMaven:Elasticsearch:verify
rex -u root -d -g demo CodeMaven:Nginx:setup
rex -u root -d -g demo CodeMaven:Nginx:configure
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Managing jobs in a PBS cluster using Python</title>
    <summary type="html"><![CDATA[Submitting jobs to a PBS based cluster in the Weizmann Institute of Science]]></summary>
    <updated>2021-04-20T08:30:01Z</updated>
    <pubDate>2021-04-20T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/managing-jobs-in-a-pbs-cluster" />
    <id>https://code-maven.com/managing-jobs-in-a-pbs-cluster</id>
    <content type="html"><![CDATA[<p><a href="https://www.linkedin.com/in/oz-mendelsohn/">Oz Mendelsohn</a> participated in the <b>Programming Bootcamp for Scientists</b> I ran in the
<a href="https://www.weizmann.ac.il/">Weizmann Institute of Science</a> he, as every other student created a final project. In this video you can see him explaining
the project managing his programming jobs in the local HPC cluster.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/xeqo3N2lWWQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://www.openpbs.org/">OpenBBS</a></li>
<li><a href="https://www.weizmann.ac.il/chemistry/chemfarm/home">Chemfarm of the Weizmann Institute of Science</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Getting started with Git and GitHub (with Olga Tapinova)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-04-19T17:30:01Z</updated>
    <pubDate>2021-04-19T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/getting-started-with-git-and-github-on-windows" />
    <id>https://code-maven.com/getting-started-with-git-and-github-on-windows</id>
    <content type="html"><![CDATA[<p><a href="https://git-scm.com/">Download Git</a>, register on <a href="https://github.com/">GitHub</a>.</p>
<p><a href="https://code-maven.com/slides/git/git-configure-personal">configure git client</a>.</p>
<p>Follow <a href="https://github.com/olgatapinova">Olga Tapinova</a>, check out the <a href="https://github.com/olgatapinova/budgeting">budgeting</a> project.</p>
<p>Check out the <a href="/command-line-accounting-in-python">video about the budgeting project</a> of Olga.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/jAuGjtFFi-Q" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Implementing a feature in the Typescript cucumber-playwright package with Tally Barak</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-04-18T16:30:01Z</updated>
    <pubDate>2021-04-18T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/implementing-a-feature-in-typescript-cucumber-playwright" />
    <id>https://code-maven.com/implementing-a-feature-in-typescript-cucumber-playwright</id>
    <content type="html"><![CDATA[<p>In this live session <a href="https://www.linkedin.com/in/tallybarak/">Tally Barak</a> and myself worked on her <a href="https://github.com/Tallyb/cucumber-playwright">cucumber-playwright</a> project
implementing a <a href="https://github.com/Tallyb/cucumber-playwright/issues/60">feature request</a>.</p>
<p>At the begining Tally introduced the tools in the project starting with <a href="https://developers.google.com/web/tools/puppeteer">Puppeteer</a> from where many of the enegineers
working on <a href="https://playwright.dev/">Playwright</a> came from.</p>
<p>We talked about <a href="https://cucumber.io/">Cucumber</a> and <a href="https://cucumber.io/docs/gherkin/">Gherkin</a> and in general about BDD.</p>
<p>See also the <a href="https://github.com/cucumber/cucumber">repository of cucumber</a> and a  <a href="https://cucumber.io/docs/gherkin/reference/">reference of Gherkin</a>.</p>
<p>Tally has a number of <a href="https://tally-b.medium.com/">blog posts on Medium</a> about the subject. e.g
<a href="https://tally-b.medium.com/5-ways-playwright-is-awesome-b94eff4da0ea">5 Ways Playwright is Awesome</a> and
<a href="https://tally-b.medium.com/e2e-testing-with-cucumber-and-playwright-9584d3ef3360">E2E Testing with Cucumber and Playwright</a>.</p>
<p>We used <a href="https://code.visualstudio.com/">Visual Studio Code</a> and learned that you can set environment varibles on the command line of MS Windows using</p>
<pre><code>set NAME=value
</code></pre>
<iframe width="560" height="315" src="https://www.youtube.com/embed/PUVFmhYJNJA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Run code locally with Rexify</title>
    <summary type="html"><![CDATA[Run code locally while working with Rex]]></summary>
    <updated>2021-04-11T10:00:01Z</updated>
    <pubDate>2021-04-11T10:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rex-run-code-locally" />
    <id>https://code-maven.com/rex-run-code-locally</id>
    <content type="html"><![CDATA[<p>Usually you'll want your Rex commands to be executed on the remote server and thus the default of Rexify is to execute the rex command on the current remote server.
However sometimes you'd want to have some Rex commands executed locally. There are two main ways to to that, either marking the task as <code>no_ssh</code> or
marking a secion of the task as <code>LOCAL</code>.</p>
<p>Also remember that the perl code around the Rex commands are always executed locally on the management server.</p>
<p>This example demonstrates these cases:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/local/Rexfile">examples/rex/local/Rexfile</a></strong></p>
<pre><code class="language-txt">use strict;
use warnings;
use 5.010;

use Rex -feature =&gt; [qw(1.4 exec_autodie)];
use Sys::Hostname ();

task 'remote', sub {
    sys_hostname();
    run_hostname();
};


no_ssh task 'local', sub {
    sys_hostname();
    run_hostname();
};

task 'partial', sub {
    sys_hostname();
    run_hostname();

    LOCAL {
        sys_hostname();
        run_hostname();
    };
};


sub run_hostname {
    my $hostname = run('hostname');
    Rex::Logger::info(&quot;run('hostname'): $hostname&quot;);
}

sub sys_hostname {
    my $hostname = Sys::Hostname::hostname();
    Rex::Logger::info(&quot;Sys::Hostname::hostname() is always the local machine: $hostname&quot;);
}

# vim: syntax=perl

</code></pre>
<p>In our example the hostname of the managemachine was <b>code-maven</b> and the name of the remote server was <b>rex-host</b>.</p>
<pre><code>$ rex -H 104.236.89.4 -u root remote
[2021-04-11 09:50:50] INFO - Running task remote on 104.236.89.4
[2021-04-11 09:50:54] INFO - Sys::Hostname::hostname() is always the local machine: code-maven
[2021-04-11 09:50:55] INFO - run('hostname'): rex-host
[2021-04-11 09:50:55] INFO - All tasks successful on all hosts
</code></pre>
<pre><code>$ rex -H 104.236.89.4 -u root local
[2021-04-11 09:51:11] INFO - Running task local on 104.236.89.4
[2021-04-11 09:51:11] INFO - Sys::Hostname::hostname() is always the local machine: code-maven
[2021-04-11 09:51:11] INFO - run('hostname'): code-maven
[2021-04-11 09:51:11] INFO - All tasks successful on all hosts
</code></pre>
<pre><code>$ rex -H 104.236.89.4 -u root partial
[2021-04-11 09:51:20] INFO - Running task partial on 104.236.89.4
[2021-04-11 09:51:24] INFO - Sys::Hostname::hostname() is always the local machine: code-maven
[2021-04-11 09:51:24] INFO - run('hostname'): rex-host
[2021-04-11 09:51:24] INFO - Sys::Hostname::hostname() is always the local machine: code-maven
[2021-04-11 09:51:24] INFO - run('hostname'): code-maven
[2021-04-11 09:51:24] INFO - All tasks successful on all hosts
</code></pre>
<p>See also: <a href="https://metacpan.org/pod/Rex::Commands#no_ssh">no_ssh</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Reboot remote server with Rexify</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-04-11T09:30:01Z</updated>
    <pubDate>2021-04-11T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rex-reboot-remote-server" />
    <id>https://code-maven.com/rex-reboot-remote-server</id>
    <content type="html"><![CDATA[<p>This code is based on what was discussed in <a href="/rex-automation-3">Rex Automation part 3</a>, it allows you to reboot a server.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/reboot/Rexfile">examples/rex/reboot/Rexfile</a></strong></p>
<pre><code class="language-txt">use strict;
use warnings;
use 5.010;

use Rex -feature =&gt; [qw(1.4 exec_autodie)];

use Rex::Commands::SimpleCheck;
# TODO qw(is_port_open);

sayformat &quot;[%h]&gt;\t%s&quot;;

task 'reboot', sub {
    Rex::Logger::info('uptime before');
    say run 'uptime';
    reboot();
    Rex::Logger::info('uptime after');
    say run 'uptime';
};

sub reboot {
    my %params = @_;
    $params{shutdown_timeout} //= 10;
    $params{boot_timeout} //= 10;

    my $server = connection-&gt;server;
    my $port   = Rex::Config-&gt;get_port( server =&gt; $server ) || 22;

    run 'reboot';

    Rex::Logger::info(&quot;Waiting for $params{shutdown_timeout} seconds for shutdown...&quot;);
    my $elapsed = 0;
    while ( is_port_open $server, $port ) {
        sleep 1;
        $elapsed++;
        die &quot;Could not shutdown in less than $params{shutdown_timeout}&quot;
            if $params{shutdown_timeout} &lt;= $elapsed;
    }

    Rex::Logger::info(&quot;Waiting for $params{boot_timeout} second for the SSH service to come back...&quot;);
    $elapsed = 0;
    while ( !is_port_open $server, $port ) {
        sleep 1;
        $elapsed++;
        die &quot;Could not boot in less than $params{boot_timeout}&quot;
            if $params{boot_timeout} &lt;= $elapsed;
    }

    Rex::get_current_connection_object-&gt;reconnect;
    return;
}

# vim: syntax=perl

</code></pre>
<p>Assuming you have a host with IP address 104.236.89.4 where you can login as user <b>root</b>,
this is the command you need to run:</p>
<pre><code>rex -H 104.236.89.4 -u root reboot
</code></pre>
<p>The output will look similar to this:</p>
<pre><code>[2021-04-11 09:18:59] INFO - Running task reboot on 104.236.89.4
The authenticity of host '104.236.89.4 (104.236.89.4)' can't be established.
ECDSA key fingerprint is SHA256:+z26G29adbKkq2iEuF07QEw9lrVG7U3r7oJrUnLMj7I.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
[2021-04-11 09:19:07] INFO - uptime before
[104.236.89.4]&gt;	 06:19:07 up 2 min,  0 users,  load average: 0.35, 0.35, 0.15
[2021-04-11 09:19:08] INFO - Waiting for shutdown...
Connection to 104.236.89.4 closed by remote host.
[2021-04-11 09:19:09] INFO - Waiting for SSH to come back...
[2021-04-11 09:19:24] INFO - uptime after
[104.236.89.4]&gt;	 06:19:25 up 0 min,  0 users,  load average: 1.33, 0.28, 0.09
[2021-04-11 09:19:24] INFO - All tasks successful on all hosts
</code></pre>
<p>First I had to verify the ECDSA key fingerprint of the server because this was the first time I actually accessed this machine.</p>
<p>It showed the current uptime (2 min), yes I just started this server for the demo.</p>
<p>Then the reboot and then showing that the uptime is now 0 min.</p>
<h2 class="title is-4">Comments</h2>
<p>Original <a href="https://gist.github.com/ferki/be63ad18b6b93352f2829cf691335938">gist for reboot</a> that we used
before starting the pair development session.</p>
<p>I personally think this, or an improved version of the reboot function should be inlcuded in the standard Rex distribution.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Install the ELK stack on CentOS using Ansible</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-04-10T16:30:01Z</updated>
    <pubDate>2021-04-10T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ansible-elk" />
    <id>https://code-maven.com/ansible-elk</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Create server, configure inventory</h2>
<p>Create <a href="/digitalocean">Droplet on Digital Ocean</a> using CentOS 8.3 x64 with 4GB memory and 2 vCPUs configuring an SSH key to make easy access to it.</p>
<p>We can probably use other version of CentOS as well, but this is what I tried it with.</p>
<p>From the Digital Ocean web site copy the IP address of the drolet and add it to the inventory file replacing the IP address you find there:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/inventory.yml">examples/ansible/elk/inventory.yml</a></strong></p>
<pre><code class="language-yaml">elastic:
  hosts:
    68.183.26.18
all:
  children:
    elastic:

</code></pre>
<h2 class="title is-4">Verify that we have access to the server using Ansible Ping</h2>
<pre><code>ansible NAME -m ping
</code></pre>
<p>First it will want to verify the fingerprint of the server:</p>
<pre><code>The authenticity of host '134.122.123.157 (134.122.123.157)' can't be established.
ECDSA key fingerprint is SHA256:L1jIJx45fOP3lFH/qQysD7tAdY9/rNoeC+eA2mO4ijY.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
</code></pre>
<p>Type in &quot;yes&quot; and press enter.</p>
<p>Then the response is expected to look like this:</p>
<pre><code>134.122.123.157 | SUCCESS =&gt; {
    &quot;ansible_facts&quot;: {
        &quot;discovered_interpreter_python&quot;: &quot;/usr/libexec/platform-python&quot;
    },
    &quot;changed&quot;: false,
    &quot;ping&quot;: &quot;pong&quot;
}
</code></pre>
<p>Try the same with our first playbook:</p>
<pre><code>ansible-playbook playbooks/ping.yml
</code></pre>
<p>The response is expected to be:</p>
<pre><code>PLAY [all] ****************************************************************************************

TASK [Gathering Facts] ****************************************************************************
ok: [104.236.61.19]

TASK [Ping] ***************************************************************************************
ok: [104.236.61.19]

PLAY RECAP ****************************************************************************************
104.236.61.19     : ok=2  changed=0  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/playbooks/ping.yml">examples/ansible/elk/playbooks/ping.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: all
  tasks:
    - name: Ping
      ansible.builtin.ping:


</code></pre>
<p>See <a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/ping_module.html">Ping module</a></p>
<h2 class="title is-4">Fetch the hostname of the server</h2>
<p>OK, so this is not necessary to our task, but I like to see it working.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/playbooks/hostname.yml">examples/ansible/elk/playbooks/hostname.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: all
  tasks:
    - name: Bash
      ansible.builtin.shell: hostname
      register: response
    - debug: msg=&quot;{{ response.stdout }}&quot;

</code></pre>
<pre><code>ansible-playbook playbooks/hostname.yml
</code></pre>
<p>Output:</p>
<pre><code>PLAY [all] ***************************************************************************************

TASK [Gathering Facts] ***************************************************************************
ok: [104.236.61.19]

TASK [Bash] **************************************************************************************
changed: [104.236.61.19]

TASK [debug] *************************************************************************************
ok: [104.236.61.19] =&gt; {
    &quot;msg&quot;: &quot;elk1&quot;
}

PLAY RECAP ***************************************************************************************
104.236.61.19    : ok=3  changed=1  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0
</code></pre>
<p>See <a href="https://docs.ansible.com/ansible/latest/collections/ansible/builtin/shell_module.html">Ansible shell module</a>.</p>
<h2 class="title is-4">Install Elasticsearch</h2>
<p>The version of ElasticSearch is baked into the playbook file. You can visit the
<a href="https://www.elastic.co/downloads/elasticsearch">download page of Elasticsearch</a> to pick a different version.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/playbooks/elasticsearch.yml">examples/ansible/elk/playbooks/elasticsearch.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: all
  gather_facts : no
  vars:
     elastic: elasticsearch-7.11.2-x86_64.rpm
     project_root: /root
  tasks:
    - get_url:
        url=&quot;https://artifacts.elastic.co/downloads/elasticsearch/{{elastic}}&quot;
        dest=&quot;{{project_root}}/{{elastic}}&quot;
    - name: Check if Elastic is installed
      command: rpm -q elasticsearch
      ignore_errors: True
      register: rpm_check

    - name: Install
      ansible.builtin.shell: rpm -vi {{elastic}}
      when: rpm_check.rc != 0

    - name: Enable and Start
      ansible.builtin.service:
        name: elasticsearch
        state: started
        enabled: yes

    - name: Copy configuration file
      copy:
        src: ../files/etc/elasticsearch/elasticsearch.yml
        dest: /etc/elasticsearch/elasticsearch.yml

#    - name: Configure Elasticsearch Cluster
#      lineinfile:
#        destfile: /etc/elasticsearch/elasticsearch.yml
#        regexp: 'cluster.name:'
#        line: 'cluster.name: code-maven-demo'
#
#    - name: Configure Elasticsearch Node
#      lineinfile:
#        destfile: /etc/elasticsearch/elasticsearch.yml
#        regexp: 'node.name:'
#        line: 'node.name: code-maven-elastic-1'
#
#    - name: Configure Elasticsearch Node Master
#      lineinfile:
#        destfile: /etc/elasticsearch/elasticsearch.yml
#        regexp: 'node.master:'
#        line: 'node.master: true'
#
#    - name: Configure Elasticsearch Node Data
#      lineinfile:
#        destfile: /etc/elasticsearch/elasticsearch.yml
#        regexp: 'node.data:'
#        line: 'node.data: true'
#
#    - name: Configure Elasticsearch Single-host
#      lineinfile:
#        destfile: /etc/elasticsearch/elasticsearch.yml
#        regexp: 'discovery.type:'
#        line: 'discovery.type: single-node'

    - name: Restart
      ansible.builtin.service:
        name: elasticsearch
        state: restarted

    - name: Verify Elasticsearch
      ansible.builtin.shell: curl http://localhost:9200
      register: response
    - debug: msg=&quot;{{ response.stdout }}&quot;


</code></pre>
<pre><code>ansible-playbook playbooks/elasticsearch.yml
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/files/etc/elasticsearch/elasticsearch.yml">examples/ansible/elk/files/etc/elasticsearch/elasticsearch.yml</a></strong></p>
<pre><code class="language-yaml"># ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
#       Before you set out to tweak and tune the configuration, make sure you
#       understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: code-maven-demo
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: code-maven-elastic-1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: /var/lib/elasticsearch
#
# Path to log files:
#
path.logs: /var/log/elasticsearch
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1
#
# Set a custom port for HTTP:
#
#http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is [&quot;127.0.0.1&quot;, &quot;[::1]&quot;]
#
#discovery.seed_hosts: [&quot;host1&quot;, &quot;host2&quot;]
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
#
#cluster.initial_master_nodes: [&quot;node-1&quot;, &quot;node-2&quot;]
#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
node.master: true
node.data: true
discovery.type: single-node

#network.host: 0.0.0.0
#discovery.seed_hosts: [&quot;1.2.3.4&quot;]



</code></pre>
<h2 class="title is-4">Setup Nginx with simple authentication</h2>
<p>Follow the instructions on how to <a href="https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/">configure http basic authentication for Nginx</a>
create one or more username/password pairs:</p>
<pre><code>$ htpasswd -c .htpasswd user1     (pw: secret1)
$ htpasswd .htpasswd user2        (pw: secret2)
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/files/etc/nginx/nginx.conf">examples/ansible/elk/files/etc/nginx/nginx.conf</a></strong></p>
<pre><code class="language-conf"># For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] &quot;$request&quot; '
                      '$status $body_bytes_sent &quot;$http_referer&quot; '
                      '&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

#    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate &quot;/etc/pki/nginx/server.crt&quot;;
#        ssl_certificate_key &quot;/etc/pki/nginx/private/server.key&quot;;
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#    }

}


</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/files/etc/nginx/conf.d/nginx-elk.conf">examples/ansible/elk/files/etc/nginx/conf.d/nginx-elk.conf</a></strong></p>
<pre><code class="language-conf">server {
    listen [::]:80;
    listen 80;
#    server_name  _;

    location / {
        auth_basic &quot;Kibana area&quot;;
        auth_basic_user_file /usr/share/nginx/html/.htpasswd;
        proxy_pass http://localhost:5601;
        proxy_redirect off;
        proxy_buffering off;

        proxy_http_version 1.1;
        proxy_set_header Connection &quot;Keep-Alive&quot;;
        proxy_set_header Proxy-Connection &quot;Keep-Alive&quot;;
    }
}

server {
    listen [::]:81;
    listen 81;
#    server_name  _;

    location / {
        auth_basic &quot;Elasticsearch&quot;;
        auth_basic_user_file /usr/share/nginx/html/.htpasswd;
        proxy_pass http://localhost:9200;
        proxy_redirect off;
        proxy_buffering off;

        proxy_http_version 1.1;
        proxy_set_header Connection &quot;Keep-Alive&quot;;
        proxy_set_header Proxy-Connection &quot;Keep-Alive&quot;;
    }
}


</code></pre>
<p>Then run the playbook:</p>
<pre><code>ansible-playbook playbooks/nginx.yml
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/playbooks/nginx.yml">examples/ansible/elk/playbooks/nginx.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: all
  gather_facts : no
  vars:
     project_root: /root
  tasks:
    - name: Enable epel
      yum:
        name: epel-release
        state: present
    - name: Install Nginx
      yum:
        name: nginx
        state: present

    - name: Enable and Start
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: yes

    - name: Nginx config file
      copy:
        src: ../files/etc/nginx/nginx.conf
        dest: /etc/nginx/nginx.conf

    - name: Nginx config file
      copy:
        src: ../files/etc/nginx/conf.d/nginx-elk.conf
        dest: /etc/nginx/conf.d/nginx-elk.conf

    - name: Nginx users file
      copy:
        src: ../files/usr/share/nginx/html/.htpasswd
        dest: /usr/share/nginx/html/.htpasswd


    - name: Allow Nginx to work as a reverse proxy
      ansible.builtin.shell: setsebool httpd_can_network_connect on -P


    - name: Restart
      ansible.builtin.service:
        name: nginx
        state: restarted





</code></pre>
<p>Visit <a href="http://IP:81">http://IP:81</a> after replacing IP with the IP address of your host to get access to Elasticsearch</p>
<h2 class="title is-4">Kibana</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/playbooks/kibana.yml">examples/ansible/elk/playbooks/kibana.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: all
  gather_facts : no
  vars:
     kibana: kibana-7.11.2-x86_64.rpm
     project_root: /root
  tasks:
    - get_url:
        url=&quot;https://artifacts.elastic.co/downloads/kibana/{{kibana}}&quot;
        dest=&quot;{{project_root}}/{{kibana}}&quot;
    - name: Check if Kibana is installed
      command: rpm -q kibana
      ignore_errors: True
      register: rpm_check

    - name: Install
      ansible.builtin.shell: rpm -vi {{kibana}}
      when: rpm_check.rc != 0

    - name: Enable and Start
      ansible.builtin.service:
        name: kibana
        state: started
        enabled: yes

    - name: Copy configuration file
      copy:
        src: ../files/etc/kibana/kibana.yml
        dest: /etc/kibana/kibana.yml

    - name: Restart
      ansible.builtin.service:
        name: kibana
        state: restarted



</code></pre>
<h2 class="title is-4">Metricbeat</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/playbooks/metricbeat.yml">examples/ansible/elk/playbooks/metricbeat.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: all
  vars:
     metricbeat: metricbeat-7.11.2-x86_64.rpm
     project_root: /root
  tasks:
    - get_url:
        url=&quot;https://artifacts.elastic.co/downloads/beats/metricbeat/{{metricbeat}}&quot;
        dest=&quot;{{project_root}}/{{metricbeat}}&quot;

    - name: Check if Metricbeat is installed
      command: rpm -q metricbeat
      ignore_errors: True
      register: rpm_check

    - name: Install
      ansible.builtin.shell: rpm -vi {{metricbeat}}
      when: rpm_check.rc != 0

    - name: Enable and Start
      ansible.builtin.service:
        name: metricbeat
        state: started
        enabled: yes

    - name: Copy config file
      copy:
        src: ../files/etc/metricbeat/metricbeat.yml
        dest: /etc/metricbeat/metricbeat.yml

    - name: Restart
      ansible.builtin.service:
        name: metricbeat
        state: restarted



</code></pre>
<h2 class="title is-4">ELK</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/playbooks/elk.yml">examples/ansible/elk/playbooks/elk.yml</a></strong></p>
<pre><code class="language-yaml">---
- include: nginx.yml
- include: elasticsearch.yml
- include: kibana.yml
- include: metricbeat.yml


</code></pre>
<h2 class="title is-4">Ansible Configuration file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/elk/ansible.cfg">examples/ansible/elk/ansible.cfg</a></strong></p>
<pre><code class="language-cfg">[defaults]
deprecation_warnings = False
inventory = inventory.yml
host_key_checking = True
remote_user=root
#ask_pass = True


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Live pair programming events</title>
    <summary type="html"><![CDATA[Live pair programming sessions]]></summary>
    <updated>2021-04-02T09:00:01Z</updated>
    <pubDate>2021-04-02T09:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/live" />
    <id>https://code-maven.com/live</id>
    <content type="html"><![CDATA[<p>Live pair programming events</p>
<!--
    * [2021.05.03 - ](https://code-maven.com/)
    * [2021.05.19 - Mejorar una librería de Perl](https://es.code-maven.com/programacion-por-pares) con Juan J. Merelo (Spanish)
-->
<h2 class="title is-4">Scheduled</h2>
<!--
* [2021.06.01 - Learning ReactJS](https://code-maven.com/) with Steve Dondley
* [2021.07.12 - Learning Crystal](https://code-maven.com/crystal-course) course - part 1
* [2021.08.29 - Working on PyDigger - part 5](https://code-maven.com/pydigger) with Upasana Shukla
-->
<iframe src="https://calendar.google.com/calendar/embed?src=2gn7l0c1j6k6r5q2jjdaigveighrcsec%40import.calendar.google.com&ctz=Asia%2FJerusalem" style="border: 0" width="800" height="600" frameborder="0" scrolling="no"></iframe>
<p>Use this link to include the the schedule in your calendar: <a href="https://code-maven.com/events.ics">https://code-maven.com/events.ics</a> .</p>
<h2 class="title is-4">Previous ones</h2>
<ul>
<li>
<p><a href="https://es.code-maven.com/html-2">2021.09.02 - HTML en CSS en español - parte 2</a>  con Sharon Bone</p>
</li>
<li>
<p><a href="https://code-maven.com/online-self-knowledge-workshop-10">2021.09.01 - Application for organising online self knowledge workshops - development in ReactJS - part 10</a> with Ivett Ördög</p>
</li>
<li>
<p><a href="https://es.code-maven.com/html-1">2021.09.01 - HTML en CSS en español - parte 1</a>  con Sharon Bone</p>
</li>
<li>
<p><a href="https://code-maven.com/pydigger-4">2021.07.25 - Working on PyDigger - part 4</a> with Upasana Shukla</p>
</li>
<li>
<p><a href="https://code-maven.com/crystal-course-1">2021.07.12 - Learning Crystal</a> course - part 1</p>
</li>
<li>
<p><a href="https://code-maven.com/laravel">2021.07.06 - Laravel</a> with Natalie O'Brien</p>
</li>
<li>
<p><a href="https://code-maven.com/crystal-shardbox">2021.06.23 - Crystal Shardbox development</a> with Johannes Müller (straight-shoota)</p>
</li>
<li>
<p><a href="https://code-maven.com/online-self-knowledge-workshop-9">2021.06.22 - Application for organising online self knowledge workshops - development in ReactJS - part 9</a> with Ivett Ördög</p>
</li>
<li>
<p><a href="https://code-maven.com/pydigger-3">2021.06.20 - Working on PyDigger - part 3</a> with Upasana Shukla</p>
</li>
<li>
<p><a href="https://code-maven.com/selenium-with-python-live">2021.06.17 - Web automation with Selenium and Python</a> with Ynon Perek</p>
</li>
<li>
<p><a href="https://code-maven.com/online-self-knowledge-workshop-8">2021.06.16 - Application for organising online self knowledge workshops - development in ReactJS - part 8</a> with Ivett Ördög</p>
</li>
<li>
<p><a href="https://code-maven.com/online-self-knowledge-workshop-7">2021.06.10 - Application for organising online self knowledge workshops - development in ReactJS - part 7</a> with Ivett Ördög</p>
</li>
<li>
<p><a href="https://code-maven.com/online-self-knowledge-workshop-6">2021.06.06 - Application for organising online self knowledge workshops - development in ReactJS - part 6</a> with Ivett Ördög</p>
</li>
<li>
<p><a href="https://perlmaven.com/course-management-app-in-mojolicious-7">2021.05.30 - Web application development using Mojolicious - part 7</a> with Mark Gardner</p>
</li>
<li>
<p><a href="https://code-maven.com/online-self-knowledge-workshop-5">2021.05.27 - Application for organising online self knowledge workshops - development in ReactJS - part 5</a> with Ivett Ördög</p>
</li>
<li>
<p><a href="https://code-maven.com/online-self-knowledge-workshop-4">2021.05.26 - Application for organising online self knowledge workshops - development in ReactJS - part 4</a> with Ivett Ördög</p>
</li>
<li>
<p><a href="https://perlmaven.com/course-management-app-in-mojolicious-6">2021.05.23 - Web application development using Mojolicious - part 6</a> with Mark Gardner</p>
</li>
<li>
<p><a href="https://code-maven.com/pydigger-2">2021.05.23 - Working on PyDigger - part 2</a> with Upasana Shukla</p>
</li>
<li>
<p><a href="https://he.code-maven.com/live-with-shai-berger">2021.05.23 - bidi in Rust</a> with Shai Berger (Hebrew)</p>
</li>
<li>
<p><a href="https://code-maven.com/online-self-knowledge-workshop-3">2021.05.20 - Application for organising online self knowledge workshops - development in ReactJS - part 3</a> with Ivett Ördög</p>
</li>
<li>
<p><a href="https://es.code-maven.com/github-pages-con-laia">2021.05.20 - Crear una página de GitHub</a> con Laia Asensio López (Spanish)</p>
</li>
<li>
<p><a href="https://es.code-maven.com/perl-con-jjmerelo-3">2021.05.19 - Mejorar una librería de Perl</a> con Juan J. Merelo (Spanish)</p>
</li>
<li>
<p><a href="https://code-maven.com/workout-app">2021.05.11 - Workout-app</a> with Rachel Normand</p>
</li>
<li>
<p><a href="https://code-maven.com/online-self-knowledge-workshop-2">2021.05.10 - Application for organising online self knowledge workshops - development in ReactJS - part 2</a> with Ivett Ördög</p>
</li>
<li>
<p><a href="https://code-maven.com/pydigger-1">2021.05.09 - Working on PyDigger - part 1</a> with Upasana Shukla</p>
</li>
<li>
<p><a href="https://es.code-maven.com/utilizar-github-actions">2021.05.05 - Mejorar una librería de Perl, utilizar GitHub Actions</a> con Juan J. Merelo (Spanish)</p>
</li>
<li>
<p><a href="https://code-maven.com/workout-app">2021.05.04 - Workout-app</a> with Rachel Normand</p>
</li>
<li>
<p><a href="https://code-maven.com/online-self-knowledge-workshop-1">2021.05.03 - Application for organising online self knowledge workshops - development in ReactJS - part 1</a> with Ivett Ördög</p>
</li>
<li>
<p><a href="https://perlmaven.com/course-management-app-in-mojolicious-5">2021.05.02 - Web application development using Mojolicious - part 5</a> with Mark Gardner</p>
</li>
<li>
<p><a href="https://code-maven.com/setting-up-ci-and-docker-for-course-management-app">2021.04.29 - DevOps work - setting up CI and Docker for the course management project</a> with Thomas Klausner</p>
</li>
<li>
<p><a href="https://code-maven.com/working-on-s3path">2021.04.26 - Working on s3path the Python File-System/Path like interface for AWS S3</a> with Lior Mizrahi</p>
</li>
<li>
<p><a href="https://perlmaven.com/course-management-app-in-mojolicious-4">2021.04.25 - Web application development using Mojolicious - part 4</a> with Mark Gardner</p>
</li>
<li>
<p><a href="https://code-maven.com/elk-with-rex">2021.04.25 - Setting up ELK using Rexify</a> with Ferenc Erki</p>
</li>
<li>
<p><a href="https://es.code-maven.com/perl-github-actions">2021.04.22 - Mejorar la librería de GitHub::Actions en Perl</a> con Juan J. Merelo (Spanish)</p>
</li>
<li>
<p><a href="https://perlmaven.com/course-management-app-in-mojolicious-3">2021.04.18 - Web application development using Mojolicious - part 3</a> with Mark Gardner</p>
</li>
<li>
<p><a href="https://code-maven.com/implementing-a-feature-in-typescript-cucumber-playwright">2021.04.18 - Implementing a feature in the Typescript cucumber-playwright package</a> with Tally Barak</p>
</li>
<li>
<p><a href="https://perlmaven.com/course-management-app-in-mojolicious-2">2021.04.11 - Web application development using Mojolicious - part 2</a> with Mark Gardner</p>
</li>
<li>
<p><a href="https://perlmaven.com/exploring-bdd-in-perl-5">2021.04.11 - Exploring BDD using Test::BDD::Cucumber</a> with Erik Hülsmann, the maintainer of the module</p>
</li>
<li>
<p><a href="https://code-maven.com/rex-automation-3">2021.04.10 - Automation using Rex - part 3</a> with Ferenc Erki, the maintainer of the framework</p>
</li>
<li>
<p><a href="https://perlmaven.com/course-management-app-in-mojolicious-1">2021.03.28 - Web application development using Mojolicious - part 1</a> with Mark Gardner</p>
</li>
<li>
<p><a href="https://he.code-maven.com/front-end-testing-of-react">2021.03.11 - Front-end testing of React</a> with Ynon Perek (Hebrew)</p>
</li>
<li>
<p><a href="https://code-maven.com/rex-multiple-oses">2021.03.22 - Automation using Rex multiple OSes - part 2</a> with Ferenc Erki</p>
</li>
<li>
<p><a href="https://code-maven.com/automation-with-rex">2021.02.08 - Automation using Rex - part 1</a> with Ferenc Erki</p>
</li>
<li>
<p><a href="https://code-maven.com/exploring-gitlab-ci">2021.02.07 - Exploring GitLab CI</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/exploring-bdd-in-perl-4">2021.02.07 - Exploring BDD in Perl - using Test::BDD::Cucumber - part 4</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/exploring-bdd-in-perl-3">2021.02.06 - Exploring BDD in Perl - using Test::BDD::Cucumber - part 3</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/exploring-bdd-in-perl-2">2021.02.06 - Exploring BDD in Perl - using Test::BDD::Cucumber - part 2</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/exploring-bdd-in-perl-1">2021.02.04 - Exploring BDD in Perl - using Test::BDD::Cucumber - part 1</a></p>
</li>
</ul>
<!--
    * [2021.04.18 - Creating a Perl binding to a C library using FFI](https://perlmaven.com/perl-binding-to-c-library-using-ffi) with Sawyer X
-->
<h2 class="title is-4">Follow us</h2>
<ul>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
<h2 class="title is-4">Background</h2>
<p><a href="https://martinfowler.com/articles/on-pair-programming.html">Martin Fowler on Pair Programming</a> by Birgitta Böckeler and Nina Siessegger.</p>
<!--
<iframe style="width: 600px; height: 600px; overflow:hidden;" src="https://cdn.forms-content.sg-form.com/3ad9415a-aabe-11eb-8ad8-02b0296d65f9"/>
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Automation with Rex - part 3 - Rexify</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-04-02T08:20:01Z</updated>
    <pubDate>2021-04-02T08:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rex-automation-3" />
    <id>https://code-maven.com/rex-automation-3</id>
    <content type="html"><![CDATA[<p>During this meeting <a href="https://www.linkedin.com/in/ferki/">Ferenc Erki</a>, the lead developer of <a href="https://www.rexify.org/">Rex</a>
helped with further tasks using Rex.</p>
<p>See the whole <a href="/rex">series about Rex</a></p>
<p>We have reviewed the Rexfile used to install <a href="https://perlmaven.com/from-cgi-to-psgi-and-starman">Apache, CGI, PSGI, and Starman</a>
and we have also reviewd the example to <a href="/rex-reboot-remote-server">reboot a remote server using Rexify</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/ibnke-vk3vc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Upcoming <a href="/live">live events</a>.</p>
<p>We have also discussed how to <a href="/rex-run-code-locally">run Rex commands locally</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Rex - (R)?ex - Rexify</title>
    <summary type="html"><![CDATA[Rex (aka Rexify) is a framework allowing you to automate the configuration and maintenance of many servers]]></summary>
    <updated>2021-03-23T09:30:01Z</updated>
    <pubDate>2021-03-23T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rex" />
    <id>https://code-maven.com/rex</id>
    <content type="html"><![CDATA[<p><a href="https://www.rexify.org/">Rex (aka Rexify)</a> is a framework allowing you to automate the configuration and maintenance of many servers.</p>
<ul>
<li><a href="/automation-with-rex">Learn automation using (R)?ex</a></li>
<li><a href="/rex-multiple-oses">Multiple OS-es using (R)?ex</a></li>
<li><a href="/rex-automation-3">Rex Automation part 3</a></li>
<li><a href="/elk-with-rex">Setting up ELK using (R)?ex</a></li>
</ul>
<p>Rex articles:</p>
<ul>
<li><a href="/rex-run-code-locally">Execute Rex commands locally</a></li>
<li><a href="/rex-reboot-remote-server">Reboot remote server using Rex</a></li>
</ul>
<h2 class="title is-4">Further Plans</h2>
<ul>
<li>
<p>Mention the idea of separating code and data (e.g. via CMDB, config files, APIs, etc.)</p>
</li>
<li>
<p>Maybe convert the nginx logic from Rexfile into a module (e.g. Rex::CodeMaven::Nginx)</p>
</li>
<li>
<p>add a cert to nginx (e.g. via Let's Encrypt)</p>
</li>
<li>
<p>Enable basic auth in nginx</p>
</li>
<li>
<p>Write a script that will create a new Droplet with my own personal public key. This is going to be the management host.</p>
</li>
</ul>
<h2 class="title is-4">Getting started with Rex</h2>
<ul>
<li>Install Rex</li>
<li>Set up a remote host. e.g. Create a Droplet on <a href="https://www.digitalocean.com/?refcode=0d4cc75b3a74">Digital Ocean</a></li>
<li>Make sure you can ssh to the host without providing a password.</li>
<li>Run your first command using Rex: (after replacing USER by the remote username and REMOTE_HOST by the IP or dns name of the remote host.)</li>
</ul>
<pre><code>rex -u USER -H REMOTE_HOST -e 'say run(q{hostname})'
</code></pre>
<h2 class="title is-4">Get remote hostname using Rexify</h2>
<pre><code>rex -u USER -H REMOTE_HOST -e 'say run(q{hostname})'
</code></pre>
<p>The output will look like this:</p>
<pre><code>[2021-03-23 19:11:22] INFO - Running task eval-line on REMOTE_HOST
HOSTNAME
[2021-03-23 19:11:28] INFO - All tasks successful on all hosts
</code></pre>
<h2 class="title is-4">List directory on remote host using Rexify</h2>
<pre><code>rex -u USER -H REMOTE_HOST -e 'say for run(q{ls -l})'
rex -u USER -H REMOTE_HOST -e 'say scalar run(q{ls -l})'
</code></pre>
<h2 class="title is-4">Create a Rexfile</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/minimal/Rexfile">examples/rex/minimal/Rexfile</a></strong></p>
<pre><code class="language-txt">use Rex -feature =&gt; [qw( 1.4 exec_autodie)];

</code></pre>
<p>This is still useless, but we already have a Rexfile that declares its featureset.</p>
<h2 class="title is-4">Rexfile with simple task showing remote hostname</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/hostname/Rexfile">examples/rex/hostname/Rexfile</a></strong></p>
<pre><code class="language-txt">use Rex -feature =&gt; [qw( 1.4 exec_autodie)];

desc 'Just printing hostname';
task 'print_hostname', sub {
    say run('hostname');
};

</code></pre>
<p><strong>cd</strong> into the directory of this file.</p>
<p>Then type in</p>
<pre><code>rex -T
</code></pre>
<p>it will print out the list of available tasks in the Rexfile.</p>
<pre><code>Tasks
 print_hostname  Just printing hostname
</code></pre>
<p>The output will look like this: (you need to replace USER and REMOTE_HOST and it will show something else instead of HOSTNAME</p>
<pre><code>$ rex -u USER -H REMOTE_HOST print_hostname
[2021-03-25 13:21:48] INFO - Running task print_hostname on REMOTE_HOST
HOSTNAME
[2021-03-25 13:21:54] INFO - All tasks successful on all hosts
</code></pre>
<h2 class="title is-4">Rexify update list of packages</h2>
<p><strong>apt-get update using Rexify</strong></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/update/Rexfile">examples/rex/update/Rexfile</a></strong></p>
<pre><code class="language-txt">use Rex -feature =&gt; [qw( 1.4 exec_autodie)];

desc 'Update list of Linux packages';
task update_pacakges =&gt; sub {
    update_package_db;
};


</code></pre>
<h2 class="title is-4">Rexify install Nginx</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/setup-nginx/Rexfile">examples/rex/setup-nginx/Rexfile</a></strong></p>
<pre><code class="language-txt">use Rex -feature =&gt; [qw( 1.4 exec_autodie)];

desc 'Setup nginx';
task setup_nginx =&gt; sub {
    # update_package_db;
    pkg 'nginx', ensure =&gt; 'present';
    service 'nginx', ensure =&gt; 'started';
};


</code></pre>
<p>You might first need to update the list of packages.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Multiple OS-es using Rexify</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-03-22T18:00:01Z</updated>
    <pubDate>2021-03-22T18:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rex-multiple-oses" />
    <id>https://code-maven.com/rex-multiple-oses</id>
    <content type="html"><![CDATA[<p>During this meeting <a href="https://www.linkedin.com/in/ferki/">Ferenc Erki</a>, the lead developer of <a href="https://www.rexify.org/">Rex</a>
helped us with various tasks using Rex.</p>
<p>We started where we left of last time when FErki gave us an <a href="/automation-with-rex">introduction to Rex</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/RijvRBdLw5Y" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<h2 class="title is-4">Before the meeting</h2>
<p>I've created a Rexfile to set up the environment as we had it when we finished the first session.</p>
<ul>
<li>Created a pair of private/public keys that will be used in these examples. Locally I saved them in <b>~/.ssh/rex</b>. I have manually uploaded the public key to Digital Ocean and call it Rex.</li>
<li>Create A Droplet with Ubuntu 20.04 in New York 1.  Hostname code-maven-rex. This will me the management machine during the meeting.</li>
<li>Also create 2 Droplets with Ubuntu 20.04 in New York 1 Hostname ubu-1 and ubu-2 using the Rex public key</li>
<li>On the management server: Install Rex using apt-get, copy the .ssh/config file and copy the files we created in the <a href="/automation-with-rex">previous session</a></li>
<li>Copy the private ssh key to ~/.ssh/ on code-maven-rex, the management machine.</li>
<li>Run the Rex code on the management server to set up the web server on ubu-1</li>
</ul>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/setup/Rexfile">examples/rex/setup/Rexfile</a></strong></p>
<pre><code class="language-txt">use Rex -feature =&gt; [qw( 1.4 exec_autodie)];

desc 'Just printing hostname';
task 'print_hostname', sub {
    say run('hostname');
};

desc 'Install Rex from Linux distribution';
task install_rex =&gt; sub {
    update_package_db;
    pkg 'rex', ensure =&gt; 'present';
    say run('rex -v');
};

desc 'Configure Rex';
task configure_rex =&gt; sub {

    # file is a &quot;resource&quot;  (included in the audit log)
    file '/root/.ssh',
      ensure =&gt; 'directory',
      owner  =&gt; 'root',
      group  =&gt; 'root',
      mode   =&gt; '0700';
    file '/root/.ssh/id_rsa',
      source =&gt; '/home/gabor/.ssh/rex/rex_id_rsa',
      owner  =&gt; 'root',
      group  =&gt; 'root',
      mode   =&gt; '0600';
    file '/root/.ssh/config', source =&gt;
      'files/config';    # had to edit manually including the IP addresses
    file '/root/infra',         ensure =&gt; 'directory';
    file '/root/infra/files',   ensure =&gt; 'directory';
    file '/root/infra/Rexfile', source =&gt; '../infra/Rexfile';

    # sync_up, sync_down are &quot;commands&quot;
    sync_up '../infra/files', '/root/infra/files';
};

desc 'Check Rex';
task check_rex =&gt; sub {
    #if( not is_installed(&quot;tree&quot;) ) {
    #    update_package_db;
        pkg 'tree', ensure =&gt; 'present';
    #}

    #say for run(q{tree -a /root/});
    say scalar run(q{tree -a /root/});
};

# This did not work well
desc 'update';
task update =&gt; sub {
    update_package_db;
    update_system;

    #run('apt-get dist-upgrade -y');
    say run('uptime');

    #run('reboot');
    #say run('uptime');
};

desc 'Reboot';
task reboot =&gt; sub {
    say run('uptime');
    task '_reboot';
    wait_for_system_to_come_back(connection-&gt;server);
    say run('uptime');
};

desc 'Reboot';
task _reboot =&gt; sub {
    run('reboot');
};


use Rex::Commands::SimpleCheck;

sub wait_for_system_to_come_back {
  my ($server) = @_;

  # give some time for the reboot
  Rex::Logger::info(&quot;Waiting for system reboot of $server...&quot;);
  #sleep 30;

  while ( !is_port_open $server, 22 ) {
    sleep 1;
  }

  Rex::Logger::info(&quot;System $server is up and running again...&quot;);
  #Rex::Logger::info(&quot;Waiting 30 seconds for the services to start up...&quot;);
  #sleep 30;

  # reconnect ssh
  Rex::get_current_connection_object-&gt;reconnect;
}


</code></pre>
<p>I had to update the config file manually based on the IP addresses generated by Digital Ocean.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/setup/files/config">examples/rex/setup/files/config</a></strong></p>
<pre><code class="language-txt">#Host *
#  StrictHostKeyChecking no

Host ubu1
  Hostname 64.227.16.131

Host ubu2
  Hostname 64.227.13.199


</code></pre>
<ul>
<li><a href="https://www.rexify.org/get/index.html">Get Rex</a></li>
<li><a href="https://metacpan.org/pod/Rex::Commands::File#template($file,-@params)">template</a></li>
<li><a href="https://metacpan.org/pod/Rex::Commands::Gather#get_operating_system">get_operating_system</a></li>
<li><a href="https://metacpan.org/pod/Rex::Commands#case">case</a></li>
<li><a href="https://metacpan.org/pod/Rex::Commands#parallelism($count)">paralellism</a></li>
<li><a href="https://metacpan.org/pod/Rex::Commands::Pkg#installed_packages">install_packages</a></li>
<li><a href="https://metacpan.org/pod/local::lib">local::lib</a></li>
<li><a href="https://gist.github.com/krimdomu/335d01fc0f1e28f2bb7929eaf552eb93">reboot_and_wait.rex.pl</a></li>
<li><a href="https://gist.github.com/krimdomu/46efdc68b4067e9b792c">patch system and reboot gist (long)</a></li>
</ul>
<h2 class="title is-4">Tasks</h2>
<ul>
<li>Switch to latest Rex from CPAN.</li>
<li>Create droplets using Fedora, Debian, CentOS, and FreeBSD as well in different regions. (Done manually during the meeting.)</li>
<li>Deploy the Web server with our page on each one of them. (Managed to do it partially)</li>
<li>Introduction to templates - Change the html page so on each distribution it will say &quot;Welcome to DISTRIBUTION by Rex&quot;</li>
<li>We discussed a way to version control exactly what we are running? (So list inventory and only allow to run on the macnies in the inventory. host groups?)</li>
</ul>
<p>Added the following to <b>~/.bashrc</b>, disconnected and logged in again.</p>
<pre><code>eval &quot;$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)&quot;
</code></pre>
<h2 class="title is-4">Bash history</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/round2/history.txt">examples/rex/round2/history.txt</a></strong></p>
<pre><code class="language-txt">    1  rex -v
    2  cpanm
    3  adduser rexify
    4  perl -MCPAN -Mlocal::lib -e 'CPAN::install(LWP)'
    5  apt search local-lib
    6  apt search liblocal-lib-perl
    7  apt install liblocal-lib-perl
    8  perl -Mlocal::lib
    9  vim .bashrc
   10  printenv
   11  apt install libcpanminus-lib-perl
   12  apt install cpanminus
   18  apt install build-essential
   19  cpanm Rex
   20  rex -v
   21  ll
   22  cd infra/
   23  ll
   24  rex -T
   25  rex -H 'ubu[1,2]' print_hostname
   26  vim ~/.ssh/config 
   27  rex -H 'ubu[1,2] deb1' print_hostname
   28  rex -H 'ubu[1,2] deb1' -T
   29  rex -H 'deb1' setup_nginx
   30  vim Rexfile 
   31  rex -H 'deb1' setup_nginx -d
   32  rex -H 'deb1' -d setup_nginx
   33  vim Rexfile 
   34  rex -H 'deb1' setup_nginx
   35  cat ~/.ssh/config 
   36  rex -H 'deb1' setup_nginx -T
   37  rex -H 'deb1' -T setup_nginx
   38  rex -H 'deb1' -T
   39  rex -H 'deb1' configure_nginx
   40  vim ../.ssh/config 
   41  #rex -H 'ubu[1,2] deb1 cent1 fed1 free1' print_hostname
   42  cat ~/.ssh/config 
   43  rex -H 'ubu[1,2] deb1 cent1 fed1 free1' print_hostname
   44  fg
   45  vim Rexfile 
   46  fg
   47  rex -T
   48  rex -G all print_hostname
   49  rex -G all -T
   50  rex -G all setup_nginx
   51  rex -h
   52  rex -h | less
   53  rex -t 6 -G all setup_nginx
   54  cat ~/.ssh/config
   55  fg
   56  rex -t 6 -G all setup_nginx
   57  fg
   58  rex -H ubu1 -e 'run(q{get_operating_system})'
   59  rex -H ubu1 -e 'say get_operating_system'
   60  rex -H fed1 -e 'say get_operating_system'
   61  fg
   62  rex -t 6 -G all configure_nginx
   63  rex -H 'fed1' -e 'say run(q{getent passwd})'
   64  rex -H 'fed1' -e 'say scalar run(q{getent passwd})'
   65  rex -H 'cent1' -e 'say scalar run(q{getent passwd})'
   66  rex -H 'free1' -e 'say scalar run(q{getent passwd})'
   67  fg
   68  rex -t 6 -G all configure_nginx
   69  fg
   70  rex -t 6 -G all configure_nginx
   71  fg
   72  rex -H 'fed1' -e 'say scalar run(q{ls -l /etc/nginx})'
   73  rex -H 'fed1' -e 'say scalar run(q{ls -l /etc/nginx/conf.d})'
   74  rex -H 'cent1' -e 'say scalar run(q{ls -l /etc/nginx/conf.d})'
   75  fg
   76  rex -H 'fed1 cent1' -e 'say scalar run(q{ls -l /etc/nginx/sites-enabled})'
   77  rex -H 'cent1' -e 'say scalar run(q{ls -l /etc/nginx/sites-enabled})'
   78  fg
   79  rex -H 'free1' -e 'say scalar run(q{ls -l /etc/})'
   80  fg
   81  rex -t 6 -G all configure_nginx
   83  rex -H 'fed1 cent1' -e 'say scalar run(q{ls -l /tmp/})'
   84  rex -H 'fed1 cent1' -e 'say scalar run(q{ls -l /tmp/rex/})'
   85  rex -H 'fed1 cent1' -e 'say scalar run(q{cat /etc/nginx/nginx.conf})'

</code></pre>
<h2 class="title is-4">Rexfile</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/round2/Rexfile">examples/rex/round2/Rexfile</a></strong></p>
<pre><code class="language-txt">use Rex -feature =&gt; [qw( 1.4 exec_autodie)];

group all =&gt; qw(ubu[1,2] deb1 cent1 fed1 free1);

desc 'Just printing hostname';
task 'print_hostname', sub {
    say run('hostname');
};

desc 'Setup nginx';
task setup_nginx =&gt; sub {
    update_package_db;
    pkg 'nginx', ensure =&gt; 'present';
    service 'nginx', ensure =&gt; 'started';
};

desc 'Configure new Rex website';
task configure_nginx =&gt; sub {
    # copy ubu-1.conf to /etc/nginx/sites-enabled/
    #run('rm -f /etc/nginx/sites-enabled/default');
    my $nginx_dir = case operating_system, {
                qr{Debian|Ubuntu}i  =&gt; &quot;/etc/nginx/sites-enabled&quot;,
                qr{Fedora|Centos}i  =&gt; &quot;/etc/nginx/conf.d&quot;,
                qr{FreeBSD}i        =&gt; 'www',
                default             =&gt; &quot;www-data&quot;,
              };

    file &quot;$nginx_dir/default&quot;, ensure =&gt; 'absent';
    file &quot;$nginx_dir/ubu-1.conf&quot;,
        source =&gt; 'files/ubu-1.conf',
        on_change =&gt; sub {
            service 'nginx' =&gt; 'reload';
        };

    # copy main.html to /root/rex/index.html
    #file '/root/rex', ensure =&gt; 'directory';
    #file '/root/rex/index.html', source =&gt; 'files/main.html';

    # copy main.html to /tmp/rex/index.html
    my $owner = case operating_system, {
                qr{Debian|Ubuntu}i  =&gt; &quot;www-data&quot;,
                qr{Fedora|Centos}i  =&gt; &quot;nginx&quot;,
                qr{FreeBSD}i        =&gt; 'www',
                default             =&gt; &quot;www-data&quot;,
              };

    file '/tmp/rex', ensure =&gt; 'directory', owner =&gt; $owner, group =&gt; $owner, mode =&gt; '0755';
    #file '/tmp/rex/index.html', source =&gt; 'files/main.html';
    my $hostname = run('hostname');
    file '/tmp/rex/index.html', content =&gt; template('files/main.html', name =&gt; $hostname );

    # reload nginx
    #service 'nginx' =&gt; 'reload';
};

# vim: syntax=perl


</code></pre>
<h2 class="title is-4">HTML Template</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/round2/files/main.html">examples/rex/round2/files/main.html</a></strong></p>
<pre><code class="language-html">&lt;h1&gt;Welcome to Rex on &lt;%= $name -%&gt; - &lt;%= Rex::Commands::Gather::get_operating_system %&gt;&lt;/h1&gt;

</code></pre>
<h2 class="title is-4">Nginx config file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/round2/files/ubu-1.conf">examples/rex/round2/files/ubu-1.conf</a></strong></p>
<pre><code class="language-conf">server {
  listen [::]:80;
  listen 80;
  server_name ubu-1;

  root /tmp/rex;
  location / {
    autoindex on;
  }
}


</code></pre>
<h2 class="title is-4">.ssh/config file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/round2/config">examples/rex/round2/config</a></strong></p>
<pre><code class="language-txt">#Host *
#  StrictHostKeyChecking no

Host ubu1
  Hostname 64.227.16.131

Host ubu2
  Hostname 64.227.13.199

Host deb1
  Hostname 157.245.81.133

Host fed1
  Hostname 68.183.140.27

Host cent1
  Hostname 161.35.107.232

Host free1
  Hostname 134.209.117.73


</code></pre>
<!--
Before the meeting create a script that will set up the environment as we had it when we finished the first session.
* Create a pair of private/public keys that will be used in these examples. Upload the public key to Digital Ocean
* If not too difficult write a script that will create a new Droplet with my own personal public key. This is going to be the management host.
* Also create 2 machines using the Rex public key called ubu-1 and ubu-2
* On the management server: Install Rex using apt-get, copy the .ssh/config file and copy the files we created in the [previous session](/automation-with-rex)
* Copy the private ssh key to ~/.ssh/
* Run the Rex code on the management server to set up the web server on ubu-1

* Switch to latest Rex from CPAN (perhaps even inside a perlbrew environment?)
* Create droplets using Fedora, Debian, CentOS, and FreeBSD as well in different regions.
* Deploy the Web server with our page on each one of them.
* Introduction to templates - Change the html page so on each distribution it will say "Welcome to DISTRIBUTION by Rex"
* Do we have a way to version control exactly what we are running? (So list inventory and only allow to run on the macnies in the inventory. host groups?)
* Mention the idea of separating code and data (e.g. via CMDB, config files, APIs, etc.)
* Maybe convert the nginx logic from Rexfile into a module (e.g. Rex::CodeMaven::Nginx)
* add a cert to nginx (e.g. via Let's Encrypt)
* Enable basic auth in nginx

-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ansible - localhost</title>
    <summary type="html"><![CDATA[Experiment with Ansible on localhost]]></summary>
    <updated>2021-03-16T11:30:01Z</updated>
    <pubDate>2021-03-16T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ansible-localhost" />
    <id>https://code-maven.com/ansible-localhost</id>
    <content type="html"><![CDATA[<p>Experiment with Ansible on localhost</p>
<h2 class="title is-4">Prepare a YAML-based inventory file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/localhost/inventory.yml">examples/ansible/localhost/inventory.yml</a></strong></p>
<pre><code class="language-yaml">all:
  hosts:
    127.0.0.1:

</code></pre>
<h2 class="title is-4">Create an Ansible configuration file</h2>
<p>Telling Ansible where the inventory is.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/localhost/ansible.cfg">examples/ansible/localhost/ansible.cfg</a></strong></p>
<pre><code class="language-cfg">[defaults]
deprecation_warnings = False
inventory = inventory.yml
host_key_checking = False
#ask_pass = True


</code></pre>
<p>Make sure you can ssh to localhost:</p>
<pre><code>cd ~/.ssh
cat id_rsa.pub &gt;&gt; authorized_keys
</code></pre>
<p>Then you can start running commands:</p>
<pre><code>ansible all -m ping
ansible all -m ping
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Learn automation using Rexify</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-03-09T07:30:01Z</updated>
    <pubDate>2021-03-09T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/automation-with-rex" />
    <id>https://code-maven.com/automation-with-rex</id>
    <content type="html"><![CDATA[<p>During this meeting <a href="https://www.linkedin.com/in/ferki/">Ferenc Erki</a>, the lead developer of <a href="https://www.rexify.org/">Rex</a> taught
us to set up and configure his hosts using Rex.</p>
<p>We started from an empty management machine. Installed Rex. Created two Ubuntu-based servers. First we had some basic experimentation with Rex
then installed and configured Nginx.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/bLJ3Q0Je8p8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<h2 class="title is-4">The content</h2>
<p>Create Droplet with Ubuntu 20.04 in New York 1.  Hostname code-maven-rex</p>
<p>Created ssh keypair on the new machine to be used as a management host.
Add the public key to the Digital Ocean admin interface as &quot;Rex&quot; to be used from the management server.</p>
<p>Create 2 Droplets with Ubuntu 20.04 in New York 1 Hostname ubu-1 and ubu-2</p>
<h2 class="title is-4">Rexfile</h2>
<p>During the session we put together a Rexfile with a number of tasks. This is what we got. Whatch the video for explanations.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/infra/Rexfile">examples/rex/infra/Rexfile</a></strong></p>
<pre><code class="language-txt">use Rex -feature =&gt; [qw( 1.4 exec_autodie)];

desc 'Just printing hostname';
task 'print_hostname', sub {
    say run('hostname');
};

desc 'Setup nginx';
task setup_nginx =&gt; sub {
    pkg 'nginx', ensure =&gt; 'present';
};

desc 'Configure new Rex website';
task configure_nginx =&gt; sub {
    # copy ubu-1.conf to /etc/nginx/sites-enabled/
    run('rm -f /etc/nginx/sites-enabled/default');
    file '/etc/nginx/sites-enabled/ubu-1.conf',
        source =&gt; 'files/ubu-1.conf',
        on_change =&gt; sub {
            service 'nginx' =&gt; 'reload';
        };

    # copy main.html to /root/rex/index.html
    #file '/root/rex', ensure =&gt; 'directory';
    #file '/root/rex/index.html', source =&gt; 'files/main.html';

    # copy main.html to /tmp/rex/index.html
    file '/tmp/rex', ensure =&gt; 'directory', owner =&gt; 'www-data', group =&gt; 'www-data', mode =&gt; '0755';
    file '/tmp/rex/index.html', source =&gt; 'files/main.html';

    # reload nginx
    #service 'nginx' =&gt; 'reload';
};


</code></pre>
<h2 class="title is-4">HTML file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/infra/files/main.html">examples/rex/infra/files/main.html</a></strong></p>
<pre><code class="language-html">&lt;h1&gt;Welcome to Rex&lt;/h1&gt;

</code></pre>
<h2 class="title is-4">Nginx config file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/infra/files/ubu-1.conf">examples/rex/infra/files/ubu-1.conf</a></strong></p>
<pre><code class="language-conf">server {
  listen [::]:80;
  listen 80;
  server_name ubu-1;

  root /tmp/rex;
  location / {
    autoindex on;
  }
}


</code></pre>
<h2 class="title is-4">~/.ssh/config</h2>
<p>The SSH config file we created:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/infra/config">examples/rex/infra/config</a></strong></p>
<pre><code class="language-txt">#Host *
#  StrictHostKeyChecking no

Host ubu2
  Hostname 104.131.169.6

Host ubu1
  Hostname 104.131.167.212

</code></pre>
<h2 class="title is-4">History</h2>
<p>This is the history of the shell commands that we used during the meetig. I tried to clean the duplicate entries.
I hope having them here makes it easier to reproduce the commands.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/rex/infra/history.txt">examples/rex/infra/history.txt</a></strong></p>
<pre><code class="language-txt">    1  ssh-keygen
    2  ll .ssh/
    3  cat .ssh/id_rsa.pub
    4  ssh 104.131.169.6
    6  apt-get update
    7  apt-get install rex
    8  rex -v
   10  rex -h | less
   12  rex -H 104.131.169.6 -e 'run( q{hostname} )'
   13  rex -H 104.131.169.6 -e 'run( &quot;hostname&quot; )'
   14  rex -H 104.131.169.6 -e 'run &quot;hostname&quot; '
   15  rex -H 104.131.169.6 -e 'say run &quot;hostname&quot; '
   16  rex -H '104.131.169.6 104.131.167.212' -e 'say run &quot;hostname&quot; '
   17  vim ~/.ssh/config
   18  rex -H 'ubu1 ubu2' -e 'say run &quot;hostname&quot; '
   20  rex -H 'ubu-1 ubu2' -e 'say run &quot;hostname&quot; '
   31  rex -H 'ubu-[1,2]' -e 'say run &quot;hostname&quot; '
   32  rex -H 'ubu-[1..2]' -e 'say run &quot;hostname&quot; '
   33  cat /etc/hosts
   34  mkdir infra
   35  cd infra/
   37  cat ~/.ssh/known_hosts
   42  vim ~/.ssh/config
   49  vim Rexfile
   50  rex -T
   56  apt-cache search nginx | less
   60  rex -H 'ubu1' print_hostname
   78  rex -H 'ubu1' -e 'say run q(ls -l /etc/nginx)'
   79  rex -H 'ubu1' -e 'say for run q(ls -l /etc/nginx)'
   80  rex -H 'ubu1' -e 'say for run qq(ls -l /etc/nginx)'
   81  rex -H 'ubu1' -e 'use Data::Dumper; say [run q(ls -l /etc/nginx)]'
   82  rex -H 'ubu1' -e 'use Data::Dumper; say Dumper [run q(ls -l /etc/nginx)]'
   83  rex -H 'ubu1' -e 'use Data::Dumper; say Dumper [run q(tree /etc/nginx/)]'
   84  rex -H 'ubu1' -e 'use Data::Dumper; say Dumper [run q(ls -l /etc/nginx/sites/enabled)]'
   85  rex -H 'ubu1' -e 'use Data::Dumper; say Dumper [run q(ls -l /etc/nginx/sites-enabled)]'
   87  rex -T
   88  rex -H ubu-1 configure_nginx
   89  curl http://104.131.167.212
   90  curl http://ubu-1
   91  rex -H 'ubu1' -e 'use Data::Dumper; say Dumper [run q(ls -l /etc/nginx/sites-enabled)]'

</code></pre>
<h2 class="title is-4">Links that were mentiond</h2>
<p><a href="https://github.com/rexops">RexOps</a> - Central Repository for all RexOps projects.</p>
<p><a href="https://repology.org/project/rex/versions">Repology</a> showing which version of Rex is packaged in each Linux distribution.</p>
<p><a hrf="https://metacpan.org/pod/Rex">Rex on MetaCPAN</a> and the list of <a href="https://metacpan.org/requires/module/Rex?size=200">reverse dependencies</a>,
that is CPAN distributions that use Rex.</p>
<h2 class="title is-4">FErki's answers to questions from the session</h2>
<blockquote>
  <p>What is a meaning of name Rex itself ? :)</p>
</blockquote>
<p><strong>R</strong>emote <strong>ex</strong>ecution (see also in the [FAQ](https://www.rexify.org/docs/faq/index.html#isitcalledrexorrex)).</p>
<blockquote>
  <p>Does each version of Rex have own features ? <em>(about [feature flags](https://metacpan.org/pod/Rex#FEATURE-FLAGS))</em></p>
</blockquote>
<p>Rex has named feature flags to opt in or out of various behavior based on your exact needs. Versioned feature flags control multiple named feature flags at once, so they can set defaults across the board. That is, the versioned feature flag of ```1.4</code> means "please use all the default from rex-1.4".</p>
<p>A versioned feature flag is only introduced if we think the default behavior should change in some way. In other words, default behavior shouldn't change unless explicitly asked for by specifying a different feature flag.</p>
<blockquote>
  <p>So better to use cpan Rex ? <em>(after installing with ```apt</code> from default Ubuntu repositories)</em></p>
</blockquote>
<p>Short answer: Yes, the recommended way to install Rex is from CPAN, because that's the canonical upstream source of releases.</p>
<p>Longer version: It depends on the use case and circumstances. You can [get Rex](https://www.rexify.org/get/index.html) from CPAN, from many different [package repositories](https://repology.org/project/rex/versions), or build it from source. Choose the option that fits your use case the best.</p>
<blockquote>
  <p>Is any issue to use key auth from Windows to Linux machines ?</p>
</blockquote>
<p>No, in general no issues.</p>
<p>The important detail is that Rex must use the Net::SSH2 backend for SSH connections on Windows, and that needs different configuration for authentication details. Net::SSH2 is based on libssh2 so the public and private key path need to be specified explicitly.</p>
<p>The other backend, Net::OpenSSH uses the ssh binary, so it doesn't have to rely on Rex configuration, but it doesn't support Windows.</p>
<blockquote>
  <p>Is there an option to send 'yes' when we run rex? <em>(after being prompted to accept the SSH host key of a remote endpoint)</em></p>
</blockquote>
<p>An important part of the story is that the prompt belongs to SSH, not Rex.</p>
<p>Ideally, the SSH host keys from all the hosts belonging to an infrastructure would be part of the site's inventory. Then the keys would be distributed to those who need to use SSH to connect to these hosts. There's even a [dedicated DNS record type](https://en.wikipedia.org/wiki/SSHFP_record) to store this information.</p>
<p>Apart from that, there are multiple ways to disable this prompt. Some examples, depending on the security and other requirements you might be looking for:</p>
<ul>
<li>configure SSH to don't check the host key strictly, e.g. specify ```StrictHostKeyChecking no</code> in <code>~/.ssh/config</code> or <code>/etc/ssh/ssh_config</code></li>
<li>configure Rex to pass the same option to SSH with ```Rex::Config-&gt;set_openssh_opt( StrictHostKeyChecking =&gt; 'no', );</code></li>
</ul>
<blockquote>
  <p>Is it posisble to pass something like ssh  -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no  -i ~/.ssh/id_rsa</p>
</blockquote>
<p>Yes, arbitrary SSH options can be set on the SSH side via ```~/.ssh/config</code> or <code>/etc/ssh_ssh_config</code> when Net::OpenSSH is being used.</p>
<p>SSH options (```-o</code>) can also be set on the Rex side with <a href="https://metacpan.org/pod/Rex::Config#set_openssh_opt"><code>Rex::Config-&gt;set_openssh_opt();</code></a>, and identity files (<code>-i</code>) can be set via <a href="https://metacpan.org/pod/Rex::Commands#public_key($key)"><code>public_key $path;</code></a> and <a href="https://metacpan.org/pod/Rex::Commands#private_key($key)"><code>private_key $path;</code></a></p>
<blockquote>
  <p>Are there any OS (Linux distributions) dependencies for command like service ?</p>
</blockquote>
<p>No explicit dependencies.</p>
<p>Right after connecting to the managed endpoint, Rex discovers which operating system it is supposed to manage, and chooses a service and package manager module accordingly. If systemd is active, it uses that for service management.</p>
<p>So on Ubuntu it might choose ```upstart</code> and <code>apt</code>, on Gentoo <code>OpenRC</code> and <code>emerge</code>.</p>
<blockquote>
  <p>is rex IRC channel still active? </p>
</blockquote>
<p>The [Rex IRC channel](https://webchat.freenode.net/#rex) is very much alive, yes! Come by and say hi!:)</p>
<blockquote>
  <p>I’ve never used other common server management software like Ansible or puppet. How does Rex compare?</p>
</blockquote>
<p>To get into the right mindset about Rex, maybe the shortest way is to think about it like: "it's possible to implement tools like Ansible and Puppet with Rex, but not the other way around".</p>
<p>In other words, Rex follows a different trade-off by being a framework to build your own tool. It gives you more freedom about what to automate and how to automate, but this also means you have more responsibility to carefully analyse your exact situation and implement your choices.</p>
<p>If you need a tool that pushes changes over SSH from a YAML-based configuration syntax, you can build that. If you need an agent that runs every 30 minutes to pull configuration from a central server, then you can build that too. It's your choice. Any of those systems and approaches can be good enough solutions when applied correctly to the situation at hand.</p>
<blockquote>
  <p>Is it possible to use Rex for deploying Perl modules to remote machines?</p>
</blockquote>
<p>Yes, in fact the original use case of Rex was deployment management (as far as I know).</p>
<p>In the end, any management system boils down to running commands and managing files. If there's a command to run, or a file to configure, it's possible to do that with Rex too. This includes Perl module deployment as well.</p>
<blockquote>
  <p>How should we share and distribute useful Rex tasks we’ve written with other developers?</p>
</blockquote>
<p>Rex code is Perl code, so the same rules apply for distributing the results as well. Like with most things, the "best" method depends on the exact needs.</p>
<p>I prefer the following approaches in general:</p>
<ul>
<li>share small snippets as gists</li>
<li>put my code under version control and share the repo with others</li>
<li>build a module around a specific scope and publish it on CPAN</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bash shell always succeed with ||: suffix</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-02-23T09:30:01Z</updated>
    <pubDate>2021-02-23T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bash-shell-always-succeed" />
    <id>https://code-maven.com/bash-shell-always-succeed</id>
    <content type="html"><![CDATA[<p>Trailing <b>||:</b> on Bash commmands look strange, but they are useful.</p>
<p>If you put that expression at the end of another expression then, even if the first expression fails the whole expression will still succeed,
the exit code will be set to 0, and the code will keep running.</p>
<p>See <a href="/bash-set-e">set -e to stop script on failure</a> and <a href="/bash-set-x">set -x to print statements as they are executed</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/good.sh">examples/good.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash
set -xe
ls examples/good.sh
echo $?


</code></pre>
<pre><code>$ ./examples/good.sh
+ ls examples/good.sh
examples/good.sh
+ echo 0
0
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/bad.sh">examples/bad.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash
set -xe
ls examples/no_such_file.txt
echo $?


</code></pre>
<pre><code>$ ./examples/bad.sh
+ ls examples/no_such_file.txt
ls: cannot access 'examples/no_such_file.txt': No such file or directory
+ echo 2
2
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/bad_without_e.sh">examples/bad_without_e.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash
set -x
ls examples/no_such_file.txt
echo $?

</code></pre>
<pre><code>$ ./examples/bad_without_e.sh
+ ls examples/no_such_file.txt
ls: cannot access 'examples/no_such_file.txt': No such file or directory
+ echo 2
2
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/bad_saved.sh">examples/bad_saved.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash
set -xe
ls examples/no_such_file.txt  ||:
echo $?


</code></pre>
<pre><code>$ ./examples/bad_saved.sh
+ ls examples/no_such_file.txt
ls: cannot access 'examples/no_such_file.txt': No such file or directory
+ :
+ echo 0
0
</code></pre>
<h2 class="title is-4">Explanation</h2>
<p>There are two separate pieces of syntax here:</p>
<pre><code>||  This is the OR operator.
:   This is a dummy command which will always succeed (return code 0)
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exploring GitLab CI</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-02-07T11:30:01Z</updated>
    <pubDate>2021-02-07T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exploring-gitlab-ci" />
    <id>https://code-maven.com/exploring-gitlab-ci</id>
    <content type="html"><![CDATA[<p>This is the recording of a live session that was streamed on <a href="https://www.twitch.tv/szabgab">Twitch</a> where I tried to figure out how
to make GitLab CI work a bit like Jenkins.</p>
<p>Follow me on <a href="https://www.twitch.tv/szabgab">Twitch</a> to join more live session!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/_i4n-CIRgxk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p><a href="https://code-maven.com/slides/gitlab/">GitLab slides</a> and the examples.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Add application to quick lanuch in Ubuntu</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-01-13T12:30:01Z</updated>
    <pubDate>2021-01-13T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/add-application-to-quick-launch-on-ubuntu" />
    <id>https://code-maven.com/add-application-to-quick-launch-on-ubuntu</id>
    <content type="html"><![CDATA[<p>You might have installed an application by downloading a zip file and unzipping it. Maybe into the <b>/opt/</b> directory.
How can you run it from the GUI of Ubuntu?</p>
<p>For example when I downloaded <a href="https://www.postman.com/">Postman</a> I unzipped it to be in <b>/opt/Postman</b>.</p>
<p>I could run it from the terminal by typing in <b>/opt/Postman/Postman</b> but I wanted to run it from the Desktop GUI of Ubuntu.</p>
<p>So I created a file called <b>~/.local/share/applications/postman.desktop</b> with the following content:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/postman.desktop">examples/postman.desktop</a></strong></p>
<pre><code class="language-txt">[Desktop Entry]
Terminal=false
Type=Application
Name=Postman
Exec=/opt/Postman/app/Postman
Icon=/opt/Postman/app/resources/app/assets/icon.png
#NoDisplay=true

</code></pre>
<p>Then ran</p>
<pre><code>chmod 664 ~/.local/share/applications/postman.desktop
</code></pre>
<p>It was not that simple, I fought with this a bit, I even logged out and in a few times as that was suggestied on some place,
but I think that was not necesseary I just had to get the fields in the file right.</p>
<p>Now I can press the &quot;Windows key&quot; on my keyboard, start typing &quot;post...&quot; and I can launch the app.</p>
<p>When it is running I could go to the menu on the left-hand side, right-click on the Postman icon and click on <b>Add to Favorietes</b>
so it will stay in that menu even when I quit the application.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Displaying a graph from Cyclic Voltammetry (CV) by Gabriele Meilikhov</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2021-01-01T07:30:01Z</updated>
    <pubDate>2021-01-01T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/graph-from-cyclic-voltammetry" />
    <id>https://code-maven.com/graph-from-cyclic-voltammetry</id>
    <content type="html"><![CDATA[<p>One of the experiments we do all the time is called &quot;cyclic voltammetry&quot;, or CV for short.
The experiment involves several repetitions of the measurement (several cycles), but when we share our data we only want to display one of the cycles, to make the graph clear.
These days the extraction of the relevant cycle is done manually by manipulating excel to sort data by the column 'cycle number' and then manually selecting the values of interest.</p>
<p>The solution:</p>
<p>The users can run the code in google colab, it asks them for the CSV files and the required cycle number, and it prints the appropriate figure!</p>
<screencast file="" youtube="NGaiy3_QsuM" />
<p><a href="https://colab.research.google.com/drive/10sOaxkcmpRFPV5EWfPMWTBzqVCGw7eRR?usp=sharing">script on GoogleLab</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Find first element in an array matching a condition in JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-12-27T08:30:01Z</updated>
    <pubDate>2020-12-27T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/javascript-find-first-element-in-array-matching-condition" />
    <id>https://code-maven.com/javascript-find-first-element-in-array-matching-condition</id>
    <content type="html"><![CDATA[<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/find_first.js">examples/javascript/find_first.js</a></strong></p>
<pre><code class="language-js">let animals = ['snake', 'camel', 'etruscan shrew', 'ant', 'hippopotamus', 'giraffe'];
let first = animals.find(a =&gt; a.length &gt; 5);
console.log(first);

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline parameters</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-12-07T07:30:01Z</updated>
    <pubDate>2020-12-07T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-parameters" />
    <id>https://code-maven.com/jenkins-pipeline-parameters</id>
    <content type="html"><![CDATA[<p>Jenkins pipelines can declare what kind of parameters it accepts and what are the defaults to those parameters.</p>
<p>Scheduled jobs will use the default values. Users running the job manually can set the parameters.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/parameters.Jenkinsfile">examples/jenkins/parameters.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">
pipeline {
    agent { label 'master' }
    parameters {
       string(name: 'hostname', defaultValue: 'gabor-dev', description: 'Hostname or IP address')
       booleanParam(name: 'yesno', defaultValue: false, description: 'Checkbox')
       choice(name: 'planet', choices: ['Mercury', 'Venus', 'Earth', 'Mars'], description:  'Pick a planet')
       choice(name: 'space', choices: ['', 'Mercury', 'Venus', 'Earth', 'Mars'], description:  'Pick a planet. Defaults to empty string')
       text(name: 'story', defaultValue: 'One\nTwo\nThree\n', description: '')
       password(name: 'secret', defaultValue: '', description: 'Type some secret')

    }
    stages {
        stage('display') {
            steps {
                echo params.hostname
                echo params.yesno ? &quot;yes&quot; : &quot;no&quot;
                echo params.planet
                echo params.space
                echo params.story
                //echo params.secret
                echo &quot;--------&quot;
                echo &quot;${params.hostname}&quot;
                echo &quot;${params.yesno}&quot;
                echo &quot;${params.planet}&quot;
                echo &quot;${params.space}&quot;
                echo &quot;${params.story}&quot;
                echo &quot;${params.secret}&quot;
                script {
                    sh &quot;echo ${params.secret}&quot;
                }
            }
        }
    }
}


</code></pre>
<p>Trying to <b>echo params.secret</b> caused an exception</p>
<pre><code>java.lang.ClassCastException: org.jenkinsci.plugins.workflow.steps.EchoStep.message expects class java.lang.String but received class hudson.util.Secret
</code></pre>
<p>Similarly <b>echo params.yesno</b></p>
<p>raised this exception:</p>
<pre><code>java.lang.ClassCastException: org.jenkinsci.plugins.workflow.steps.EchoStep.message expects class java.lang.String but received class java.lang.Boolean
</code></pre>
<p>Putting them in string solved the problem for both of them.</p>
<p>I also included a small <b>script</b> that uses the Linux shell to echo the value.</p>
<p>Primarily shoing that even though the content of a <b>password</b> field will not be visible on the UI of Jenkins,
the console log might contain it if we are not careful. Better not to print it.</p>
<p>See <a href="https://www.jenkins.io/doc/book/pipeline/syntax/#parameters">documentation</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>GitLab CI job building a Docker image</title>
    <summary type="html"><![CDATA[Use the Docker repository of GitLab to host the image you need to run all the other CI jobs.]]></summary>
    <updated>2020-11-29T17:30:01Z</updated>
    <pubDate>2020-11-29T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/gitlab-ci-job-building-docker-image" />
    <id>https://code-maven.com/gitlab-ci-job-building-docker-image</id>
    <content type="html"><![CDATA[<p><a href="https://gitlab.com/">GitLab</a> allows you to use any Docker image to run your CI jobs. Sometimes you'll want to create your own Docker
image, store it in the <a href="https://docs.gitlab.com/ee/user/packages/container_registry/">GitLab container registry</a> and use the.</p>
<p>In this article we'll review a GitLab CI job that creates the image and pushes it out to the container registry.</p>
<p>We are going to go over the GitLab CI config YAML file that was taken from the <a href="https://gitlab.com/ioanrogers/perl-builder">Perl builder project</a>
of <a href="https://www.linkedin.com/in/ioanrogers/">Ioan Rogers</a> and that you can find at the bottom of this page. Although this specific project creates
a Docker image to test <a href="https://perlmaven.com/">Perl code</a>, the idea can be used for any programming language.</p>
<p>First of all you might wonder why do we need to create an image, why not just use a base image and install everything during the CI process. The primary reason is
speed. Many time you need lots of prerequisites to run some applications. Doing that on every run of the CI system would be a lot of waste of time and resources.
By creating an image that already has many of the packages installed we can save time, money, and get feedback much faster.</p>
<p>The repository has two files in it. The <b>build.sh</b> shell file that <a href="/build-docker-image-with-buildah">builds a docker image using Buildah</a> and the
<b>.gitlab-ci.yml</b> file we are discussing now.</p>
<p>It has two jobs: <b>buildah-build-master</b> will run on the mater branch and <b>buildah-build</b> on all the other branches. These are controlled by the
<a href="https://docs.gitlab.com/ee/ci/yaml/#onlyexcept-basic">only and except</a> keywords. As the documentation suggest in improved way would be to use
the <a href="https://docs.gitlab.com/ee/ci/yaml/#rules">rules</a> syntax.</p>
<h2 class="title is-4">The difference</h2>
<p>As I can see the only difference between the two is that the job on the master branch also adds the <b>latest</b> tag to the created image.</p>
<h2 class="title is-4">The common part</h2>
<p>They both use the <a href="https://quay.io/repository/buildah/stable">buildah Docker image</a> from <a href="https://quay.io/">quay.io</a>, the Docker repository of Red Hat.</p>
<p>The name of the <b>stage</b>, does not really matter.</p>
<p>In the <b>before_script</b> part, that surprisingly happens before the <b>script</b> part both jobs authenticate with the Docker repository.
The environment variables <b>$CI_REGISTRY_USER</b>, <b>$CI_REGISTRY_PASSWORD</b>, and <b>$CI_REGISTRY</b> are all
<a href="https://docs.gitlab.com/ee/ci/variables/predefined_variables.html">predefined variables</a> provided by GitLab.</p>
<p>So are the variables <b>$CI_REGISTRY_IMAGE</b> and <b>$CI_COMMIT_REF_SLUG</b> used in the other commands.</p>
<p>After going over it, this isn't a complex pipeline after all.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/perl-builder/.gitlab-ci.yml">examples/perl-builder/.gitlab-ci.yml</a></strong></p>
<pre><code class="language-yaml">buildah-build-master:
  image: quay.io/buildah/stable:latest
  stage: build
  before_script:
    - buildah login -u &quot;$CI_REGISTRY_USER&quot; -p &quot;$CI_REGISTRY_PASSWORD&quot; $CI_REGISTRY
  script:
    - ./build.sh
    - buildah tag &quot;$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG&quot; &quot;$CI_REGISTRY_IMAGE:latest&quot;
    - buildah push &quot;$CI_REGISTRY_IMAGE:latest&quot;
  only:
    - master

buildah-build:
  image: quay.io/buildah/stable:latest
  stage: build
  before_script:
    - buildah login -u &quot;$CI_REGISTRY_USER&quot; -p &quot;$CI_REGISTRY_PASSWORD&quot; $CI_REGISTRY
  script:
    - ./build.sh
    - buildah push &quot;$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG&quot;
  except:
    - master

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>COVID 19 charts by DungeonTiger</title>
    <summary type="html"><![CDATA[Static Single Page Application with dynamic data to show  COVID 19 charts - GitHub Actions]]></summary>
    <updated>2020-11-28T16:30:01Z</updated>
    <pubDate>2020-11-28T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/covid-19-charts-by-dungeontiger" />
    <id>https://code-maven.com/covid-19-charts-by-dungeontiger</id>
    <content type="html"><![CDATA[<p>This is a static web site that is also a Single Page Application, but one with data that is udated twice a day to show the most up to date COVID 19 charts.
Using GitHub Actions.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/w_P7EaN6-jM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://dungeontiger.github.io/">COVID 19 charts</a></li>
<li><a href="https://github.com/dungeontiger/dungeontiger.github.io">The website in Git</a></li>
<li><a href="https://github.com/dungeontiger/covid">covid repository</a></li>
<li><a href=""></a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Basic modification of Biological data frames using Pandas by Shelley Klompus</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-11-26T12:51:03Z</updated>
    <pubDate>2020-11-26T12:51:03Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bootcamp-shelley-klompus" />
    <id>https://code-maven.com/bootcamp-shelley-klompus</id>
    <content type="html"><![CDATA[<p><a href="https://www.weizmann.ac.il/pages/search/people?language=english&amp;single=1&amp;person_id=31888">Shelley Klompus</a> a Phd Student at the
<a href="https://www.weizmann.ac.il/">Weizmann Institue of Science</a> was one of my students in the <a href="/programming-bootcamp-for-scientists">Programming Bootcamp for Scientists</a>.</p>
<p>In this video she discribes her project.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/oRcBYqilO7U" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>The code:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shelley_klompus_final_project.py">examples/shelley_klompus_final_project.py</a></strong></p>
<pre><code class="language-python"># in this project I would like to merge 2 csv files as pandas dataframes, one has information on the reactivity of\
# antigen in our assay and the other one has the information on the biological identity of the antigen
# I will keep only 2 types of antigens: positive controls - bacterial fllagella and negative controls- random peptides\
# I will compare the reactivity of the two groups and create 2 output files: boxplot, and basic statistics of the 2 groups

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import os
import io
import sys
import time

startTime = time.time()

def parse_column(row):
    return str(row['uniref_func']).split(&quot; n=&quot;)[0]

def antigen_type(row):
    if &quot;random&quot; in row[&quot;full name&quot;]:
        return &quot;negative control&quot;
    elif &quot;flagell&quot; in row[&quot;parsed_func&quot;]:
        return &quot;flagella&quot;
    elif &quot;flagell&quot; in row[&quot;full name&quot;]:
        return &quot;flagella&quot;
    else:
        return &quot;&quot;

if len(sys.argv) &lt; 2:
    exit(&quot;Save the two input files under the names: library_prec_passed.csv and library_uniref_funk.csv\
     and provide only the path to the directory&quot;)

#path_of_dir = '/net/mraid08/export/genie/Lab/Personal/shelley/courses/python_bootcamp/final_project'
path_of_dir = sys.argv[1]
file_input_1= 'library_prec_passed.csv'
file_input_2= 'library_uniref_funk.csv'

file_input_1_path = os.path.join(path_of_dir,file_input_1)
file_input_2_path = os.path.join(path_of_dir,file_input_2)
if not(os.path.exists(file_input_1_path or file_input_2_path)):
    exit(&quot;Save the two input files under the names: library_prec_passed.csv and library_uniref_funk.csv\
     and provide only the path to the directory&quot;)

# step 1- load the data and merge the dataframes and fill the NA with 0

df_reac = pd.read_csv(file_input_1_path,index_col=&quot;antigen_num&quot;)
df_func = pd.read_csv(file_input_2_path,index_col=&quot;antigen_num&quot;)

df_RF=pd.concat([df_reac,df_func ],axis=1)
df_RF['perc_passed'] = df_RF['perc_passed'].fillna(0)

# step 2- create a dictionary to parse the uniref_func column and merge it back to the main dataframe

df_RF['parsed_func'] = df_RF.apply(parse_column, axis=1)

# step 3- select the 2 groups: fllagella agtigens and negative controls
#df_RF.reset_index (level =0, inplace = True)
df_RF['type_of_antigen'] = df_RF.apply(antigen_type, axis=1)

#step 4- create the datafram for the output files: boxplot and basic statistics

df_toplot =df_RF.loc[df_RF[&quot;type_of_antigen&quot;] != &quot;&quot;]

boxplot = df_toplot.boxplot(by = &quot;type_of_antigen&quot;, column=[&quot;perc_passed&quot;], grid=False)
plt.ylabel(&quot;% of reactivity&quot;)
plt.xlabel(&quot;type of antigen&quot;)
plt.title(&quot;reactivity against bacterial flagella antigens&quot;)
plt.suptitle(&quot;&quot;)
#plt.show()
fig_file_name = 'reactivity against bacterial flagella antigens.png'
stat_file_name = 'reactivity against bacterial flagella antigens statistics.csv'
df_file_name = 'flagella and random oligos df.csv'
plt.savefig(os.path.join(path_of_dir,fig_file_name))

stat = df_toplot.groupby('type_of_antigen').describe().unstack(1)
#print(stat)
stat.to_csv(os.path.join(path_of_dir,stat_file_name))
df_toplot.to_csv(os.path.join(path_of_dir,df_file_name))

executionTime = (time.time() - startTime)
print(&quot;Project is done,execution time in seconds: &quot; + str(executionTime))
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Build docker image with buildah</title>
    <summary type="html"><![CDATA[Buildah makes it easier to build a Docker image.]]></summary>
    <updated>2020-11-23T07:30:01Z</updated>
    <pubDate>2020-11-23T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/build-docker-image-with-buildah" />
    <id>https://code-maven.com/build-docker-image-with-buildah</id>
    <content type="html"><![CDATA[<p>Creating a Docker image using <a href="https://buildah.io/">Buildah</a></p>
<p>We are going to go over a script that was taken from the <a href="https://gitlab.com/ioanrogers/perl-builder">Perl builder project</a>
of <a href="https://www.linkedin.com/in/ioanrogers/">Ioan Rogers</a> and that you can find at the bottom of this page.</p>
<p>While some of the commands are Perl specific, they only deal with the installation of Perl-based packages.
You can easily replace them with similar commands installing the packages of the project you work on.</p>
<img src="/img/buildah.png" alt="Buildah logo" />
<p>First of all you need to <a href="https://github.com/containers/buildah/blob/master/install.md">install buildah</a>.</p>
<p>I was lucky as Ubuntu has it in it a single command away.</p>
<h2 class="title is-4">Download a Docker image</h2>
<p>Download a Docker image from <a href="https://hub.docker.com/">Docker Hub</a> if necessary, create a container and echo the name of the container.
If we run this again, it will create a new container and echo the name of that one.</p>
<p>When I ran this command I got a container called <b>perl-working-container</b>.</p>
<p>Running it a second time gave me <b>perl-working-container-1</b>.</p>
<p>The script, at the bottom calls this only once and assigns the output to a variable called <b>ctr</b>. (It probably stands for container.)</p>
<pre><code>buildah from docker.io/perl:5.30
</code></pre>
<h2 class="title is-4">List containers</h2>
<pre><code>buildah containers
</code></pre>
<h2 class="title is-4">Remove container</h2>
<p>The following command helped me get rid of the extra container.</p>
<pre><code>buildah rm perl-working-container-1
</code></pre>
<h2 class="title is-4">List images</h2>
<p>I used the following command to list all the images. Apparently the list of Docker images is handled separately by Buildah
as the regular <code>docker images</code> did not list the one I got using <code>buildah images</code>.</p>
<pre><code>buildah images
</code></pre>
<h2 class="title is-4">Configure Buildah Docker</h2>
<p>The config command allows setting a number of configuration options such as the author of the image, what is the working directory,
and an environment variable.</p>
<pre><code>buildah config
</code></pre>
<h2 class="title is-4">Buildah Run</h2>
<p>Then there is a Bash function definition of a function called <b>brun</b> that probably stands for <b>buildah run</b>
that will execute the run command of buildah, which seems to be analogous to the <b>RUN</b> command of Dockerfiles,
with the name of the container and with various additional parameters.</p>
<pre><code>function brun() {
  buildah run $ctr -- &quot;$@&quot;
}
</code></pre>
<p>Then come the various calls to <code>brun</code></p>
<pre><code>brun cpanm App::cpm
</code></pre>
<p><a href="https://metacpan.org/release/App-cpanminus">cpanm</a> is the package installer of Perl (similar to pip for python or npm for NodeJS) and
this command installs the distribution that supplies the <a href="https://metacpan.org/release/App-cpm">App::cpm</a> module which is another package
installer for Perl.</p>
<p>Then using this the new <code>cpm</code> command we install a number of other Perl modules from <a href="https://metacpan.org/">CPAN</a>.</p>
<p>Then we clean the caches of apt, the Debian/Ubuntu package manager:</p>
<pre><code>brun apt-get clean
</code></pre>
<p>and remove the caches of the two Perl package managers so they won't take up space in the new Docker image.</p>
<pre><code>brun rm -rf /root/.cpanm /root/.perl-cpm
</code></pre>
<h2 class="title is-4">buildah commit</h2>
<p>The last command in the script bakes the whole thing together into a Docker image using the image name and tag that were set up at the beginning of the shell script.</p>
<pre><code>buildah commit --rm $ctr &quot;$image:$tag&quot;
</code></pre>
<h2 class="title is-4">The original script</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/perl-builder/build.sh">examples/perl-builder/build.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash

set -eu -o pipefail

image=&quot;${CI_REGISTRY_IMAGE:-perl-builder}&quot;
tag=&quot;${CI_COMMIT_REF_SLUG:-latest}&quot;

echo &quot;Building $image:$tag&quot;

ctr=$(buildah from docker.io/perl:5.30)

buildah config \
  --author='Ioan Rogers &lt;ioan@rgrs.ca&gt;' \
  --workingdir=/src \
  --env='PERL_CPANM_OPT=--notest --no-man-pages' \
$ctr

function brun() {
  buildah run $ctr -- &quot;$@&quot;
}

brun cpanm App::cpm
brun cpm install -g \
	Dist::Zilla \
	Dist::Zilla::App::Command::cover \
	Devel::Cover::Report::Kritika \
	TAP::Formatter::JUnit

brun apt-get clean
brun rm -rf /root/.cpanm /root/.perl-cpm

buildah commit --rm $ctr &quot;$image:$tag&quot;

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Add notification to my command line on Ubuntu Linux</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-11-12T07:30:01Z</updated>
    <pubDate>2020-11-12T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/notification-from-ubuntu-linux-command-line" />
    <id>https://code-maven.com/notification-from-ubuntu-linux-command-line</id>
    <content type="html"><![CDATA[<p>IntelliJ shows me a notification on MS Windows when the tests are done. (At least if it is not in focus).
This helps me bring back my focus if I switched it away.</p>
<p>I would like to have a similar for my command line on Linux. Either running the commands with some prefix
or automatically on every command on the terminal. Maybe on every long running command.</p>
<pre><code>notify-send Done &quot;$command&quot;
</code></pre>
<p>I even created a file called <b>not</b> with the following content:</p>
<pre><code>#!/bin/bash
command=$*
#echo $*
$*
notify-send Done &quot;$command&quot;
</code></pre>
<p>I put it somewhere in my PATH and made it executable <b>chmod +x not</b>.</p>
<p>Now I can run</p>
<pre><code>not command
</code></pre>
<p>and I'll get a notification when the job is done.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Running Jenkins in Docker</title>
    <summary type="html"><![CDATA[Running Jenkins in Docker]]></summary>
    <updated>2020-10-03T19:50:01Z</updated>
    <pubDate>2020-10-03T19:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-in-docker" />
    <id>https://code-maven.com/jenkins-in-docker</id>
    <content type="html"><![CDATA[<p>In this example we'll see how to run a single-node Jenkins system in Docker.</p>
<p>I found this article about <a href="https://www.jenkins.io/blog/2018/12/10/the-official-Docker-image/">the official Docker image</a>
that lead me to the <a href="https://hub.docker.com/r/jenkins/jenkins/">jenkins/jenkins</a> image.</p>
<h2 class="title is-4">Launch the first time</h2>
<pre><code>docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 --name jenkins_master --rm jenkins/jenkins:lts
</code></pre>
<ul>
<li>This will run The container in the background (as a daemon) because of the <b>-d</b> flag.</li>
<li>It will make the <b>/var/jenkins_home</b> of the container to a Jenkins volume called <b>jenkins_home</b>. If the volume does not exist it will create it. We need the volume to have persistence between re-launches.</li>
<li><b>-p</b> maps the ports</li>
<li><b>--name jenkins_master</b> will call Docker container jenkins_master. You can of course use any other name, but we'll need this name later on. Internally Jenkins refers to this node as &quot;master&quot; regardless of the name of the container you choose here.</li>
<li><b>--rm</b> tells Docker to remove the container when we stopped running it.</li>
</ul>
<h3 class="title is-5">Copy secret</h3>
<p>Once it launched we need to copy the one-time secret created by Jenkins, so type in:</p>
<pre><code>docker container cp jenkins_master:/var/jenkins_home/secrets/initialAdminPassword .
</code></pre>
<p>(There is a separate dot at the end!)</p>
<p>The take the content of the file:</p>
<p>If your host is Linux/OSX use:</p>
<pre><code>cat initialAdminPassword
</code></pre>
<p>If your host is Windows user:</p>
<pre><code>type initialAdminPassword
</code></pre>
<p>It will print a string that looks like this: 2cead49b41fa41888c78d06be80fd5e7</p>
<p>Open this page in your browser: <a href="http://localhost:8080/">http://localhost:8080/</a>, that's where Jenkins will live.</p>
<h3 class="title is-5">Paste the string you got into the window.</h3>
<p>Then select the <b>Install default plugins</b>, it will take some time to install the plugins.</p>
<p>It will then ask for the initial user. Give it whatever you like.</p>
<p>At this point you can use Jenkins and you have a single node called &quot;master&quot;.</p>
<h3 class="title is-5">Create initial user</h3>
<p>Probably a good idea to have a username/password pair that you won't forget. E.g. your own name.</p>
<p>Try to run the <a href="/jenkins-pipeline-hello-world">Hello World pipeline</a></p>
<h2 class="title is-4">See the container running</h2>
<pre><code>docker ps
</code></pre>
<h2 class="title is-4">To stop the Jenkins server</h2>
<p>When you are done using the Jenkins server you might want to shut down the container so it won't use your CPU.</p>
<pre><code>docker container stop jenkins_master
</code></pre>
<p>Because we used the --rm flag this will also remove the container. However the volume where we have all the data will remain.</p>
<p>To see the container is gone type in</p>
<pre><code>docker ps -a
</code></pre>
<h2 class="title is-4">List volumes</h2>
<p>To see that the volume exists type in:</p>
<pre><code>docker volume ls
</code></pre>
<h2 class="title is-4">Start Jenkins again</h2>
<p>In order to start the Jenkins server again type in the same command as you typed in when you first launched it above.
In our case this command:</p>
<pre><code>docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 --name jenkins_master --rm jenkins/jenkins:lts
</code></pre>
<p>You can change basically any of the options now, for example you can use a different name for the container or you can decide
to map the server to another port. The only thing that must remain the same is the content of the <b>-v</b> flag and the name of the
base image. That will ensure we use the already existing volume that has all of our installations and configurations.</p>
<h2 class="title is-4">Upgrading Jenkins</h2>
<p>When there is a new release Jenkins (in its UI) will notify you and will suggest to upgrade it. That's probably useless in our case
as that would only upgrade in the currently running container, but we use the <b>--rm</b>  flag so our container will be removed when we shut down the application.</p>
<p>It is better to updat the image we are using.</p>
<pre><code>docker pull jenkins/jenkins:lts
</code></pre>
<p>I just upgraded this way from Jenkins 2.249.1 to Jenkins 2.263.1.</p>
<h2 class="title is-4">Plugins</h2>
<p>Apparently the plugins that were installed on the first run were stored in the persistent volume we created so they survive the stop and re-start of the Docker
container and even the upgrade of the Docker image.</p>
<p>Once in a while Jenkins will notify you (on its UI) that new versions of the plugins are available. You can upgrade them via the UI.
The upgrades will also be persistent in the volume.</p>
<h2 class="title is-4">Enjoy</h2>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline printing Unicode characters</title>
    <summary type="html"><![CDATA[It seems to be easy to print Unicode characters from a Jenkins Pipeline]]></summary>
    <updated>2020-10-03T18:30:01Z</updated>
    <pubDate>2020-10-03T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-unicode" />
    <id>https://code-maven.com/jenkins-pipeline-unicode</id>
    <content type="html"><![CDATA[<p>It seems to be easy to print Unicode characters from a Jenkins Pipeline</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/unicode.jenkinsfile">examples/jenkins/unicode.jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
    agent { label 'master' }
    stages {
        stage('build') {
            steps {
                println &quot;Hello World&quot;
                println &quot;Álom ló és ő egy ügyes ökör.&quot;
                println &quot;שלום עולם&quot;
                println &quot;السلام عليكم&quot;



                script {
                    def latin_letters = &quot;Hello World&quot;
                    println latin_letters

                    def hungarian = &quot;Álom ló és ő egy ügyes ökör.&quot;
                    println hungarian

                    def hebrew = &quot;שלום עולם&quot;
                    println hebrew

                    def arabic = &quot;السلام عليكم&quot;
                    println arabic
                }
            }
        }
    }
}


</code></pre>
<p>I tried this in Jenkins version 2.249.1 running in Docker and the consul output was showing the strings as expected.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Measuring confidence level in your application - Quality Assurance?</title>
    <summary type="html"><![CDATA[How can you measure the confidence level in your application?]]></summary>
    <updated>2020-09-30T07:30:01Z</updated>
    <pubDate>2020-09-30T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/qa-confidence-level" />
    <id>https://code-maven.com/qa-confidence-level</id>
    <content type="html"><![CDATA[<p>One of my clients that is moving their services from an on-premise installation to the cloud, started to talk about the level of confidence in their code.</p>
<p>I am wondering why it came up now? What is different from the previous 20+ years when they released software? And how can we really measure confidence?</p>
<p>I think the big difference is that earlier they relied on a <b>QA department</b> that was checking their application after the main part of the development
was done. This took months of back-and-forth bug reporting, fixing and re-testing. We all know and hate this model.</p>
<p>This system was not good back then, but it is impossible now when moving to the cloud.</p>
<p>In this new cloud-based environment the expectation is that we will be able to release and deploy code within hours of it being &quot;finished&quot; by the developers.
I think they still have not fully accepted that the word &quot;finished&quot; or &quot;done&quot; has a totally different meaning than what they used to have.</p>
<p>In any case I was trying to come up with a few ways we can measure this level of confidence. These might help your organization as well?</p>
<h2 class="title is-4">Business level measurement</h2>
<p>These could be things like</p>
<ul>
<li>How much money do we make?</li>
<li>How many visitors convert to users?</li>
<li>etc.</li>
</ul>
<p>but at least in our business the sales are done by sales people, so our measurements need to focus on how well we serve existing clients.</p>
<h2 class="title is-4">Business level serving existing clients</h2>
<p>The primary measurement should be <b>goals set by the business</b>: The number, severity, and length of production failures. Who measures it and how?
In general the lower the numbers the better. One needs to measure these and make sure they keep going down with time. Once thing that is really difficult
here is to measure the &quot;severity&quot;.</p>
<p>A similar measurement could be something like the following:</p>
<ul>
<li>
<p>Number of open issues/tickets (weighted based on severity)?</p>
</li>
<li>
<p>How long are the issues open?</p>
</li>
<li>
<p>How soon are they found after they got added to the code?</p>
</li>
<li>
<p>How soon are they fixed in the code?</p>
</li>
<li>
<p>How soon do they reach production?</p>
</li>
</ul>
<h2 class="title is-4">Code level</h2>
<ul>
<li>
<p>Unit test</p>
</li>
<li>
<p>Test coverage</p>
</li>
<li>
<p>Data coverage.</p>
</li>
<li>
<p>Load and Performance test thresholds met</p>
</li>
<li>
<p>Code standardization measurements. Static Code Analyzers  (linter, tidy etc.)</p>
</li>
<li>
<p>Cyclomatic code complexity measurement.</p>
</li>
</ul>
<h2 class="title is-4">Other</h2>
<p>A few other resources I looked at:</p>
<p><a href="https://reqtest.com/testing-blog/test-coverage-metrics/">Test coverage metrics</a></p>
<p><a href="https://reqtest.com/testing-blog/5-key-benefits-of-using-a-traceability-matrix-to-stay-on-top-and-in-control-of-your-project/">Traceability matrix</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>DevOps, CI/CD, and Automation assesment questions</title>
    <summary type="html"><![CDATA[When a company is talking about introducing DevOps or CI/CD or Automation a number of questions must be asked.]]></summary>
    <updated>2020-09-21T07:30:01Z</updated>
    <pubDate>2020-09-21T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/devop-and-automation-questions" />
    <id>https://code-maven.com/devop-and-automation-questions</id>
    <content type="html"><![CDATA[<p>When a company is talking about introducing DevOps or CI/CD or Automation a number of questions must be asked.</p>
<p>What is their current situation?</p>
<p>Where do they want to be?</p>
<p>When do they want to get there?</p>
<p>A few helper questions about their current situation:</p>
<h2 class="title is-4">What kind of products and services do you provide?</h2>
<ul>
<li>Do you have web based applications? Something SAS (Software as a Service)?</li>
<li>Do you have mobile appilcations?</li>
<li>Do you offer packaged software people download to their desktop?</li>
<li>Do you have embedded applications?</li>
<li>Do you sell hardware as well?</li>
<li>...</li>
</ul>
<h2 class="title is-4">What programming languages do you use?</li>
<h2 class="title is-4">What applications do you use?</h2>
<ul>
<li>Relational and NoSQL Databases?</li>
<li>Monitoring systems?</li>
<li>...</li>
</ul>
<h2 class="title is-4">Do you use Docker or other containerization system?</h2>
<h2 class="title is-4">How can a new developer set up a development environment?</h2>
<h2 class="title is-4">What kind of automated tests do you have?</h2>
<ul>
<li>Unit-tests?</li>
<li>Integration-tests?</li>
<li>Acceptance-tests?</li>
<li>Security-tests?</li>
<li>Performance-tests?</li>
<li>...</li>
</ul>
<p>What does each one of those mean to you?</p>
<p>How confident are you that they will catch any problem that might be introduced to your software.</p>
<h2 class="title is-4">Do you have nightly builds?</h2>
<p>Who checks them an how?</p>
<h2 class="title is-4">Do you DTAP or similar approach for separate environments?</h2>
<p><a href="https://en.wikipedia.org/wiki/Development,_testing,_acceptance_and_production">DTAP</a></p>
<h2 class="title is-4">What version control system do you use and what is your branching/merging/release strategy?</h2>
<h2 class="title is-4">If you use the cloud, what infrastructure do you already have?</h2>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Datadog</title>
    <summary type="html"><![CDATA[DataDog is the leading provider of application and infrastructure monitoring service. This is just my notebook for using DataDog]]></summary>
    <updated>2020-09-17T19:30:01Z</updated>
    <pubDate>2020-09-17T19:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/datadog" />
    <id>https://code-maven.com/datadog</id>
    <content type="html"><![CDATA[<p>This posts is here only to collect some of the notes I have about Datadog. With time it might become a more comprehensive post.</p>
<h2 class="title is-4">Setup</h2>
<p>Create an account and install the agent on one of your servers. It will immediately start sending generic system-related metrics.
eg. cPU load, memory usage, disk IO, Network etc. It will also start sending metrics about itself.</p>
<h2 class="title is-4">Datadog command line tools</h2>
<p>It is written in Python so you install it with the following command:</p>
<pre><code>pip install datadog
</code></pre>
<p>Get the API  key and Application key from your <a href="https://app.datadoghq.com/account/settings">account settings</a>.
You can then save them in ~/.dogrc but when you run <code>dog</code> on the command line it will ask for the values and save them
in the config file for you.</p>
<pre><code>[Connection]
apikey = AAAAAAAAAAAAAAAAAAA
appkey = BBBBBBBBBBBBBBBBBBBB
</code></pre>
<h2 class="title is-4">Submit an event from the command line</h2>
<pre><code>dog event post &quot;Command line title&quot; &quot;command line text&quot;
</code></pre>
<p>Then see it on your <a href="https://app.datadoghq.com/event/stream">event stream</a>.</p>
<h3 class="title is-5">Post some metric</h3>
<pre><code>dog metric post foobar.test 1
dog metric post foobar.test 2
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Add language tags to PyVideo</title>
    <summary type="html"><![CDATA[PyVideo is a site where you can find videos from Python conferences. You can list them by spoken language and you can help categorize those pages.]]></summary>
    <updated>2020-09-02T15:30:01Z</updated>
    <pubDate>2020-09-02T15:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/add-language-tags-to-pyvideo" />
    <id>https://code-maven.com/add-language-tags-to-pyvideo</id>
    <content type="html"><![CDATA[<pre><code class="language-perl"></code></pre>
<iframe width="560" height="315" src="https://www.youtube.com/embed/wPkFw5u8oeA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p><a href="https://pyvideo.org/">PyVideo</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Raku Interactive Shell - values in $ variables</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-08-26T07:32:02Z</updated>
    <pubDate>2020-08-26T07:32:02Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/raku-interactive" />
    <id>https://code-maven.com/raku-interactive</id>
    <content type="html"><![CDATA[<p>When learning Raku, one of the best things you can do is to experiment with the language in the interactive shell.
(Also known as <a href="https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop">REPL = Read Eval Print Loop</a>)</p>
<p>Once you have <a href="https://rakudo.org/">Rakudo</a> installed, open a Terminal (or Command Prompt in MS Windows)
and type in <b>raku</b>. If you are using the Docker version of Rakudo Star then run it in interactive mode as</p>
<pre><code>docker run --rm -it rakudo-star
</code></pre>
<p>After a second or so, you will see:</p>
<pre><code>To exit type 'exit' or '^D'
&gt;
</code></pre>
<p>The &gt; sign is the prompt. You can now type in any Raku expression.
Let's start with a few simple ones:</p>
<pre><code>&gt; say &quot;hello world&quot;
hello world
&gt; say 42
42
&gt; 19 + 23
42
</code></pre>
<p><code>say</code> is the keyword to <b>print</b> something to the screen and add a trailing newline.</p>
<p>Strings are in double-quotes. Numbers don't have quotes.</p>
<p>We can use Raku as a calculator. In the interactive shell we don't even need to call <b>say</b>
as it will automatically print the result of the last statement. (The P is in the name REPL for a reason.)</p>
<h2 class="title is-4">Variables</h2>
<p>Most variables in Raku have one or two special characters at the beginning. The first such character is called
Sigil, the second, optional character is called Twigil.</p>
<p>The <code>$</code> sigil means the variable can contain any item.
Let's try to assign a number to a variable that starts with a <code>$</code>:</p>
<pre><code>&gt; $x = 42
===SORRY!=== Error while compiling:
Variable '$x' is not declared
------&gt; &lt;BOL&gt;⏏$x = 42
</code></pre>
<p>Even the interactive shell requires us to declare our variables using the <code>my</code> keyword:</p>
<pre><code>&gt; my $x = 42
42
&gt; $x
42
&gt; $x - 7
35
</code></pre>
<p>After the declaration and the assignment, we can use the variable in arithmetic operations.</p>
<p>Using the <code>^name</code> method we can also ask the variable what type is it. In this case it is of type <code>Int</code>:</p>
<pre><code>&gt; $x.^name
Int
</code></pre>
<p>We can replace the content of the variable with a string, and then, when we ask what is
the <b>^name</b> of its type, we get back that it is a <b>Str</b>.</p>
<pre><code>&gt; $x = &quot;abc&quot;
abc

&gt; $x.^name
Str
</code></pre>
<p>Some people love this kind of flexibility, for others this looks crazy dangerous. Don't worry,
In Raku, you can be much stricter with your variable types during declaration. If that's your thing:</p>
<pre><code>&gt; my Int $w = 42
42
&gt; $w.^name
Int

&gt; $w = &quot;hello&quot;
Type check failed in assignment to $w; expected Int but got Str (&quot;hello&quot;)
  in block &lt;unit&gt; at &lt;unknown file&gt; line 1

&gt;
</code></pre>
<p>In this case, we've declared the $w variable to be <code>Int</code> so we won't be able to
assign any other type to it.</p>
<p>Back to our type declaration free variable, you can put all kind of other types in that variable:</p>
<pre><code>&gt; $x = 3.14
3.14
&gt; $x.^name
Rat

&gt; $x = [&quot;foo&quot;, &quot;bar&quot;, &quot;qux&quot;]
[foo bar qux]
&gt; $x.^name
Array

&gt; $x = (&quot;foo&quot;, &quot;bar&quot;, &quot;qux&quot;)
(foo bar qux)
&gt; $x.^name
List

&gt; $x = {name =&gt; &quot;Foo&quot;, answer =&gt; 42}
{answer =&gt; 42, name =&gt; Foo}
&gt; $x.^name
Hash

&gt; $x = planet =&gt; &quot;Earth&quot;
platent =&gt; Earth
&gt; $x.^name
Pair
</code></pre>
<p>We'll look at these types later on.</p>
<h2 class="title is-4">Pair</h2>
<pre><code>&gt; $x = planet =&gt; &quot;Earth&quot;
planet =&gt; Earth
&gt; $x.^name
Pair
&gt; $x.gist
planet =&gt; Earth
&gt; $x.key
planet
&gt; $x.value
Earth
</code></pre>
<h2 class="title is-4">Hash</h2>
<p>A Hash is a key-value store. In other languages it might be called <code>Associative Array</code> or <code>Dictionary</code>.</p>
<p>We can create a hash using curly-braces, and assign it to a variable starting with a <code>$</code>:</p>
<pre><code>&gt; my $x = {home =&gt; &quot;Earth&quot;, answer =&gt; 42};
{answer =&gt; 42, home =&gt; Earth}
</code></pre>
<p>It is a hash:</p>
<pre><code>&gt; $x.^name
Hash
</code></pre>
<p>We can access the values of the individual keys both with quotes around the keys:</p>
<pre><code>&gt; $x{&quot;home&quot;}
Earth
&gt; $x{&quot;answer&quot;}
42
</code></pre>
<p>And without any quotes:</p>
<pre><code>&gt; $x&amp;lt;home&gt;
Earth
&gt; $x&amp;lt;answer&gt;
42
</code></pre>
<p>We can fetch the <code>keys</code> of the hash and the <code>values</code>
separately:</p>
<pre><code>&gt; $x.keys
(home answer)

&gt; $x.values
(Earth 42)
</code></pre>
<p>What <code>keys</code> really returns is a <code>Seq</code> (Sequence) object:</p>
<pre><code>&gt; my $z = $x.keys
(home answer)
&gt; $z.^name
Seq
</code></pre>
<p>We can also iterate over the individual keys using the <code>for</code> loop.
($k is the loop variable that will get each key on its turn.)</p>
<pre><code>&gt; for $x.keys -&gt; $k { say $k }
home
answer
</code></pre>
<p>Using the keys we can access the respective values:</p>
<pre><code>&gt; for $x.keys -&gt; $k { say $k; say $x{$k} }
home
Earth
answer
42
</code></pre>
<p>Alternatively we can fetch a list of <code>pairs</code>
and on each <code>Pair</code> object we can call the <code>key</code>
and the <code>value</code> methods:</p>
<pre><code>&gt; for $x.pairs -&gt; $p { say $p.^name; say $p.key; say $p.value}
Pair
home
Earth
Pair
answer
42
</code></pre>
<h2 class="title is-4">List</h2>
<p>If we wrap the right-hand side in parentheses, we get a <code>List</code>
on the left-hand side:</p>
<pre><code>&gt; $x = (&quot;Earth&quot;, &quot;Wind&quot;, &quot;Fire&quot;)
(Earth Wind Fire)
&gt; $x.^name
List
</code></pre>
<p>In order to iterate over its elements, we need to call the <code>list</code>
method on it:</p>
<pre><code>&gt; for $x.list -&gt; $v { say $v }
Earth
Wind
Fire
</code></pre>
<h2 class="title is-4">Array</h2>
<p>If we put square brackets around the values on the right-hand side, we
get an <code>Array</code></p>
<pre><code>&gt; $x = [&quot;Earth&quot;, &quot;Wind&quot;, &quot;Fire&quot;]
[Earth Wind Fire]
&gt; $x.^name
Array
</code></pre>
<p>Here too we need to call the <code>list</code> method in order to iterate over the elements:</p>
<pre><code>&gt; for $x.list -&gt; $i { say $i }
Earth
Wind
Fire
</code></pre>
<h2 class="title is-4">Forgetting the parentheses</h2>
<p>If you forget the parentheses, Raku will silently forget about all the values except the first one.</p>
<pre><code>&gt; $x = &quot;Earth&quot;, &quot;Wind&quot;, &quot;Fire&quot;
(Earth Wind Fire)
&gt; $x.^name
Str
&gt; $x
Earth
</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>The REPL is a nice place to experiment with features, but we have to learn a lot more about Raku to make it useful for us.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>First impression with Raku</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-08-22T22:00:01Z</updated>
    <pubDate>2020-08-22T22:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/raku-first-steps" />
    <id>https://code-maven.com/raku-first-steps</id>
    <content type="html"><![CDATA[<p>I think it is time I take a fresh look at <a href="https://www.raku.org/">Raku</a>.</p>
<p>I have some background with the language from several years ago, but I am sure it changed since then and in any case I'll try to newly explore it.</p>
<h2 class="title is-4">Using Docker</h2>
<p>I know Raku is rather new an I did not want to bother with installations, so I though I'll go the modern way and use <a href="/docker">Docker</a>.
For this to work first you need to <a href="https://www.docker.com/get-started">Download Docker Desktop</a>.</p>
<p>Then I can run the following:</p>
<pre><code>$ docker run --rm -it rakudo-star
</code></pre>
<p>This will download (for the first time when I run this) the rakudo-star image and then run it. The <code>--rm</code> tells Docker to
remove the container once I am done with it. <code>-it</code> means to enter interactive mode.</p>
<h2 class="title is-4">Interactive Hello World</h2>
<p>The interactive mode immediately lands us inside the Raku interactive shell (aka. REPL) using a single greater-than sign as the prompt.
There I can type in:</p>
<pre><code>&gt; say &quot;Hello World!&quot;
</code></pre>
<p>and also</p>
<pre><code>&gt; &quot;Hello World!&quot;.say
</code></pre>
<p>They both work.</p>
<p>Actually, because it is an interactive shell, it is enough to type in the string:</p>
<pre><code>&gt; &quot;Hello World!&quot;
</code></pre>
<h2 class="title is-4">dir</h2>
<p>I was not sure what to do next so I fell back to my Python background and typed ```dir</code>. (OK, I know that here I don't have to type in the parentheses for the function call to work.)</p>
<p>Actually I was surprised by the result:</p>
<pre><code>&gt; dir
(&quot;mnt&quot;.IO &quot;bin&quot;.IO &quot;proc&quot;.IO &quot;sbin&quot;.IO &quot;tmp&quot;.IO &quot;usr&quot;.IO &quot;media&quot;.IO &quot;lib&quot;.IO &quot;opt&quot;.IO &quot;srv&quot;.IO &quot;lib64&quot;.IO &quot;etc&quot;.IO &quot;root&quot;.IO &quot;home&quot;.IO &quot;var&quot;.IO &quot;sys&quot;.IO &quot;dev&quot;.IO &quot;boot&quot;.IO &quot;run&quot;.IO &quot;.dockerenv&quot;.IO)
</code></pre>
<p>This is the content of the root directory of the Docker container.</p>
<h2 class="title is-4">shell</h2>
<p>I am not sure what was I thinking but then I also tried to call <code>shell</code> and it worked!</p>
<pre><code>shell(&quot;ls -l&quot;)
</code></pre>
<h2 class="title is-4">help</h2>
<p>At this point I ran out ideas so I tried typing in <code>help</code></p>
<pre><code>===SORRY!=== Error while compiling:
Undeclared routine:
    help used at line 1
</code></pre>
<p>I guess there is no excuse. I'll have to find a tutorial and some documentation.</p>
<h2 class="title is-4">Version</h2>
<p>Then I quite the interactive shell by typing <code>exit</code>.</p>
<pre><code>$ docker run --rm rakudo-star raku -v
This is Rakudo version 2020.01 built on MoarVM version 2020.01.1
implementing Perl 6.d.
</code></pre>
<p>Hmm, that seems to be a bit old. I was under the impression that Rakudo Star is released every 3 months. I guess I was mistaken.</p>
<h2 class="title is-4">Hello World on the command line</h2>
<pre><code>$ docker run --rm rakudo-star raku -e 'say &quot;Hello World!&quot;'
</code></pre>
<h2 class="title is-4">Hello World in a file</h2>
<p>I've created a file called <b>hello_world.raku</b>:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/raku/hello_world.raku">examples/raku/hello_world.raku</a></strong></p>
<pre><code class="language-txt">use v6;

say &quot;Hello World&quot;;

&quot;Hello Raku&quot;.say;

</code></pre>
<p>Then ran it as:</p>
<pre><code>docker run --rm -v $(pwd):/opt rakudo-star raku /opt/hello_world.raku
</code></pre>
<p>The <code>-v $(pwd):/opt</code> parameter tells Docker to map the current directory on my own computer
to the <code>/opt</code> directory inside the Docker image. Then on the command line I passed in</p>
<pre><code>raku /opt/hello_world.raku
</code></pre>
<p>That will execute the given file and I got:</p>
<pre><code>Hello World
Hello Raku
</code></pre>
<p>Great, so things are working quite smoothly. It is time to dig out my old course material and see what still works and
what I need to improve.</p>
<p>If you are interested in Docker I have a <a href="/docker">Docker course</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Travis-CI: Why use Continuous Integration?</title>
    <summary type="html"><![CDATA[Continuous Integration helps you reduce the time you get feedback in case something is broken in the code you, or someone else on the team checked in the version control system.]]></summary>
    <updated>2020-08-14T09:30:01Z</updated>
    <pubDate>2020-08-14T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/travis-ci-why-use-continuous-integration" />
    <id>https://code-maven.com/travis-ci-why-use-continuous-integration</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/M3XXb4QafiU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Code Maven Pro</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-08-01T11:56:55Z</updated>
    <pubDate>2020-08-01T11:56:55Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/pro" />
    <id>https://code-maven.com/pro</id>
    <content type="html"><![CDATA[<p>The <b>Code Maven Pro</b> is a paid service where subscribers get exclusive access to a bunch of
articles and screencast.
See the full list in the <a href="/archive?tag=pro">archive</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How to contribute to Meta::CPAN</title>
    <summary type="html"><![CDATA[Video showing around and pointing to the information where you can find how to contribute to Meta::CPAN.]]></summary>
    <updated>2020-07-31T13:30:01Z</updated>
    <pubDate>2020-07-31T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/how-to-contribute-to-metacpan" />
    <id>https://code-maven.com/how-to-contribute-to-metacpan</id>
    <content type="html"><![CDATA[<p><a href="https://metacpan.org/">Meta::CPAN</a> is the location where you can read the documentation of all the 3rd-party Perl modules.</p>
<p>One of the most satisfying Open source contribution is to a site that live. Once your contribution is accepted and goes live
it will be immediatly be usde by millions of people.
I have a list of <a href="/live-web-site-with-editable-open-source-code">live web sites with Open Source code-base</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/Bzf5_VlObl0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How to sync Google calendar with an external calendar?</title>
    <summary type="html"><![CDATA[Sometimes an external calendar is changed but your Google calendar does not reflect the change. How to convince it to sync?]]></summary>
    <updated>2020-07-29T10:30:01Z</updated>
    <pubDate>2020-07-29T10:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/how-to-sync-google-calendar-with-external-calendar" />
    <id>https://code-maven.com/how-to-sync-google-calendar-with-external-calendar</id>
    <content type="html"><![CDATA[<p>TL;DR add  <b>?answer=42</b> to the end of the URL of your external calendar.</p>
<p>I use various services where I schedule meetings. For example I use <a href="https://www.italki.com/i/EFbbfc">italki</a>
to have Spanish classes with native speakers from Spain and Latin-America. (BTW It is awesome, try it!)</p>
<p>The offer a link that provides an <a href="https://en.wikipedia.org/wiki/ICalendar">ICS or iCal</a> with my own schedule.
The links looks like this:  <a href="https://www.italki.com/calendar/ASGSAGGFADS/ics">https://www.italki.com/calendar/ASGSAGGFADS/ics</a></p>
<p>I can go to my Google Calendar an under &quot;Other Calendars&quot; I can add it &quot;From URL&quot;.</p>
<p>Google will automatically sync from this external calendar and show the events on your Calendar.
You can even set the color so it will stand our from all of your other tasks. (I set it to red.)</p>
<p>The problem is that Google syncs the calendar on its own schedule and I have no control over the sync-ing
so often I scheduled a meeting but it took hour or maybe even days till it showed up in my Google calendar.</p>
<p>Recently it seemed to have totally stopped sync-ing. I think it happened after I have rescheduled one of my
Italki appointments.</p>
<p>As I cannot tell Google to sync I needed another way of triggering the update. But there is non.</p>
<p>I even tried to remove and add again the same calendar. It did not make a difference either.</p>
<p>It might have worked if I waited a few minutes after I removed the old calendar, but who has the patience for that.</p>
<p>So in the end I replace my URL with something that has a query parameter at the end. Anything could do I used this:</p>
<p><b>?cache=no20200729</b></p>
<p>just so it will remind me the date I set it. At another time I might need to change the value to trigger another new sync.</p>
<p>So the new URL looks like this:</p>
<p><b><a href="https://www.italki.com/calendar/ASGSAGGFADS/ics?cache=no20200729">https://www.italki.com/calendar/ASGSAGGFADS/ics?cache=no20200729</a></b></p>
<p>I got the new events immediately</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Services provided by Gabor Szabo at Code Maven</title>
    <summary type="html"><![CDATA[All the services provided by Gabor Szabo, author of the Code-Maven site]]></summary>
    <updated>2020-07-28T07:30:01Z</updated>
    <pubDate>2020-07-28T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/services" />
    <id>https://code-maven.com/services</id>
    <content type="html"><![CDATA[<p>I provide various services to improve the development process, aka. velocity of an engineering team.</p>
<p>The various teams at my clients have different needs. I can offer one or more of the following services.
Usually they all include a large amount of training. Either via formal <a href="/courses">courses</a> or
ad-hoc on the job training.</p>
<p>I can offer my servicaes on-site (as the situation allows) in Israel or on-line if we can match our working hours.</p>
<p>Spoken languages: English, Hebrew, Hungarian.</p>
<h2 class="title is-4">Introducing or improving Version Control (Git)</h2>
<p>One of the most basic things every development, QA, automation, and DevOps team needs is a good Version Control System (VCS).
Today the de-facto standard is Git, but you can use other systems as well.</p>
<p>Using a VCS properly can give certain superpowers to its users, for example the power to easily go back in time.
The possibility to experiment without fear.
The ease of reasoning about changes in the past.
A record of history.
Accountability.</p>
<p>However, if we don't set it up properly, if we don't have good procedures, if we don't invest enough time and practice in the VCS
then many people will feel it as a burden and some are even going to be afraid of it.</p>
<p>As far as I know many people who come out from the various hi-tech bootcamps and even university degrees lack the knowledge and the practice of a VCS.</p>
<p>In my experience many companies have teams that don't use any Version Control System or they could improved their development process a lot
by improving the way they use it.</p>
<ul>
<li>
<p>I can help setting up a Version Control System.</p>
</li>
<li>
<p>I can train the team members to use it properly.</p>
</li>
<li>
<p>Decide on a branching strategy that fits the team.</p>
</li>
<li>
<p>Provide on-going support to the team for the time when they encounter special cases.</p>
</li>
</ul>
<h2 class="title is-4">Introducing testing and test automation</h2>
<p>Many teams I've encountered lack any form of automated tests.
Having even a minimal test suite can increase the safety and velocity of the team by a lot.</p>
<p>By finding the problems sooner we can greatly reduce the time it needs to fix those problems and
the cost of fixing them. This is what many in the industry call &quot;left shift&quot;, that we move various
steps of verifications to earlier stages of the development process which is usually represented in an image
to be moving from left to right.</p>
<p>I can help the team to start writing unit, integration, and acceptance tests.
Various types of functional tests and what many people call regression tests.</p>
<p>Your actually programming language usually does not make a difference. For unit-testing you'd probably use
the same language but for higher level tests you might use some simpler language such as Python.</p>
<p>I have already helped teams with projects in Perl, Python, PHP, Java, C#, C, C++, JavaScript.
Do you use any of these or do you use some other language that will be interesting to tackle?</p>
<p>Sometimes I help the development teams, other times the QA team or a dedicated Automation team.</p>
<h2 class="title is-4">Setting up Continuous Integration (CI)</h2>
<p>Even if you only have a single automated test it is already worth to set up a Continuous Integration system.</p>
<p>I can help you on-premise systems such as Jenkins, TeamCity, Bamboo, or cloud-based CI services such as Travis-CI, or Circle-CI.</p>
<p>You might also want to use the CI system that comes with your Git servers such as GitLab or Bitbucket.</p>
<p>All of these services help you with integration with various 3rd party services and standardized tools, but you still need
a lot of customization to support your needs.</p>
<h2 class="title is-4">Standardized development, testing, and production environments</h2>
<p>In order to have a good CI system we'll have to have standardized development, testing, and production environments.</p>
<p>In many organizations they way environments are set up isn't well documented and it travels from mouth-to-mouth.</p>
<p>This wastes a lot of time and creates a lot of frustration.</p>
<p>It is also one of the biggest obstacles to set up a Continuous Integration system.</p>
<p>The first step here is to collect the requirements to set up a development and testing environment.
Document it. First in free-text documents, then in the standard way of your programming language for
describing requirements.</p>
<p>Then automate the creation of the environments. Probably with one of the <b>Configuration Management</b>
tools such as Ansible, Puppet, or Chef.</p>
<p>Another step would be to create Docker Containers.</p>
<h2 class="title is-4">Containerization - Docker</h2>
<p>In order to make it easy to set up a development environment and a CI system we might opt to create Docker containers
for various parts of your product or service.</p>
<p>I can help creating the first Docker images and teach your team how to maintain and improve them.</p>
<p>First we will go through the steps outlined above to create a standardized environment and create a Docker image from that.</p>
<h2 class="title is-4">Cloud systems</h2>
<p>Many companies are moving some or all of their systems to the &quot;cloud&quot;. This usually means one of the big ones:
Amazon AWS, or Google GCP, or Microsoft Azure, but it might be one of the others like Linode or Digital Ocean.</p>
<p>The first step usually is to rent Virtual Private Servers (VPS-es) and moving the application there.
That involves configuration of networks, security, load balancers etc.</p>
<p>Then next step is when the company starts to embrace various higher-level services of the cloud providers.
e.g. managed databases and the so-called serverless services. (Amazon Lambda, Google functions, etc.)</p>
<p>I can help with some of these step, but they can be valuable only if the company already has a good Version Control Strategy,
good testing strategy and standardized development and testing environment. Without that moving to the cloud will
just create more difficulties without solving any of the problems.</p>
<h2 class="title is-4">Continuous Delivery or Continuous Deployment (CD)</h2>
<p>CD refers to the possibility to make the changes in the code-base available to testers or even to end-users very frequently.</p>
<p>Basically it means you make production releases very frequently.</p>
<p>In the extreme cases like Amazon, this means deploying some new part of the system at a sub-second interval.
(Yes, they change their system more than once every second. I know it is crazy.)
Smaller and saner organizations (eg. GitLab) have 300 deployments a day. That is every 5 minutes.</p>
<p>For this to work you'll have to have a working CI system you can trust and probably you'll also need to have cloud based system.
Though it is also possible to have CD systems for in-house projects that use only on-premise systems for which there is no need
for any cloud component.</p>
<p>There are various strategies to mitigate the risks involved with such frequent deployments. The general consensus is that
once you have implemented to strategies your risk while using CD is much lower than what you had earlier when you
released/deployed/delivered once every few months.</p>
<p>I can help with this process, but remember this depends on all the other pieces working.</p>
<p>However, if that is your goal then the best strategy is to set up the whole system from version control
till deployment as soon as possible for a very small part of the system and then enhance it step-by-step
continuously improving your process.</p>
<h2 class="title is-4">Training</h2>
<p>In every case my work has the most value if during or after the implementation I can pass all the knowledge to
the in-house teams. This can be done in formal <a href="/courses">training courses</a>, with hands-on experience,
on-the job training, pair-programming, or ongoing support.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Courses</title>
    <summary type="html"><![CDATA[List of training courses available on the Code-Maven site.]]></summary>
    <updated>2020-07-25T11:30:01Z</updated>
    <pubDate>2020-07-25T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/courses" />
    <id>https://code-maven.com/courses</id>
    <content type="html"><![CDATA[<p>The following courses can be taught either on-site in your offices or on-line via Zoom or other technology.
Contact <a href="https://szabgab.com/contact.html">Gabor Szabo</a> for more details.</p>
<p>The courses can be offered in English, Hebrew, or Hungarian.</p>
<!--
## Online courses

[Online courses](https://courses.code-maven.com/)
-->
<h2 class="title is-4">All the courses</h2>
<p>(in ABC order)</p>
<ul>
<li>
<p><a href="/courses/bash-scripting">Bash Scripting</a></p>
</li>
<li>
<p><a href="/courses/delivery">Delivery</a></p>
</li>
<li>
<p><a href="/courses/docker">Docker</a> containerization</p>
</li>
<li>
<p><a href="/courses/git">Git</a> version control</p>
</li>
<li>
<p><a href="/courses/advanced-git">Git (advanced)</a></p>
</li>
<li>
<p><a href="/courses/github">GitHub</a> - cloud-based version control</p>
</li>
<li>
<p><a href="/courses/google-cloud">Google Cloud</a></p>
</li>
<li>
<p><a href="/courses/jenkins">Jenkins</a> and Groovy for on-premise Continuous Integration</p>
</li>
<li>
<p><a href="/courses/linux-for-power-users">Linux for Power users</a> (Using the Linux shell)</p>
</li>
<li>
<p><a href="/courses/linux-in-virtual-environment">Linux in Virtual Environment</a></p>
</li>
<li>
<p><a href="/courses/perl">Perl programming</a></p>
</li>
<li>
<p><a href="/courses/perl">Perl Test Automation</a></p>
</li>
<li>
<p><a href="/courses/bootcamp-for-scientists">Programming Bootcamp for Scientists</a></p>
</li>
<li>
<p><a href="/courses/python-programming">Python programming (beginner level)</a></p>
</li>
<li>
<p><a href="/courses/advanced-python">Python programming (advanced level)</a></p>
</li>
<li>
<p><a href="/courses/testing-python">Python Test Automation</a></p>
</li>
<li>
<p><a href="/courses/regexes">Regular Expressions</a></p>
</li>
<li>
<p><a href="/courses/travis-ci">Travis-CI</a> for cloud based Continuous Integration</p>
</li>
</ul>
<h2 class="title is-4">Courses by audience</h2>
<h3 class="title is-5">DevOps Engineers</h3>
<p>These course are designed to fit anyone in Development, Operations, or in DevOps.</p>
<ul>
<li><a href="/courses/docker">Docker</a> containerization</li>
<li><a href="/courses/git">Git</a> version control</li>
<li><a href="/courses/advanced-git">Git (advanced)</a></li>
<li><a href="/courses/github">GitHub</a> - cloud-based version control</li>
<li><a href="/courses/linux-for-power-users">Linux for Power users</a> (Using the Linux shell)</li>
<li><a href="/courses/bash-scripting">Bash Scripting</a></li>
<li><a href="/courses/google-cloud">Google Cloud</a></li>
<li><a href="/courses/jenkins">Jenkins</a> and Groovy for on-premise Continuous Integration</li>
<li><a href="/courses/travis-ci">Travis-CI</a> for cloud based Continuous Integration</li>
<li><a href="/courses/delivery">Delivery</a></li>
<li><a href="/courses/regexes">Regular Expressions</a></li>
</ul>
<h3 class="title is-5">Test Automation</h3>
* [Git](/courses/git) version control
* [Git (advanced)](/courses/advanced-git)
* [GitHub](/courses/github) - cloud-based version control
* [Python programming (beginner level)](/courses/python-programming)
* [Python Test Automation](/courses/testing-python)
* [Perl Test Automation](/courses/perl)
* [Jenkins](/courses/jenkins) and Groovy for on-premise Continuous Integration
* [Travis-CI](/courses/travis-ci) for cloud based Continuous Integration
<h2 class="title is-4">Linux Users</h2>
<ul>
<li><a href="/courses/linux-in-virtual-environment">Linux in Virtual Environment</a></li>
<li><a href="/courses/linux-for-power-users">Linux for Power users</a> (Using the Linux shell)</li>
</ul>
<h3 class="title is-5">Python programmers</h3>
* [Python programming (beginner level)](/courses/python-programming)
* [Python programming (advanced level)](/courses/advanced-python)
* [Testing in Python](/courses/testing-python)
* [Git](/courses/git) version control
* [Git (advanced)](/courses/advanced-git)
* [GitHub](/courses/github) - cloud-based version control
* [Docker](/courses/docker) containerization
* [Regular Expressions](/courses/regexes)
<h3 class="title is-5">Perl programmers</h3>
* [Perl programming](/courses/perl)
* [Git](/courses/git) version control
* [Git (advanced)](/courses/advanced-git)
* [GitHub](/courses/github) - cloud-based version control
* [Regular Expressions](/courses/regexes)
<h2 class="title is-4">Scientists, Science students</h2>
<ul>
<li>
<p><a href="/courses/bootcamp-for-scientists">Programming Bootcamp for Scientists</a></p>
</li>
</ul>
<h2 class="title is-4">Customized courses</h2>
<p>In addition to the above course we can also create customized courses. For example here is one as an example:</p>
<ul>
<li><a href="/courses/custom-advanced-python-20191016">Customized Advanced Python course</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Mobile swipe left, swipe right of HTML pages using vanilla JavaScript</title>
    <summary type="html"><![CDATA[Using Vanilla JavaScript recognize when the mobile phone user swipes leftor swipes right on yout page.]]></summary>
    <updated>2020-07-23T16:30:01Z</updated>
    <pubDate>2020-07-23T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/swipe-left-right-vanilla-javascript" />
    <id>https://code-maven.com/swipe-left-right-vanilla-javascript</id>
    <content type="html"><![CDATA[<p>At one point I wanted to add this feature to my <a href="/slides">slides</a> but I later remove it as some of the pages
needed to have horizontal scrolling and this code did not work well together with that. Maybe the only thing I need
is to adjust some of the parameters. So check it out maybe by the time you read this, the swiping on my slides might work.</p>
<p>Anyway, if you have some HTML pages you might want to allow your users to move between pages, using JavaScript, but you don't
want to rely any of the JavaScript libraries.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/swipe_vanilla.js">examples/javascript/swipe_vanilla.js</a></strong></p>
<pre><code class="language-js">(function() {
    var min_horizontal_move = 30;
    var max_vertical_move = 30;
    var within_ms = 1000;

    var start_xPos;
    var start_yPos;
    var start_time;
    function touch_start(event) {
        start_xPos = event.touches[0].pageX;
        start_yPos = event.touches[0].pageY;
        start_time = new Date();
    }


    function touch_end(event) {
        var end_xPos = event.changedTouches[0].pageX;
        var end_yPos = event.changedTouches[0].pageY;
        var end_time = new Date();
        let move_x = end_xPos - start_xPos;
        let move_y = end_yPos - start_yPos;
        let elapsed_time = end_time - start_time;
        if (Math.abs(move_x) &gt; min_horizontal_move &amp;&amp; Math.abs(move_y) &lt; max_vertical_move &amp;&amp; elapsed_time &lt; within_ms) {
            if (move_x &lt; 0) {
                //alert(&quot;left&quot;);
            } else {
                //alert(&quot;right&quot;);
            }
        }
    }

    var content = document.getElementById(&quot;content&quot;);
    content.addEventListener('touchstart', touch_start);
    content.addEventListener('touchend', touch_end);

})();


</code></pre>
<ol>
<li>Wrap the whole area where you'd like the swipe to work in a div with an ID=content.</li>
<li>Replace the two commented-out alert calls by function calls implementing the left-swipe and the right swipe actions.</li>
<li>Adjust the 3 numbers to your liking.</li>
<li>Done.</li>
</ol>
<pre><code>    var min_horizontal_move = 30;
    var max_vertical_move = 30;
    var within_ms = 1000;
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Invitation</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-07-22T13:30:01Z</updated>
    <pubDate>2020-07-22T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/invitation" />
    <id>https://code-maven.com/invitation</id>
    <content type="html"><![CDATA[<p>On this site we cover a lot of different tech-related topic.</p>
<p>Some are <a href="/python">Python</a>-related, other cover other programming language.</p>
<p>A large part is <a href="/devops-invitation">DevOps-related</a>.</p>
<p>We also have video recordings, for example the <a href="/cmos">CMOS</a> and the <a href="/job-search">job-search</a> related series.</p>
<p>Some of our content is only <a href="https://code-maven.com/archive?tag=pro">available to paying subscribers</a>, but some of those
are always available to <a href="https://code-maven.com/archive?tag=preview">preview</a>.
You only need to <a href="/pm/register">register</a> on the site to get access to the videos in preview mode.</p>
<p>If you are not interested registering here you can get updates from us via our <a href="/linkedin">generic LinkedIn page</a>
or one of the technology specific ones: <a href="https://linkedin.com/showcase/code-maven-devops/">DevOps</a>,
<a href="https://linkedin.com/showcase/code-maven-python/">Python</a>, and <a href="https://linkedin.com/showcase/code-maven-golang/">Golang</a>.</p>
<p>On each one of those you'll get tips and examples 3-5 times a week.</p>
<p>You can also follow out <a href="/youtube">YouTube channel</a> where we have a mix of technical videos and webinar recordings.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>DevOps Invitation</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-07-22T11:30:01Z</updated>
    <pubDate>2020-07-22T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/devops-invitation" />
    <id>https://code-maven.com/devops-invitation</id>
    <content type="html"><![CDATA[<p>On this site we cover a number of DevOps-related topics.
For example <a href="/docker">Docker</a>, <a href="/jenkins">Jenkins</a>
<a href="/ansible">Ansible</a>, and <a href="/git">Git</a>. Just to name a few.</p>
<p>There are also pages about <a href="/groovy">Groovy</a>, the language used in Jenkins.</p>
<p>You can find other, more generic topics such as <a href="/linux">Linux</a>, <a href="/shell">Bash</a>, and <a href="/python">Python</a>.</p>
<p>We also have video recordings, for example the one with <a href="/site-reliability-engineer-at-adobe-rachael-bates">Rachael Bates, SRE at Adobe</a>.</p>
<p>Some of our content is only <a href="https://code-maven.com/archive?tag=pro">available to paying subscribers</a>, but some of those
are always available to <a href="https://code-maven.com/archive?tag=preview">preview</a>.
You only need to <a href="/pm/register">register</a> on the site to get access to the videos in preview mode.</p>
<p>If you are not interested registering here you can get DevOps-related tips 3-5 times a week by following our
<a href="https://linkedin.com/showcase/code-maven-devops/">DevOps specific LinkedIn page</a>
and/or our <a href="/youtube">YouTube channel</a> where we have a mix of technical videos and webinar recordings.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Open Source Companies</title>
    <summary type="html"><![CDATA[Companies with significant code-base they have release under some Open Source license.]]></summary>
    <updated>2020-07-16T23:30:01Z</updated>
    <pubDate>2020-07-16T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/open-source-companies" />
    <id>https://code-maven.com/open-source-companies</id>
    <content type="html"><![CDATA[<p>One way to get recruited by a company is to contribute to their Open Source code-base before you even apply.</p>
<p>On this page you'll find a bunch of companies with some information about their Open Source projects.</p>
<p>In general you could easily find projects for most companies.</p>
<h2 class="title is-4">Open Source Companies</h2>
<p>I am not really sure what <b>Open Source Companies</b> are.</p>
<p>Are these companies that have no propriatery code at all?
I dobut there are many companies without any propriatery code, but I'd love to know about them.</p>
<p>Companies that build some Open Source project that is the core part of their business?</p>
<p>Companies with a significant code-base they have released under some Open Source license?</p>
<p>Companies that contribute to Open Source?</p>
<p>Companies where the CEO know how to spell Open Source?</p>
<h2 class="title is-4">Companies</h2>
<p><a href="https://twitter.com/">Twitter</a> has a bunch of Open Source projects in <a href="https://github.com/twitter">GitHub</a>.
As I see many of the projects use Scala, Rust, but there are a few in Python and in Golang as well. I also saw Ruby, JavaScript, Objective-C and a few more
language.</p>
<p>In my mind <a href="https://www.adobe.com/">Adobe</a> was this super-proprietary company, so I was surprised to see it as one of the companies with the largest number of
Open Source projects.  As of today they have almost 500 repositories on <a href="https://github.com/adobe">GitHub</a>. Though I am not sure how important these projects are.
I see a lot of projects in JavaScript, and some in other languages such as Java, TypeScript, Objective-C, Python, Dart.</p>
<hr />
<p><a href="https://about.gitlab.com/">GitLab</a>  <a href="https://github.com/gitlabhq/gitlabhq">source code</a></p>
<p><a href="https://automattic.com/">Automattic</a> the creator of Wordpress and several other Open Source projects.
<a href="https://github.com/Automattic">Automattic on GitHub</a>, the <a href="https://wordpress.org/download/source/">source code of Wordpress</a>.</p>
<p><a href="https://www.mongodb.com/">MongoDB</a> <a href="https://github.com/mongodb/mongo">GitHub</a>.</p>
<p><a href="https://www.blackducksoftware.com/">Black Duck Software</a> <a href="https://github.com/blackducksoftware/">GitHub</a>.</p>
<p><a href="https://duckduckgo.com/">DuckDuckGo</a> the privacy oriented search engine has a separate site for <a href="https://duckduckhack.com/">Duck Duck hacking</a>
and 89 repositories on <a href="https://github.com/duckduckgo">GitHub</a>. Among the languages I can see Perl, Python, JavaScript, and Swift, just to name a few.</p>
<p><a href="https://www.grantstreet.com/">Grantstreet Group</a> deals with Tax collection, auction, and e-payment solutions. Not something I'd associate with Open Source,
but they too have a <a href="https://github.com/GrantStreetGroup">GitHub</a> account with several repositories in it. The majority of the code is written in Perl, but
you can also find Go, JavaScript, Python, and even CoffeeScript.</p>
<p><a href="https://www.booking.com/">Booking.com</a> the hotel-reservation site also has a few projects on <a href="https://github.com/bookingcom">GitHub</a>. The languages are
Go, Perl, Java, and C#.</p>
<p><a href="https://www.maxmind.com/en/home">MaxMind.com</a> has some projects on <a href="https://github.com/maxmind">GitHub</a>. The languages are
Node.js, Python, Ruby, Java, Go, PHP, .NET, C and Perl.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>What does an SRE do at Adobe? - Our guest is Rachael Bates</title>
    <summary type="html"><![CDATA[A Site Reliability Engineer (SRE) helps the organization to maintain its services by helping the development teams work in a way that better suits operations as well.]]></summary>
    <updated>2020-07-14T10:30:01Z</updated>
    <pubDate>2020-07-14T10:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/site-reliability-engineer-at-adobe-rachael-bates" />
    <id>https://code-maven.com/site-reliability-engineer-at-adobe-rachael-bates</id>
    <content type="html"><![CDATA[<p>In this webinar we talked to <a href="https://www.linkedin.com/in/rachaelmbates/">Rachael Bates</a>
who is a Site Reliability Engineer (SRE) at <a href="https://www.adobe.com/">Adobe</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/Hi1Gt6Q94yA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>I had tons of questions. For example.</p>
<ul>
<li>What is an SRE (Site Reliability Engineer)?</li>
<li>What are your responsibilities?</li>
<li>What is your daily job?</li>
<li>What tools do you use?</li>
<li>Do you work remotely? How do you handle it? What are the new challenges? How do you deal with them?</li>
<li>Can you tell me about a serious issue you encountered? How did you handle it?</li>
</ul>
<p>and also</p>
<ul>
<li>
<p>How can one become an SRE?</p>
</li>
<li>
<p>What should I learn for that, how can I get practice?</p>
</li>
<li>
<p><a href="https://www.linkedin.com/in/rachaelmbates/">Rachael Bates</a></p>
</li>
<li>
<p><a href="/youtube">YouTube channel</a></p>
</li>
<li>
<p><a href="/linkedin">LinkedIn page</a></p>
</li>
<li>
<p><a href="https://linkedin.com/showcase/code-maven-devops/">LinkedIn DevOps page</a></p>
</li>
</ul>
<h2 class="title is-4">Resources</h2>
<p>Rachael was so kind and shared her resources, so in her words:</p>
<p>I feel that all of these topics have been crucial to my success.</p>
<h2 class="title is-4">Resume</h2>
<p>Writing a concise resume will put your best foot forward when applying for a new position:
<a href="https://www.freecodecamp.org/news/writing-a-killer-software-engineering-resume-b11c91ef699d/">Writing a killer software engineering resume</a>.</p>
<h2 class="title is-4">Soft Skills</h2>
<p>Often in the IT industry you don't usually hear about people working on their soft skills,
but if you want to better your chances at success and landing the job that you want,
investing in learning better communication skills is an invaluable tool.
This is a book I've read and enjoyed but there are some youtube videos on it that summarize nicely as well:
<a href="https://www.amazon.com/How-Talk-Anyone-Success-Relationships-ebook/dp/B000SEI4V0">How to talk Anyone</a></p>
<p>Additionally developing charisma will help you succeed.
Here's the book that I read to help develop that skill but again there are youtube videos summarizing the book that you can get some helpful advice from:
<a href="https://www.amazon.com/Charisma-Myth-Science-Personal-Magnetism/dp/1591845947">Charisma Myth Science Personal Magnetism</a>.</p>
<h2 class="title is-4">Python</h2>
<p>I started learning Python by working through this book but there are many resources online for learning the basics to python including helpful tutorials on youtube:
<a href="https://www.amazon.com/Python-Crash-Course-Hands-Project-Based/dp/1593276036">Python Crash Course Hands Project Based</a>.</p>
<p>I have also used this course through Udemy that I purchased for $10 during a new year's sale (they will often do sales throughout the year so keep an eye on them to buy them at a discounted price):
<a href="https://www.udemy.com/course/complete-python-bootcamp/">Complete Python Bootcamp</a>.</p>
<p>After I felt more comfortable writing in Python I read this book which helped me to write cleaner and better code:
<a href="https://www.amazon.com/Effective-Python-Specific-Software-Development/dp/0134853989">Effective Python Specific Software Development</a>.</p>
<p>A gauge that I've used to see what areas I need more studying in is by testing my knowledge using Plural Sight's IQ test.
At first with Python I was testing in the intermediate range but with practice and more study I eventually made it to the expert tier:
<a href="https://www.pluralsight.com/product/skill-iq">Skill IQ</a>.</p>
<h2 class="title is-4">Bash</h2>
<p>Getting familiar with the terminal and bash scripting will help you with automating manual tasks. Here are a couple of tools to get you started:</p>
<ul>
<li>
<p><a href="https://www.codecademy.com/courses/learn-the-command-line/lessons/learn-bash-scripting/">Learn Bash Scripting</a>.</p>
</li>
<li>
<p><a href="https://www.bash.academy/">Bash Academy</a></p>
</li>
<li>
<p><a href="https://www.oreilly.com/library/view/learning-the-bash/0596009658/">Learning the Bash</a></p>
</li>
</ul>
<h2 class="title is-4">Linux</h2>
<p>It's necessary to understand the linux boot order to successfully troubleshoot why a server may not be coming back online or if you are having issues when OS'ing new servers.
This is a basic guide to get you started:
<a href="https://www.freecodecamp.org/news/the-linux-booting-process-6-steps-described-in-detail/">The Linux Booting Process: 6 steps described in detail</a>.
However I found that this book was what helped me go from a beginner to intermediate level for understanding the boot process and learning about other fundamental practices for devops.
It is a very quick read; it took me about 6 hours to go through the entire book so I highly suggest it:
<a href="https://www.oreilly.com/library/view/devops-troubleshooting-linux/9780133035513/">DevOps Troubleshooting Linux</a>.</p>
<h2 class="title is-4">Networking</h2>
<p>This is niche on its own but you will need a basic understanding of linux networking concepts such as MAC addresses,
subnetting and IP Addressing, DHCP, DNS, and network interface bonding.
This link has a good summary of most of these topics in Chapter 3 and would be a good starting point, but again you'll find many youtube tutorials covering these topics if you want to learn more:
<a href="https://www.actualtechmedia.com/wp-content/uploads/2017/12/CUMULUS-NETWORKS-Linux101.pdf">Cumulus Networks Linux 101 (pdf)</a>.</p>
<h2 class="title is-4">Last Words of Advice</h2>
<p>When I'm learning any new languages I find it difficult to just read a book to learn anything.
I find that the most useful practice is I will read a chapter or so then think of an exercise that I can do to apply the knowledge that I learned.
Or I will just think of a task that I want to automate and start working through the solution, searching online for the syntax to get me from point A to point B.</p>
<p>As with learning anything, studying and practicing a little bit every day will really add up in the long run.
Sometimes I feel like I can study for an hour or more, but most days I'm pretty tired after work but will still do about 10 minutes of reading.
Consistency is key with developing any new habits.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins pipeline: add badges</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-07-03T18:40:01Z</updated>
    <pubDate>2020-07-03T18:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-add-badges" />
    <id>https://code-maven.com/jenkins-pipeline-add-badges</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Add badges</h2>
<p>For the manager object to exists we need to install the <a href="https://wiki.jenkins.io/display/JENKINS/Groovy+Postbuild+Plugin">Groovy Postbuild Plugin</a></p>
<p><a href="https://jenkins.io/doc/pipeline/steps/badge/">badge</a></p>
<pre><code>   manager.addBadge(&quot;error.gif&quot;, &quot;Failed build&quot;)
   manager.addBadge(&quot;star-gold.gif&quot;, &quot;Successful build&quot;)
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins pipeline: List agents by name or by label</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-07-03T18:00:01Z</updated>
    <pubDate>2020-07-03T18:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-list-agents-by-name-or-by-label" />
    <id>https://code-maven.com/jenkins-pipeline-list-agents-by-name-or-by-label</id>
    <content type="html"><![CDATA[<h2 class="title is-4">List agents by name and by label</h2>
<pre><code>def jenkins = Jenkins.instance
def computers = jenkins.computers
computers.each {
   //  println &quot;${it.displayName} ${it.hostName}&quot;
}

def labels = jenkins.getLabels()
labels.each {
   println &quot;${it.displayName}&quot;
}
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins pipeline: interactive input during process</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-07-03T17:30:01Z</updated>
    <pubDate>2020-07-03T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-interactive-input-during-process" />
    <id>https://code-maven.com/jenkins-pipeline-interactive-input-during-process</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Input during the process</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/input.jenkinsfile">examples/jenkins/input.jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent { label 'master' }
   stages {
       stage('build') {
           steps {
               echo &quot;Hello World!&quot;
               //input(&quot;Continue?&quot;)
               echo &quot;OK&quot;
               //input(
               //    message: 'Was this successful?', parameters: [
               //   [$class: 'BooleanParameterDefinition', defaultValue: true, description: '',
name: 'Please confirm you agree with this']
               //])

       /*
               script {
                   res = input(
                       message: 'Was this successful?', parameters: [
                       [$class: 'BooleanParameterDefinition', defaultValue: false, description:
'', name: 'Apple'],
                       [$class: 'BooleanParameterDefinition', defaultValue: false, description:
'', name: 'Banana']
                   ])
                                      print(res)
               }
*/
               script {
                   values = ['Apple', 'Banana', 'Peach']
                   parameters = []
                   values.each {
                       echo it
                       parameters.add( [$class: 'BooleanParameterDefinition', defaultValue:
false, description: '', name: it ] )
                   }

                   res = input(
                       message: 'Was this successful?', parameters: parameters
                   )
                                                         print(res)
               }


               //                input(
//                    message: 'What now?', parameters: [
//                        [$class: 'AppDetectorParamaterDefinition')
//                ])
                                  //echo result
                              // python scripts/aws_instances.py --what selftest --command start
           }
       }
   }
}


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins pipeline: Get previous build status - getPreviousBuild</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-07-03T17:00:01Z</updated>
    <pubDate>2020-07-03T17:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-get-previous-build-status" />
    <id>https://code-maven.com/jenkins-pipeline-get-previous-build-status</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Jenkins get previous build status</h2>
<pre><code>println(currentBuild.getPreviousBuild())
println(currentBuild.getPreviousBuild().result)
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline: Collect exit code from external commands</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-07-03T13:30:01Z</updated>
    <pubDate>2020-07-03T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-collect-exit-code-from-external-commands" />
    <id>https://code-maven.com/jenkins-pipeline-collect-exit-code-from-external-commands</id>
    <content type="html"><![CDATA[<p>Instead of killing the whole job on a single failure we can capture the exit code of external programs,
collect them and report at the end if one of them failed.</p>
<h2 class="title is-4">Collect exit code of commands</h2>
<pre><code>def commands = [&quot;xyz&quot;, &quot;abc&quot;, &quot;pwd&quot;]
def errors = ''
commands.each {
    def res = sh(script: it, returnStatus: true)
    println(&quot;cmd: $it res $res&quot;)
    if (res !=0 ) {
        errors += &quot; $it&quot;
    }
}
//if (params.expected == 'Success') {
//    sh &quot;pwd&quot;
//} else {
//    sh &quot;xyz&quot;
//}
if (errors) {
    error(errors)
}

</code></pre>
<p>{JENKINS+_URL}/pipeline-syntax/globals</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/experiment.jenkinsfile">examples/jenkins/experiment.jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent { label 'master' }
   parameters {
      choice(choices: ['Success', 'Failure'], description:  'Expected status', name: 'expected')
   }
   stages {
       stage('build') {
           steps {
               echo &quot;Hello World!&quot;
               sh &quot;pwd&quot;
               sh &quot;printenv | sort&quot;
               println(&quot;Number: ${currentBuild.number}&quot;)
               println(&quot;Result: ${currentBuild.result}&quot;)
               println(&quot;Display name: ${currentBuild.displayName}&quot;)
               println(&quot;Expected: ${params.expected}&quot;)
               script {
                   //manager.addShortText(&quot;Foo Bar ${params.expected}&quot;)
                   //manager.addShortText(&quot;\nSome text&quot;, &quot;black&quot;, &quot;yellow&quot;, &quot;0px&quot;, &quot;white&quot;)
                   //currentBuild.displayName = &quot;hello&quot;
                   //currentBuild.description = &quot;hello this is going to be a long line and I don't know what will happen now\nworld\nhow\nare\nyou&quot;
                   def description = &quot;&quot;
                   description = &quot;First\n&quot;
                   description += &quot;Second\n&quot;
                   description += &quot;Third\n&quot;
                   description += &quot;Fourth\n&quot;
                   description += &quot;Fifth\n&quot;
                   description += &quot;Sixth\n&quot;
                   currentBuild.description = &quot;${description}&quot;
                                  //manager.addBadge(&quot;star-gold.gif&quot;, &quot;Successful build&quot;)
                   def commands = [&quot;xyz&quot;, &quot;abc&quot;, &quot;pwd&quot;]
                   def errors = ''
                   commands.each {
                       def res = sh(script: it, returnStatus: true)
                       println(&quot;cmd: $it res $res&quot;)
                       if (res !=0 ) {
                           errors += &quot; $it&quot;
                       }
                   }

                   //if (params.expected == 'Success') {
                   //    sh &quot;pwd&quot;
                   //} else {
                   //    sh &quot;xyz&quot;
                   //}
                   if (errors) {
                       error(errors)
                   }
                                  }
           }
       }
   }
   post {
       always {
           echo &quot;post always&quot;
           println(&quot;Number: ${currentBuild.number}&quot;)
           println(&quot;Result: ${currentBuild.result}&quot;)
           println(&quot;Display name: ${currentBuild.displayName}&quot;)
           script {
               text = &quot;Result: ${currentBuild.result}&quot;
           }
           println('----------')
           println(currentBuild.getPreviousBuild())
           println(currentBuild.getPreviousBuild().result)
           println('----------')
       }
       success {
           echo &quot;post success&quot;
           echo text
       }
       failure {
           echo &quot;post failure&quot;
       }
   }
}


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins pipeline: parallel stages</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-07-03T12:30:01Z</updated>
    <pubDate>2020-07-03T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-parallel-stages" />
    <id>https://code-maven.com/jenkins-pipeline-parallel-stages</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Parallel stages</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/parallel.Jenkinsfile">examples/jenkins/parallel.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent { label 'master' }
   stages {
       stage('before') {
           steps {
               println(&quot;before&quot;)
           }
       }
       stage('para') {
           parallel {
               stage('apple') {
                   steps {
                       println(&quot;apple 1&quot;)
                       sleep(20 * Math.random())
                       println(&quot;apple 2&quot;)
                   }
               }
               stage('banana') {
                   steps {
                       println(&quot;banana 1&quot;)
                       sleep(20 * Math.random())
                       println(&quot;banana 2&quot;)
                   }
               }
               stage('peach') {
                   steps {
                       println(&quot;peach 1&quot;)
                       sleep(20 * Math.random())
                       println(&quot;peach 2&quot;)
                   }
               }
           }
       }
       stage('after') {
           steps {
               println(&quot;after&quot;)
           }
       }
   }
}


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ready-made downloadable and deployable Open Source web applications</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-06-27T13:30:01Z</updated>
    <pubDate>2020-06-27T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ready-made-downloadable-and-deployable-open-source-web-applications" />
    <id>https://code-maven.com/ready-made-downloadable-and-deployable-open-source-web-applications</id>
    <content type="html"><![CDATA[<p>Contribution to Open Source web application is an excellent way to learn about technology.</p>
<p>See also: <a href="/live-web-site-with-editable-open-source-code">Live web sites with Open Source code</a>.</p>
<ul>
<li><a href="https://wordpress.org/">Wordpress</a>  written in PHP</li>
<li><a href="https://www.mediawiki.org/">MediaWiki</a> would be just another wiki among the thousand others, but Wikipedia runs on it so contributing to it will have a huge impact. It is written in PHP and uses MySQL as the database behind it. There is a separate page describing <a href="https://www.mediawiki.org/wiki/How_to_contribute">how to contribute</a>.</li>
<li><a href="https://mattermost.com/">Mattermost</a> is a messaging system, an Open Source Slack, if you wish. The back-end is written in Go, but it also has a mobile and a web client, so you have plenty of opportunities to learn and to get involved.</li>
<li><a href="https://tt-rss.org/">Tiny RSS</a> an rss and atom feed collector with a web interface. It is written in PHP and uses PostgreSQL as the database behind it.</li>
<li><a href="https://bitwarden.com/">Bitwarden</a></li>
<li><a href="https://www.redmine.org/">Redmine</a> is a web-based project management application. It is written using the Ruby on Rails framework, it is cross-platform and cross-database. The only big drawback for contribution is that they are still using Subversion for version control.</li>
<li><a href="https://www.jenkins.io/">Jenkins</a> is a web-based automation system often used to set up CI/CD pipelines. It is one of the commonly used systems in case you need an on-premise solution or for some other reason you cannot use the cloud-based CI services. It is written in Java and they have a page on how to <a href="https://www.jenkins.io/participate/">participate</a>.</li>
<li><a href="http://intramine.info/">IntraMine</a> indexer and search tool for all the files you have in your organization. Written in Perl. Source on <a href="https://github.com/KLB7/IntraMine">GitHub</a></li>
</ul>
<p>Maybe <a href="https://en.wikipedia.org/wiki/List_of_free_and_open-source_web_applications">this list</a> can help.</p>
<!--
   <li><a href=""></a></li>
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Live web sites with editable Open Source source code</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-06-27T12:30:01Z</updated>
    <pubDate>2020-06-27T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/live-web-site-with-editable-open-source-code" />
    <id>https://code-maven.com/live-web-site-with-editable-open-source-code</id>
    <content type="html"><![CDATA[<p>I strongly believe that one of the best ways to gain experience in hi-tech - even without already working in the field -
is to particpate in Open Source projects. There are project in almost every field and you can practice almost every
type of job in these projects. Not only programmer, but QA, tester, documentation writer, designer, project manager,
support person etc.</p>
<p>I have already created a list of <a href="/open-source-desktop-applications">Open Source Desktop applications</a>,
and there is also the beginning of the <a href="/open-source-web-applications">Open Source Web application frameworks</a>
and the <strong>Ready-made downloadable and deployable Open Source web applications</strong>
so this time let's see the projects where you can have a direct impact on a live web site.</p>
<h2 class="title is-4">Live web sites and web applications with editable source code</h2>
<p>What I mean here is that the source of the web site is available on some public version control system so anyone can contribute to it.
It does not necessarily need to be reusable. In many cases the web sites are very specific and thus their source code is really only
relevant for them, but if it is accessible to anyone then we can learn from it and we might even contribute back to it.</p>
<p>In general I think for every Open Source project, if they have a web site, it is usually like this. They are however usually not that
interesting as those sites are static.</p>
<p>Many projects have their site hosted on GitHub pages. The source code of GitHub pages itself is not available, but the way the content
is generated might be.</p>
<ul>
<li>
<p><a href="https://pyvideo.org/">PyVideo</a> is a static web site hosted on GitHub pages with a small portion, the search engine, hosted elsewhere. It is written in Python using the <a href="https://blog.getpelican.com/">Pelican static site generator</a> The source of both code and data are available on <a href="https://github.com/pyvideo/">GitHub</a>.</p>
</li>
<li>
<p><a href="https://mattermost.com/">Mattermost</a> a chat system like Slack.</p>
</li>
<li>
<p><a href="https://www.reddit.com/">Reddit</a> <a href="https://github.com/reddit">source</a></p>
</li>
<li>
<p><a href="https://www.wikipedia.org/">Wikipedia</a> - PHP - Runs on <a href="https://www.mediawiki.org/">MediaWiki</a></p>
</li>
<li>
<p><a href="https://libre.fm/">Libre.fm</a> for <a href="https://gnu.io/fm/">developers</a></p>
</li>
<li>
<p><a href="https://readthedocs.org/">Read The Docs</a> is the site where you can read the documentation of most of the Python packages you are going to use. It has a page for <a href="https://docs.readthedocs.io/page/contribute.html">contributors</a> where you can find the instructions how to get involved. It is using <a href="https://www.sphinx-doc.org/">Sphinx</a>, Python, JavaScript, HTML, CSS, and it is hosted on <a href="https://azure.microsoft.com/">Microsoft Azure</a></p>
</li>
<li>
<p><a href="https://metacpan.org/">MetaCPAN</a> is the central search engine of all the Perl modules, it is also the place where you read the documentation and get meta-data about the modules. It is written in Perl and uses
ElasticSearch. It's source is on <a href="https://github.com/metacpan">GitHub</a> See my <a href="/how-to-contribute-to-metacpan">video</a>.</p>
</li>
<li>
<p><a href="https://www.freecodecamp.org/">FreeCodeCamp</a> <a href="https://github.com/freeCodeCamp/">GitHub</a></p>
</li>
<li>
<p><a href="https://exercism.io/">Exercism</a> <a href="https://github.com/exercism">GitHub</a></p>
</li>
<li>
<p><a href="https://sqitch.org/">Sqitch</a> has a static site hosted on GitHub pages and genrated using <a href="https://gohugo.io/">Hugo</a>. <a href="https://sqitch.org/site/">source</a></p>
</li>
<li>
<p><a href="https://perlweeklychallenge.org/">Perl Weekly Challenge</a> source on <a href="https://github.com/manwar/perlweeklychallenge">GitHub</a></p>
</li>
<li>
<p><a href="https://www.rexify.org/">Rexify</a> the web site is powered by <a href="http://preaction.me/statocles/">Statocles</a>, and continuously integrated and deployed to GitHub Pages thanks using TravisCI. Source is publicly
available at <a href="https://github.com/RexOps/rexify-website">rexify-website</a> including both code and content.</p>
</li>
<li>
<p><a href="https://curl.trillworks.com/">The curl converter</a> can convert any <a href="https://curl.haxx.se/">curl</a> command to a number of programming languages. I see Python, Ansible URI, MATLAB, Node.js, R, PHP, Strest, Go,
Dart, JSON, Elixir, Rust in the list. You could fix the bugs or start the converter to a new language. Source is on <a href="https://github.com/NickCarneiro/curlconverter">GitHub</a>. The Code is written in JavaScript, and the tests cases
are written in the respective languages.</p>
</li>
<li>
<p><a href="https://codefol.io/">codefol.io</a> the blog of Noah Gibbs. Source code on <a href="https://github.com/noahgibbs/codefolio_middleman">GitHub</a> it uses <a href="https://middlemanapp.com/">Middleman</a> static site
generator written in Ruby.</p>
</li>
</ul>
<h2 class="title is-4">My web sites</h2>
<p>I know they are not as important for the world as they are to mee, but then again, I can provide more help in case you decide you'd
like to contribute.</p>
<ul>
<li>
<p>The <a href="/">Code Maven</a> site itself and the <a href="https://perlmaven.com/">Perl Maven</a> site use the same open source code <a href="https://github.com/szabgab/Perl-Maven">written in Perl</a>.</p>
</li>
<li>
<p>The content of both sites is also on GitHub: <a href="https://github.com/szabgab/code-maven.com/">source of Code Maven</a> and <a href="https://github.com/szabgab/perlmaven.com/">source of Perl Maven</a>. You can help fixing typos and other errors.</p>
</li>
<li>
<p><a href="https://pydigger.com/">PyDigger</a> with <a href="https://github.com/szabgab/pydigger.com/">source</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Open Source Web application frameworks</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-06-27T09:30:01Z</updated>
    <pubDate>2020-06-27T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/open-source-web-applications" />
    <id>https://code-maven.com/open-source-web-applications</id>
    <content type="html"><![CDATA[<p>See also: <a href="/live-web-site-with-editable-open-source-code">Live web sites with Open Source code</a>.
<a href="/ready-made-downloadable-and-deployable-open-source-web-applications">Ready-made downloadable and deployable Open Source web applications</a>.</p>
<ul>
<li>Django in Python</li>
<li>Flask in Python</li>
<li>Express in NodeJS</li>
<li>Sinatra</li>
<li>Perl Dancer</li>
<li>Mojolicious</li>
<li><a href="https://blog.getpelican.com/">Pelican</a></li>
<li>Jekyll</li>
<li><a href="https://gohugo.io/">Hugo</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Job search</title>
    <summary type="html"><![CDATA[Webinar series helping you find a better job in hi-tech by showing you the point of view of the companies looking for employees.]]></summary>
    <updated>2020-06-19T07:30:01Z</updated>
    <pubDate>2020-06-19T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/job-search" />
    <id>https://code-maven.com/job-search</id>
    <content type="html"><![CDATA[<p>Job-search is not easy, especially now with the Corona-virus. In this webinar series I am trying to help you by showing you
the point of view of the recruiters, HR, head-hunters, and in general the side of the companies doing the hiring.</p>
<p>I think if you can see their side of the hiring-table, then you can improve your chances to get a job. You'll know how to
improve your LinkedIn page and how you use LinkedIn. How to improve your CV, your searching strategy etc.</p>
<p>You'll also hear about the hiring process of each company and what are they really looking for in a new employee.</p>
<h2 class="title is-4">Past events</h2>
<p>Watch the earlier episodes:</p>
<ul>
<li>2020.07.21 <a href="/site-reliability-engineer-at-adobe-rachael-bates">What does an SRE do at Adobe? - Our guest is Rachael Bates</a></li>
<li>2020.06.29 <a href="/job-search-pete-sergeant">Job search - Pete Sergeant (aka. Perl Careers and CareersJS)</a></li>
<li>2020.06.16 <a href="/job-search-distantjob-leticia-naranjo">Job search - Distantjob with Leticia Naranjo</a></li>
</ul>
<h2 class="title is-4">Related links</h2>
<ul>
<li><a href="/job-search-on-linkedin">Job search on LinkedIn</a></li>
</ul>
<h2 class="title is-4">Links to follow</h2>
<ul>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
<iframe width="560" height="315" src="https://www.youtube.com/embed/LErbNwbnrxM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<h2 class="title is-4">Background</h2>
<ul>
<li>It is a live webinar via Zoom which is recorded and uploaded to YouTube (and maybe other places).</li>
<li>I schedule the webinar to be 1 hour long but we can stop any time earlier and we can also stay on the webinar a bit longer if necessary.</li>
</ul>
<h2 class="title is-4">Some of my questions / topic for discussion</h2>
<p>Some of the questions I thought that might be relevant for the webinar.</p>
<p>Take them as the general directions and add your point of view!</p>
<ul>
<li>
<p>Tell me about yourself and about the company you work for!</p>
</li>
<li>
<p>What does the hiring process look like at your firm? How long does it take? How many interviews?</p>
</li>
<li>
<p>Are all of your open positions advertised publicly? If not how do you fill the others?</p>
</li>
<li>
<p>Is it a good idea to contact you directly if I am interested in a position at your firm?</p>
</li>
<li>
<p>Should I look for someone who works at the same place to recommend me? Is it better to submit my resume via LinkedIn or directly to you or some other way?</p>
</li>
<li>
<p>How do you determine who you contact via LinkedIn? What features of the profile are you looking for? Do the recommendations matter? The skills? The activities?</p>
</li>
<li>
<p>If I am looking for a job right now, what can I do to improve my chances?</p>
</li>
<li>
<p>Can I do anything to improve my position in your eyes?</p>
</li>
<li>
<p>How important is a degree vs. experience in the field?</p>
</li>
<li>
<p>If I have never had a fixed job in the industry before how can I get my first job? (e.g. if I just finished my degree, but have never worked in the industry or I was working in some unrelated field and I am trying to switch.)</p>
</li>
<li>
<p>Is there any way I can gain experience without having a job? How do you view home made projects? How do you view contributions to open source projects?</p>
</li>
<li>
<p>How should I prepare for an interview?</p>
</li>
<li>
<p>If I really like your company and I'd like to be able to apply for a job to you 2-5 years from now, what do you recommend I do now and in the next few years?</p>
</li>
<li>
<p>Alternatively: If you could go back 2-5 years what would you have suggested I do so you would want to hire me for one of your open positions?</p>
</li>
<li>
<p>Show us how you search and what you think during your search. You can bring an existing open position you are looking for, a past one, or a made up one and then show us your process.</p>
</li>
<li>
<p>What do you think about gaps in employment? How would you represent them on your LinkedIn profile and in your CV?</p>
</li>
<li>
<p>Do you ask people about their salary expectation? When I am asked about my salary expectation what shall I say?</p>
</li>
<li>
<p>The viewers will be able to ask questions and share their LinkedIn profile via the chat.</p>
</li>
<li>
<p>We can ask the viewers to share a link to their CV (not just LinkedIn) and review that.</p>
</li>
<li>
<p>We'll try to answer these questions.</p>
</li>
<li>
<p>We will provide our point of view on selected LinkedIn profiles shared by the audience.</p>
</li>
</ul>
<h2 class="title is-4">What are your questions?</h2>
<ul>
<li>If you have any other question you would have asked yourself, let me know!</li>
</ul>
<h2 class="title is-4">Technical aspects</h2>
<ul>
<li>
<p>We will have a Zoom webinar. I'll be the &quot;host&quot; and you the &quot;panelist&quot;.</p>
</li>
<li>
<p>People in the audience will be able to see and hear us and we'll be able to share our screen. They won't see what we write in the chat.</p>
</li>
<li>
<p>People in the audience will be able to write in the chat, but they will not be able to speak or share their screen.</p>
</li>
<li>
<p>Only we (host and panelists) will see the chat.</p>
</li>
<li>
<p>At the end we will tell people to connect with us, to follow us, or to subscribe to our channels.</p>
</li>
<li>
<p>We'll also include the appropriate links in the notes of the video recording.</p>
</li>
<li>
<p>The recorded video is uploaded (probably as it is) to YouTube and maybe to other places.</p>
</li>
<li>
<p>Later I might create shorter videos based on parts of the video. E.g. a question and the answer to it. Shorter videos might have a higher chance of being watched.</p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Perl Career with Pete Sergeant</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-06-18T07:30:01Z</updated>
    <pubDate>2020-06-18T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/job-search-pete-sergeant" />
    <id>https://code-maven.com/job-search-pete-sergeant</id>
    <content type="html"><![CDATA[<p>Pete Sergeant is a Developer Manager turned recruiter who runs the <a href="https://perl.careers/">Perl Careers</a>
and <a href="https://careersjs.com/">CareersJS</a>. If you are the reader of the <a href="https://perlweekly.com/">Perl Weekly newsletter</a>
(edite by yours truly) then you have seen his job posts at the bottom of each edition.
(Well, we had a break during the heights of the Corona virus pandemic, but he is back with his job offers.)</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/mv_f0uSEM_c" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li>
<p><a href="https://www.linkedin.com/in/petersergeant/">Pete Sergeant</a></p>
</li>
<li>
<p><a href="https://perl.careers/">Perl Careers</a></p>
</li>
<li>
<p><a href="https://careersjs.com/">CareersJS</a></p>
</li>
<li>
<p><a href="https://perlweekly.com/">Perl Weekly</a></p>
</li>
<li>
<p><a href="/youtube">YouTube channel</a></p>
</li>
<li>
<p><a href="/linkedin">LinkedIn page</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Job search - Distantjob with Leticia Naranjo</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-06-08T08:00:01Z</updated>
    <pubDate>2020-06-08T08:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/job-search-distantjob-leticia-naranjo" />
    <id>https://code-maven.com/job-search-distantjob-leticia-naranjo</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/QZPJgA-E5vY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li>
<p><a href="https://www.linkedin.com/in/leticia-naranjo/">Leticia Naranjo</a></p>
</li>
<li>
<p><a href="https://distantjob.com/">DistantJob</a></p>
</li>
<li>
<p><a href="https://dreamitjobs.net/">DreamITJobs</a></p>
</li>
<li>
<p><a href="/youtube">YouTube channel</a></p>
</li>
<li>
<p><a href="/linkedin">LinkedIn page</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-06-04T17:40:01Z</updated>
    <pubDate>2020-06-04T17:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker" />
    <id>https://code-maven.com/docker</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Docker Course</h2>
<p>The <a href="/slides/docker/">slides of the Docker course</a>.</p>
<ol>
<li><a href="/docker-course-intro">Introduction to the Docker Course</a></li>
<li><a href="/docker-course-why-use-docker">Why use Docker?</a></li>
<li><a href="/docker-course-what-is-docker">What is Docker?</a></li>
<li><a href="/docker-course-container-vs-images">Docker container vs. image</a></li>
<li><a href="/docker-course-install-docker">Install Docker</a></li>
<li><a href="/docker-course-version-and-info">Docker version and info</a></li>
<li><a href="/docker-course-getting-help">Getting help for Docker</a></li>
<li><a href="/docker-course-host-daemon-client">Docker host - daemon - client</a></li>
<li><a href="/docker-course-docker-registry">Docker Registry</a></li>
<li><a href="/docker-course-hello-world">Docker Hello World</a></li>
<li><a href="/docker-course-busybox">Docker busybox</a></li>
<li><a href="/docker-course-busybox-part-2">Docker busybox part 2</a></li>
<li><a href="/docker-course-exercise-1">Docker Exercise 1</a></li>
</ol>
<h2 class="title is-4">Part 2</h2>
<ol>
<li>
<p><a href="/docker-course-docker-hub">Docker Hub</a></p>
</li>
<li>
<p><a href="/docker-course-use-ubuntu-docker-image">Use Ubuntu Docker Image</a></p>
</li>
<li>
<p><a href="/docker-course-create-image-from-container">Create Docker image from container</a></p>
</li>
<li>
<p><a href="/docker-course-create-image-using-dockerfile">Create Docker image using Dockerfile</a> (FROM, RUN, CMD)</p>
</li>
<li>
<p><a href="/docker-course-ubuntu-htop">Docker image based on Ubuntu using htop</a> (RUN apt-get)</p>
</li>
<li>
<p><a href="/docker-course-copy-welcome">COPY an external file a Docker image</a> (COPY)</p>
</li>
<li>
<p><a href="/docker-course-install-curl">Install and use curl in Docker</a> (ENTRYPOINT)</p>
</li>
<li>
<p><a href="/docker-course-entrypoint-vs-cmd">ENTRYPOINT vs CMD</a></p>
</li>
<li>
<p><a href="/docker-course-crontab">Docker with crontab</a></p>
</li>
<li>
<p><a href="/docker-course-mounting-host-directory">Docker mounting host directory in a container</a> (-v)</p>
</li>
</ol>
<h2 class="title is-4">Articles</h2>
<ul>
<li>
<p><a href="/docker-commands">Docker Commands</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/getting-started-with-perl-on-docker">Getting started with Perl on Docker</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/distributing-perl-script-using-docker">Distributing a Perl script using Docker container</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How to send a Pull-Request on GitHub - fixing the content of the Code-Maven site</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-06-04T09:30:01Z</updated>
    <pubDate>2020-06-04T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/send-a-pull-request-on-github" />
    <id>https://code-maven.com/send-a-pull-request-on-github</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/z4TyL0XzYb0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://github.com/szabgab/code-maven.com/">GitHub repository of the Code-Maven web site</a></li>
<li><a href="/youtube">YouTube channel</a></li>
<li><a href="/linkedin">LinkedIn page</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How to use LinkedIn to find a job and to let a job find you in Hi-Tech</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-05-30T21:30:01Z</updated>
    <pubDate>2020-05-30T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/linkedin-for-jobs" />
    <id>https://code-maven.com/linkedin-for-jobs</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/bBEp48eqUL8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Relevant links:</p>
<ul>
<li><a href="/linkedin">LinkedIn page of CodeMaven</a></li>
<li><a href="https://linkedin.com/in/szabgab">LinkedIn page of Gabor Szabo</a></li>
<li><a href="/youtube">YouTube channel of Code Maven</a></li>
<li><a href="https://code-maven.com/slides/linkedin">LinkedIn slides</a></li>
</ul>
<p>If you'd like to be notified of further events, <a href="/register">register</a> on our web site.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Books</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-05-26T07:30:01Z</updated>
    <pubDate>2020-05-26T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/books" />
    <id>https://code-maven.com/books</id>
    <content type="html"><![CDATA[<p>The following books were put together by Gábor Szabó, the author of the Code Maven site.</p>
<p>For the full list see the profile page on <a href="https://leanpub.com/u/szabgab">Leanpub</a>.</p>
<h2 class="title is-4"><a href="https://leanpub.com/python-examples">1000 Python Examples</a></h2>
<p><a href="https://leanpub.com/python-examples"><img src="static/img/python-book-cover-306x396.png" alt="" /></a></p>
<h2 class="title is-4"><a href="https://leanpub.com/collab-dev-git">Collaborative Development using Git and GitHub</a></h2>
<p><a href="https://leanpub.com/collab-dev-git"><img src="static/img/git_book_cover_306x396.png" alt="" /></a></p>
<h2 class="title is-4"><a href="https://leanpub.com/ansible-book">Automated Configuration Management using Ansible</a></h2>
<p><a href="https://leanpub.com/ansible-book"><img src="/static/img/ansible-book-cover-306x396.png" alt="" /></a></p>
<h2 class="title is-4"><a href="https://leanpub.com/jenkins-book">CI/CD automation with Jenkins</a></h2>
<p><a href="https://leanpub.com/jenkins-book"><img src="/static/img/jenkins-book-cover-306x396.png" alt="" /></a></p>
<h2 class="title is-4"><a href="https://leanpub.com/groovy-book">Programming in Groovy</a></h2>
<p><a href="https://leanpub.com/groovy-book"><img src="/static/img/groovy-book-cover-306x396.png" alt="" /></a></p>
<h2 class="title is-4"><a href="https://leanpub.com/markua-by-example">Markua by Example</a></h2>
<p><a href="https://leanpub.com/markua-by-example"><img src="static/img/markua-by-example-book-cover-306x396.png" alt="" /></a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How to edit Wikipedia</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-05-02T09:30:01Z</updated>
    <pubDate>2020-05-02T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/edit-wikipedia" />
    <id>https://code-maven.com/edit-wikipedia</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/gvXtpiiPJqI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Start Git with a local repository</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-04-28T19:30:01Z</updated>
    <pubDate>2020-04-28T19:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/start-git-with-a-local-repository" />
    <id>https://code-maven.com/start-git-with-a-local-repository</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/fAMCF4hhCQY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Find more via the <a href="https://code-maven.com/slides/">Git slides</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Skeleton Go program - error messages in Go</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-04-27T17:30:01Z</updated>
    <pubDate>2020-04-27T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/skeleton-go-program" />
    <id>https://code-maven.com/skeleton-go-program</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/SOkzm1fE7d0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Find more via the <a href="https://code-maven.com/slides/golang">Golang slides</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Linux TAB completion of ls</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-04-24T05:30:01Z</updated>
    <pubDate>2020-04-24T05:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/linux-tab-completition-of-ls" />
    <id>https://code-maven.com/linux-tab-completition-of-ls</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/FhhRxOMbexk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p>Using the <a href="/slides/linux/tab-completition">Linux: TAB completition</a> slide. Find other
slides there.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Job search on LinkedIn</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-04-09T15:30:01Z</updated>
    <pubDate>2020-04-09T15:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/job-search-on-linkedin" />
    <id>https://code-maven.com/job-search-on-linkedin</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/_U6uXB7WbF4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<ul>
<li><a href="https://www.linkedin.com/">LinkedIn</a></li>
<li><a href="https://www.linkedin.com/company/code-maven-world/">Code Maven on LinkedIn</a></li>
<li><a href="https://www.youtube.com/channel/UCGsgaBYSAcia5op2Umer-9g/">Code Maven on YouTube</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Open Source Desktop Applications</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-04-05T12:30:01Z</updated>
    <pubDate>2020-04-05T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/open-source-desktop-applications" />
    <id>https://code-maven.com/open-source-desktop-applications</id>
    <content type="html"><![CDATA[<p>The list of the top Desktop Applications with an Open Source license.</p>
<h2 class="title is-4">Office suite</h2>
<p><a href="https://www.libreoffice.org/">Libre Office</a>
Platforms: Linux/Mac/Windows
<a href="https://www.libreoffice.org/community/get-involved/">onboarding</a>
Non-programming tasks: Documentation,</p>
<h2 class="title is-4">Web browser</h2>
<p><a href="https://www.mozilla.org/en-US/firefox/new/">Firefox</a></p>
<p><a href="https://www.chromium.org/">Chromium</a></p>
<h2 class="title is-4">Media Player</h2>
<p><a href="https://www.videolan.org/vlc/index.html">VLC</a> of <a href="https://www.videolan.org/">Videolan</a></p>
<p><a href="https://popcorntime.app/">Popcorntime</a></p>
<h2 class="title is-4">Image editing</h2>
<p><a href="https://gimp.org/">Gimp</a></p>
<p><a href="https://www.blender.org/">Blender</a></p>
<p><a href="https://www.digikam.org/">Digikam</a></p>
<p><a href="https://imagemagick.org/">Image Magick</a></p>
<p><a href="https://inkscape.org/">Inkscape</a></p>
<h2 class="title is-4">Communication</h2>
<p><a href="https://jitsi.org/">Jitsi</a></p>
<h2 class="title is-4">Audio recording and editing</h2>
<p><a href="https://www.audacityteam.org/">Audacity</a> audio software.</p>
<p><a href="https://ardour.org/">Ardour</a></p>
<p><a href="https://traverso-daw.en.softonic.com/">Traverso DAW</a></p>
<p><a href="https://notepad-plus-plus.org/downloads/">Notepad++</a> Windows only text editor. Written in C++.</p>
<p>Partially taken from <a href="https://digital.com/blog/open-source-business/">this list</a> where there are a few more.</p>
<p><img src="/img/open-source-desktop-applications.png" alt="" /></p>
<h2 class="title is-4">Other</h2>
<p><a href="https://code.visualstudio.com/">Visual Studio Code</a> is the Open Source IDE created in Microsoft. It is written in NodeJS and its source code is available on
<a href="https://github.com/Microsoft/vscode/">GitHub</a>.</p>
<p><a href="https://www.freecadweb.org/">FreeCAD</a> is a 3d parametric modeler It is using a lot of C++ and Python and some other technologies. Source code is available on <a href="https://github.com/FreeCAD/FreeCAD">GitHub</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>DevOps Engineer</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-03-14T08:30:01Z</updated>
    <pubDate>2020-03-14T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/devops-engineer" />
    <id>https://code-maven.com/devops-engineer</id>
    <content type="html"><![CDATA[<p>Originally DevOps was mode of operation in which Developers and Operations worked together.</p>
<p>It was created because in many companies there were silos: Developers, (Maual) QA engineers, Operations and the communication
among these silos was less than ideal. (also know as &quot;really bad&quot;).</p>
<p>The DevOps movement eliminated the silos, made the whole process much smoother.</p>
<p>Unfortunately many companies instead of eliminating the silos have just renamed the Operations team to be DevOps and
expected them to wirte some code to their operations.</p>
<p>Some companies were even worse and created a new silo called DevOps.</p>
<p>Anyway, today we are here and there is a job title called <b>DevOps Engineer</b> and there is a huge lack of good DevOps engineers.
So what do you need in order to become one?</p>
<p>The content of this job is also very different among organizations. Some places they mostly do &quot;Cloud System Administration&quot;.
In other places they do the job of what used to be &quot;Configuration Management&quot;: build systems, CI (Continuous Integration) systems.
In some places they might be responsible of the branching and merging strategy of the developers.
In some places they are the ones deploying the applications, in other places thet create only the tools and the teams
themself actually handle the deployment.</p>
<p>So there is no good definition of what a &quot;DevOps enginner&quot; does and needs to know.</p>
<h2 class="title is-4">Non-Technical Skills</h2>
<p>Before we get to the technical part let's talk a bit about the non-technical skills.</p>
<p>A DevOps engineer must be able to communicate well with their co-workers throughout the organization.
The DevOps team is in many cases the glue connecting the various technical teams. It is a service team that provides
service to many other teams.</p>
<p>It also means the DevOps engineers will get requests from around the company, not just from their manager.
A DevOps engineer needs to be able to handle this. Find a way to be able to say no to all the urgent requests.</p>
<p>In many ways it is also a rather thankless job. Most people will only come your way when they have some problem.
When something does not work. And then it is urgent.</p>
<p>As a DevOps enginner you'll have to learn about tons of technologies. You won't really have the time to delve deeply
in any of the technologies, but you will be expected to be the expert.</p>
<p>This can be both overwhelming and extreamly fun. I personally love experimenting with tools. I wish I could do more of it.</p>
<p>Most likely you'll also need to explain many tools, and the limitations of those tools to a lot of people in the organization,
so you will need good communication skills.</p>
<p>Yes, I know Sysadmins or Operations people have a bad reputation of being uncommunicative. So if you are someone who can communicat
you'll have a clear advantage over them.</p>
<h2 class="title is-4">Technologies</h2>
<p>I have another page where I listed tons of <a href="/devops">technologies used by DevOps</a>, way too many. Let me give an overview here.</p>
<h2 class="title is-4">Version Control</h2>
<p>The base of every good operation is to be able to track changes.
<a href="/git">Git</a> is the de-facto standard open source Version Control System (VCS) so I recommend you become very familiar with it.</p>
<p>It is also usually importanto to deal with the &quot;Git server&quot;, that is GitHub, BitBucket, GitLab or some similar system.</p>
<h2 class="title is-4">Linux</h2>
<p>The majority of companies use Linux as their servers. You must become familiar with Linux via the CLI (Command Line Interface). I mean the shell.</p>
<p>The specific distribution matters less, though in most places I've encountered CentOS, RedHat, and Ubuntu.</p>
<h2 class="title is-4">Networking</h2>
<p>It is probbaly quite important to have a good understaning of Networking protocols. Starting from TCP/IP up to higher layers of the
<a href="https://en.wikipedia.org/wiki/Internet_protocol_suite">Internet protocols</a>.</p>
<h2 class="title is-4">Virtualization - Containers</h2>
<p>These days <a href="/docker">Docker</a> and Kubernetes are all the rage.</p>
<h2 class="title is-4">Programming languages</h2>
<p>The two most frequently used languages by DevOps engineers are <a href="/shell">Bash</a>, the Unix/Linux shell and <a href="/python">Python</a>.</p>
<h2 class="title is-4">Others</h2>
<p>There are tons of other <a href="/devops">technologies for DevOps</a> I've already listed elsewhere and that list is probbaly also
missing quite a few items.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How to get your first job in hi-tech as a junior ...?</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-03-12T17:30:01Z</updated>
    <pubDate>2020-03-12T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jobs" />
    <id>https://code-maven.com/jobs</id>
    <content type="html"><![CDATA[<p>Finding a job, especial the first job in hi-tech isn't easy. One of the problems is that you are expected to have experience,
but you don't know how to get experience if you don't have a job. The typical chicken and egg problem.</p>
<p>In this article I try to help you. Follow these instructions and you will improve your chances to find a job.</p>
<p>TL;DR: Contribute to open source projects and gain experience that way.</p>
<h2 class="title is-4">Job descriptions</h2>
<p>Before we get into how to gain that experience, let's see a few job descriptions.</p>
<ul>
<li><a href="/backend-python-developer">Backend Python developer - Junior Python programmer</a></li>
<li><a href="/test-automation-engineer">Test Automaton Engineer</a></li>
<li><a href="/devops-engineer">DevOps engineer</a></li>
</ul>
<h2 class="title is-4">Non-Technical Skills - communication skills</h2>
<p>In each one of the job descriptions I mention a bunch of non-technical skills that I think are important to these jobs.
Some of these you can improve. Specifically the communication skills.</p>
<p>If you work in an office then most likely you will need to have good <strong>verbal communication skills in the local language</strong>.
e.g. in Israel in most of the offices people speak Hebrew in meetings though there are more international companies where the people speak English
in the meetings and in many interpersonal communication.
However even there almost all of the writing is done in English. So being able to express yourself in English is important.</p>
<p>If you plan to work in a distributed company or as a remote worker then the <strong>written communication</strong> is a lot more important.
In international companies I know it is usually done in English, but I guess companies that have a local focus
(e.g. the Spanish-speaking market, or the German-speaking market) will probably communicate in their own local language. (So Spanish and German respectively).</p>
<p>There are plenty of traditional ways to practice a foreign language, but I'd like to point out something else. The best way to improve your
written communication skills is to write lots of text. I would recommend you <strong>create a web site or a blog</strong> and start writing your technical progress.
So as you follow the tasks bellow you also write posts explaining what you did, what problems have you encountered, what solutions have you found.
This is both a good exercise and it can also help you find a job. Some people at companies will like the fact that they can see your thought process.</p>
<h2 class="title is-4">How to setup a website / blog?</h2>
<p>Probably easiest way that needs the least technical skills is using one of the hosted services such as <a href="https://wordpress.com/">Wordpress.com</a>
or <a href="https://www.wix.com/">Wix</a>. In both of them you can start free of charge.</p>
<p>You can go with these and you'll get a beautiful site, but if you are looking for a technical job I would use the opportunity
to learn more about the underlying technology as well.</p>
<p>The next level in terms of technical difficulty, is setting up a page on <a href="https://pages.github.com/">GitHub Pages</a>.
That will require you to understand Git and GitHub a bit and learn about HTML/CSS and maybe even JavaScript. This is free of charge.</p>
<p>Finally, if you'd like to go to the extreme, you can rent your own VPS (Virtual Private Server) and host your own web site there.
You can install some ready-made software such as <a href="https://wordpress.org/">WordPress</a> or you can build your own.
I recommend <a href="/digitalocean">Digital Ocean</a> or <a href="/linode">Linode</a>. At both of them you can get a VPS for $5/month.</p>
<p>If you build your own you won't get all the features the ready-made tools provide, but you will learn a lot more about the technical aspects.</p>
<p>My recommendation is that you start at the top, so you start writing right away, and then move towards the more challenging versions of your website/blog.</p>
<h2 class="title is-4">Technical Tasks</h2>
<p>No matter which field you are interested in you'll have to be able to use Git and GitHub.
(In some places it is GitLab or BitBucket instead of GitHub but the concepts are very similar and we'll cover the other two later.)
So we'll start with that.</p>
<ol>
<li>
<p>Before you can contribute to other projects, you'll have to learn <a href="/git">Git</a>. That page has plenty of links to follow. The slides have exercises as well.</p>
</li>
<li>
<p>Read <a href="/how-to-contribute-to-an-open-source-project">How to contribute to an Open Source project?</a></p>
</li>
<li>
<p>Go over the slides of: <a href="https://code-maven.com/slides/collab-dev/">Collaborative Development and Open Source Projects</a> and do the exercies.</p>
</li>
<li>
<p>Better yet, read the book I wrote specifically for this: <a href="https://leanpub.com/collab-dev-git/">Collaborative Development using Git and GitHub</a></p>
</li>
</ol>
<p>As Python programmer you will have to know Python quite well.
As DevOps engineer or as a Test Automation engineer you will need to know one of the programming languages. Python is one of the common choices.</p>
<h2 class="title is-4">Learning for DevOps</h2>
<p>There are tons of <a href="/devops">DevOps Tools</a> you need to be familiar as a <a href="/devops-enginner">DevOps Enginner</a>.
You don't need to be a grand master in either of those and when you are learning them you will also mix them. The following seems
to be a good order to start learning the first few.</p>
<ol>
<li>Git / GitHub</li>
<li>Python</li>
<li>Linux + Bash (in VirtualBox or natively)</li>
<li>Docker</li>
</ol>
<p>But remember, after you learned the basics of Git, start learning the basics of Python and use Git to keep your the history of your
Python exercises. This will make you practice Git while you Learn Python. Then at one point start learning Linux and switch your Python
learning to Linux. You can use VirtualBox to run Linux on top of your Windows system.</p>
<p>Once you are familiar with the above you can start learning Docker.</p>
<h2 class="title is-4">Open Source Projects</h2>
<ul>
<li>
<p><a href="/ready-made-downloadable-and-deployable-open-source-web-applications">Ready-made downloadable and deployable Open Source web applications</a></p>
</li>
<li>
<p><a href="/live-web-site-with-editable-open-source-code">Live web sites with editable Open Source source code</a></p>
</li>
<li>
<p><a href="/open-source-web-applications">Open Source Web application frameworks</a></p>
</li>
<li>
<p><a href="/open-source-desktop-applications">Open Source Desktop Applications</a></p>
</li>
<li>
<p><a href="/python-pydigger-add-the-author-field">Python: Pydigger add author field to a PyPI package</a></p>
</li>
<li>
<p><a href="/open-source-companies">Open Source Companies</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Python PIL - Pillow tutorial and examples</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-02-28T08:02:00Z</updated>
    <pubDate>2020-02-28T08:02:00Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/pil" />
    <id>https://code-maven.com/pil</id>
    <content type="html"><![CDATA[<p>Articles on how to create and manipulate images using PIL, Pillow in Python.</p>
<p>Slides about <a href="/slides/python/pil">PIL, Pillow</a>.</p>
<ul>
<li><a href="/create-images-with-python-pil-pillow">Create images with Python PIL and Pillow and write text on them</a></li>
<li><a href="/python-get-size-of-image-using-pil-pillow">Get size of image using PIL or Pillow</a></li>
<li><a href="/python-write-text-on-images-pil-pillow">Write text on existing image using Python PIL - Pillow</a></li>
<li><a href="/crop-images-using-python-pil-pillow">Crop images using Python PIL - Pillow</a></li>
<li><a href="/resize-image-using-python">Resize images using Python PIL Pillow</a></li>
</ul>
<p>All of the articles about <a href="/python">Python</a>.</p>
<p>Find additional Python-related articels in the <a href="/flask">Flask</a> series.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Test Automaton Engineer</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-02-13T08:30:01Z</updated>
    <pubDate>2020-02-13T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/test-automation-engineer" />
    <id>https://code-maven.com/test-automation-engineer</id>
    <content type="html"><![CDATA[<p>One of the areas I love in software development is testing. Specifically, automated testing.
When I write an application I always write tons of unit-tests and when appropriate also integration
tests and other types of test.</p>
<p>I also help companies introduce testing and test automation to their companies.</p>
<p>I also see that many companies are looking for <b>Automation engineer</b> or <b>Test Automation engineer</b>,
or <b>QA Automation engineer</b>.</p>
<p>Let's see what kind of personality traits will help you in this position and do you need to know
if you are interested in one of these positions?</p>
<h2 class="title is-4">Non-Technical Skills</h2>
<p>You'll have to be able to have a broad view of the product, products of the company.</p>
<p>You have to be an investigator. Being able to find the source of a problem in a usually large
and messy environment.</p>
<p>You'll have to be able to learn about technologies that sometimes have no good documentation.
Part of your job might be to actually check how good the documentation is.</p>
<p>You'll have to communicate your findings with the rest of the company. Both with the developer,
the manual QA people, and management.</p>
<p>I'd say empathy should be high on the required personality traits as you will need to be able to
look at the product as a client even if you don't have a personal use for the product.
You also need to be able to think how and why a developer might make certain mistakes creating
bug or broken features.</p>
<h2 class="title is-4">Technologies</h2>
<p>There is a very broad set of technologies that are in use in various companies.
There can also be specialized tools that are relevant only to a small group of companies.
Even in-house technologies that are only used in the specific company.</p>
<p>So I won't give a comprehensive list, but you will get the picture.</p>
<h2 class="title is-4">Programming language</h2>
<p>You'll definitely need to know at least one programming language. Maybe more than one.
These days <a href="/python">Python</a>,
<a href="/javascript">JavaScript</a> (with <a href="/nodejs">NodeJS</a>) are popular languages
in the field.</p>
<p>In Unix/Linux environment <a href="/shell">Bash</a> or some other Unix/Linux shell language.</p>
<p><a href="/java">Java</a>, <a href="/net">C# .NET</a> are often required if those are the languages used in the company for writing their products.</p>
<p><a href="https://perlmaven.com/">Perl</a> and <a href="/ruby">Ruby</a> are also still used, but
as far as I can tell they are both used less and less.</p>
<h2 class="title is-4">Databases</h2>
<p>In some places you'll need to be familiar with specific relational databases and maybe some non-relational (also referred to as no-SQL) databases.</p>
<p>In any case it is general a good idea to be familiar with <a href="/sql">SQL</a>.</p>
<h2 class="title is-4">Version Control</h2>
<p>You will have to be familiar with the Software Version Control System (SVCS or VCS) or the company.
These days <a href="/git">Git</a> is by far the most popular version control system.</p>
<p>You will also have to also know one of the Git server systems. Either cloud-based or local.</p>
<p>You will have to understand Git and the difference between
<a href="/git">Git</a>, and any of the cloud-hosts such as <a href="https://github.com/">GitHub</a>, <a href="https://about.gitlab.com/">GitLab</a>,
and <a href="https://bitbucket.org/">BitBucket</a>.</p>
<h2 class="title is-4">Bug tracking system</h2>
<p>You'll have to understand the concept of the bug and feature-tracking systems. There are many such systems,
<a href="https://www.atlassian.com/software/jira">Jira</a> seems to be one of the popular ones, but the
Git servers system also have their own.</p>
<h2 class="title is-4">CI - Continuous Integration</h2>
<p>While running the CI system might be the job of the <a href="/devops">DevOps</a> team, you will have to be familiar
with the concept and you'll have to be able to use at leas one of such systems.
The most popular open source CI system is <a href="/jenkins">Jenkins</a> that uses the <a href="/groovy">Groovy</a> language.</p>
<p><a href="https://travis-ci.org/">Travis CI</a> is a very popular cloud-based CI system.</p>
<p>There are many others of course.</p>
<h2 class="title is-4">CD - Continuous Delivery or Deployment</h2>
<p>Another area where <a href="/devops">DevOps</a> will be heavily involved, but where it will be quite important for you
too to have some understanding.</p>
<h2 class="title is-4">CI/CD</h2>
<p>See above under CI and CD.</p>
<h2 class="title is-4">Testing tools</h2>
<ul>
<li>
<p><a href="https://selenium.dev/">Selenium</a></p>
</li>
<li>
<p><a href="http://appium.io/">Appium</a></p>
</li>
<li>
<p><a href="https://www.cypress.io/">Cypress.io</a></p>
</li>
<li>
<p><a href="https://cucumber.io/">Cucumber</a></p>
</li>
<li>
<p><a href="https://www.katalon.com/">Katalon</a></p>
</li>
<li>
<p><a href="https://www.testing-whiz.com/">Testing Whiz</a></p>
</li>
<li>
<p><a href="https://www.ranorex.com/">Ranorex</a></p>
</li>
<li>
<p><a href="https://smartbear.com/product/testcomplete/overview/">Test Complete</a></p>
</li>
<li>
<p><a href="https://www.telerik.com/teststudio">Test Studio</a></p>
</li>
<li>
<p><a href="https://github.com/microsoft/playwright">PlayWright</a> Node library to automate Chromium, Firefox and WebKit with a single API</p>
</li>
</ul>
<h2 class="title is-4">Containers - Docker</h2>
<p>Another area that might be handled by the <a href="/devops">DevOps</a> engineers, but where you will probably also have
to have some understanding is <a href="/docker">Docker</a>.</p>
<h2 class="title is-4">Other</h2>
<ul>
<li>Experience in manual testing.</li>
<li>Good understanding of software testing theory and methodologies.</li>
<li>Knowledge in unit tests, integration tests, and data validation.</li>
<li>Knowledge of test framework.</li>
<li>Skills in diagnosing and solving complex problems and providing detailed technical analysis.</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SQL</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-02-13T07:12:00Z</updated>
    <pubDate>2020-02-13T07:12:00Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/sql" />
    <id>https://code-maven.com/sql</id>
    <content type="html"><![CDATA[<p>This is a placeholder for articles about SQL.</p>
<p>There are some slides about using <a href="/slides/python/dotnet">.NET with Python</a>.</p>
<ul>
<li>
<p><a href="/postgresql">PostgreSQL</a></p>
</li>
<li>
<p><a href="/python-postgresql">Python and PostgreSQL</a></p>
</li>
<li>
<p><a href="/slides/python/mysql">Python and MySQL slides</a></p>
</li>
<li>
<p><a href="/slides/python/postgresql">Python and PostgreSQL slides</a></p>
</li>
<li>
<p><a href="/slides/python/sqlalchemy">SQLAlchemy</a></p>
</li>
<li>
<p><a href="/slides/python/nosql">NoSQL</a></p>
</li>
<li>
<p><a href="/slides/python/mongodb">MongoDB</a></p>
</li>
<li>
<p><a href="/slides/python/redis">Redis</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>C# .NET</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-02-13T07:02:00Z</updated>
    <pubDate>2020-02-13T07:02:00Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/net" />
    <id>https://code-maven.com/net</id>
    <content type="html"><![CDATA[<p>This is a placeholder for articles about C# and .NET.</p>
<p>There are some slides about using <a href="/slides/python/dotnet">.NET with Python</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Raku</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-02-10T07:30:01Z</updated>
    <pubDate>2020-02-10T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/raku" />
    <id>https://code-maven.com/raku</id>
    <content type="html"><![CDATA[<p><a href="https://www.raku.org/">Raku language</a> is a very powerful dynamic programming language. It's compiler can <b>do</b> a lot of things, hence it is
called <a href="https://www.rakudo.org">Raku-do</a>.</p>
<p>This pages is mostly a placeholder till I can move all of the content I have about Raku to this site.</p>
<ul>
<li><a href="/raku-first-steps">First steps with Raku</a></li>
<li><a href="/raku-interactive">Raku using the interactive shell (REPL)</a></li>
</ul>
<!--
* [Bailador web framework](/bailador)
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bash: Read file line-by-line</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-01-24T08:30:01Z</updated>
    <pubDate>2020-01-24T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bash-read-file-line-by-line" />
    <id>https://code-maven.com/bash-read-file-line-by-line</id>
    <content type="html"><![CDATA[<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/read_file.sh">examples/shell/read_file.sh</a></strong></p>
<pre><code class="language-bash">filename=&quot;$1&quot;

while read -r line
do
   echo $line
   echo '----'

done &lt; &quot;$filename&quot;


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Create a Personal Microblog</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-01-18T17:30:01Z</updated>
    <pubDate>2020-01-18T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/microblog" />
    <id>https://code-maven.com/microblog</id>
    <content type="html"><![CDATA[<p>This is a project idea included in the list of <a href="/exercises">exercises</a>.</p>
<p>A microblog - at least for us - is a site where you can post short notes. Similar to Twitter, but for now it for one user only. This project has several steps.</p>
<ol>
<li>
<p>Create a command line tool that will accept some text and save it in some local database with the current timestamp. After submitting several messages we'll have a list of messages with the appropriate dates in the file. The length
of the messages should be limited to some number. The number should be probably configurable, but you can start with 280 character limite which is what Twitter has now.</p>
</li>
<li>
<p>Create another command line script that creates a JSON file listing all the messages. Actually it should probably accept a parameter of how many messages to show and should default to the 10 most recent messages.</p>
</li>
<li>
<p>Create another command line script that generated a static web site. On the main page (called index.html) it shows the 10 most recent messages. Each message also has its own file. The filename is made out of the milisecond the
message was posted. e.g. 1579360497123.html</p>
</li>
<li>
<p>Create a command line scipt to generate an Atom feed of the messages. Again, have it include the 10 most recent messages. Make the number configurable.</p>
</li>
<li>
<p>Create a simple dynamic web application that can serve the content but in a dynamic way.</p>
</li>
</ol>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Counter</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-01-17T15:30:01Z</updated>
    <pubDate>2020-01-17T15:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-counter" />
    <id>https://code-maven.com/exercise-counter</id>
    <content type="html"><![CDATA[<p>There are tons of possiblities to have counters depending on how do you access it and where does it keep the score.
In this exercise you are required to implement a number of different counters.
A few ideas follow:</p>
<p>A command-line single-counter. Every time we run the program it will display an ever increasing number:</p>
<pre>
$ counter
1
$ counter
2
$ counter
3
</pre>
<p>A command-line multi-counter:</p>
<pre>
$ counter Foo
1
$ counter Foo
2
$ counter Bar
1
$ counter Foo
3
$ counter Foo
4
$ counter Bar
2
</pre>
<p>Front-ends:</p>
<ul>
<li>
<p>Command line</p>
</li>
<li>
<p>Web browser</p>
</li>
<li>
<p>GUI (e.g. Python Tk)</p>
</li>
</ul>
<p>You can find many solutions in the <a href="/counter">Counter Examples</a> project.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins pipelines: Arbitrary code execution in the shell</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-01-16T08:40:01Z</updated>
    <pubDate>2020-01-16T08:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-arbitrary-code-execution" />
    <id>https://code-maven.com/jenkins-arbitrary-code-execution</id>
    <content type="html"><![CDATA[<p>It is quite common that what works on the developers computer does not work on the Jenkins Agent. Experimenting by committing code-changes to the Git repository
and letting the Jenkins job pick it up can be time consuming and quite annoying having all those commits in the history.</p>
<p>One, admittedly strange solution is to let your user execute any command on the Jenkins server without giving them ssh access.</p>
<p>This code snippet can be used as a Jenkins Pipeline. It has a single parameter where you can type in anything.
The job will execute it as a shell command.</p>
<p>Be warned though, this allows <b>any</b> code executed by anyone who can run that job on the Jenkins server.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/shell.Jenkins">examples/jenkins/shell.Jenkins</a></strong></p>
<pre><code class="language-txt">parameters {
    string(name: 'command',  defaultValue: '',  description: 'Type in the command that will be executed.')
}


                   if (params.command) {
                       println(params.command)
                       sh(script: params.command)
                   } else {
                       println(&quot;No command&quot;)
                   }


</code></pre>
<p>A slightly better way to do this is to include a list of users who can run the code and check the username
before running the shell command:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/shell_with_authorization.Jenkins">examples/jenkins/shell_with_authorization.Jenkins</a></strong></p>
<pre><code class="language-txt">parameters {
    string(name: 'command',  defaultValue: '',  description: 'Type in the command that will be executed.')
}

               script {
                   def specificCause = currentBuild.getBuildCauses('hudson.model.Cause$UserIdCause')
                   if (specificCause) {
                       println(&quot;Executed by userId: '${specificCause.userId}'&quot;)
                       println(&quot;Executed by userName: '${specificCause.userName}'&quot;)
                       manager.addShortText(&quot;${specificCause.userName[0]}&quot;)
                   }

                   def valid_users = [&quot;joe&quot;, &quot;jane&quot;]
                   if (params.command) {
                       println(&quot;Manually executed command: ${params.command}&quot;)

                       if (!specificCause || valid_users.count(specificCause.userId[0]) == 0) {
                           error(&quot;User '${specificCause.userId[0]}' is not in the approved list of users&quot;)
                       }

                       def res = sh(script: params.command, returnStatus: true)
                       if (res != 0) {
                           error(&quot;Error in: ${params.command}&quot;)
                       }
                   }


</code></pre>
<p>We use the <a href="/jenkins-get-current-user">get current user</a> (currentBuild, getBuildCauses) to have some
authorization. We could have also used the <a href="/jenkins-pipeline-builduser">BuildUser plugin</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins pipeline: get current user</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-01-16T08:30:01Z</updated>
    <pubDate>2020-01-16T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-get-current-user" />
    <id>https://code-maven.com/jenkins-get-current-user</id>
    <content type="html"><![CDATA[<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/current_user.Jenkinsfile">examples/jenkins/current_user.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">
def specificCause = currentBuild.getBuildCauses('hudson.model.Cause$UserIdCause')
if (specificCause) {
    println(&quot;Executed by user $specificCause.userName&quot;)
    //echo &quot;specificCause: $specificCause&quot;
    //echo &quot;specificCause: ${specificCause.userId[0]}&quot;
    echo &quot;specificCause: $specificCause.userName&quot;
    echo &quot;specificCause: ${specificCause.userName}&quot;
    //echo &quot;specificCause: $specificCause.shortDescription&quot;
}

</code></pre>
<p>See also the <a href="/jenkins-pipeline-builduser">BuildUser plugin</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline: read a file and write a file - readFile, writeFile</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-01-06T20:30:01Z</updated>
    <pubDate>2020-01-06T20:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-readfile-writefile" />
    <id>https://code-maven.com/jenkins-readfile-writefile</id>
    <content type="html"><![CDATA[<p>In the following Jenkinsfile we have two stages. In the first stage we create a variable called <b>data</b> that
holds some text and the we use the <b>writeFile</b> function to write it out to a file.
Then we execute <b>ls</b> as an <a href="/jenkins-pipeline-running-external-programs">external program using <b>sh</b></a>.</p>
<p>In the second stage we use the <b>readFile</b> function to read in the content of the file.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/readfile-writefile.txt">examples/jenkins/readfile-writefile.txt</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent { label 'master' }
   stages {
       stage('write') {
           steps {
               script {
                   def date = new Date()
                   def data = &quot;Hello World\nSecond line\n&quot; + date
                   writeFile(file: 'zorg.txt', text: data)
                   sh &quot;ls -l&quot;
               }
           }
       }
       stage('read') {
           steps {
               script {
                   def data = readFile(file: 'zorg.txt')
                   println(data)
               }
           }
       }
   }
}


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins: separate jobs for development and production</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-01-04T22:30:01Z</updated>
    <pubDate>2020-01-04T22:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-separate-jobs-for-development-and-production" />
    <id>https://code-maven.com/jenkins-separate-jobs-for-development-and-production</id>
    <content type="html"><![CDATA[<p>When we would like to improve the code of a Jenkins pipeline (and if we don't use branches)
we might want to set up 2 jobs with two separate Jenkins files. One for production and one for
development.</p>
<p>We would work on the development file and then copy over the change to the production file.
Moving the changes manually is very error-prone. It would be much easier to copy the whole Jenkinsfile.</p>
<p>However, we probably want the job to run slightly differently in development than in production.
For example in production we might send an e-mail to the whole team. In development we might want to
only send it to the current developer or not at all.</p>
<p>But how can the code know if the Jenkinsjob is the development job or the production job?</p>
<p>By its name.</p>
<p>This code helps you let's you decide, based on the name of the Jenkins project if you are running under production or development.</p>
<pre><code>if (currentBuild.projectName == 'production-name') {
    println(&quot;Production code&quot;)
} else {
    println(&quot;Development code&quot;)
}
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bailador</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-01-01T07:30:02Z</updated>
    <pubDate>2020-01-01T07:30:02Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bailador" />
    <id>https://code-maven.com/bailador</id>
    <content type="html"><![CDATA[<p><a href="https://github.com/bailador">Bailador</a> was a light-weight web framework that is written in the <a href="/raku">Raku programming language</a>.</p>
<p>I contributed a bit to that project and created the web site of the project, but the project is not maintained any more and the website was shut down.</p>
<p>In any case you can find the sources in the <a href="https://github.com/bailador">Bailador GitHub project</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Shopping list</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2020-01-01T07:30:01Z</updated>
    <pubDate>2020-01-01T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/shopping-list" />
    <id>https://code-maven.com/shopping-list</id>
    <content type="html"><![CDATA[<p>Create a shopping list application.</p>
<p>See other <a href="/exercises">projects and exercises</a>.</p>
<ul>
<li>
<p>A one-line window to enter some text.</p>
</li>
<li>
<p>An ADD button.</p>
</li>
<li>
<p>A place where you can see the list of items added.</p>
</li>
<li>
<p>Save the list in a file or a database.</p>
</li>
<li>
<p>When opening the application again, show the list saved in the file.</p>
</li>
<li>
<p>Allow the user to remove an item.</p>
</li>
<li>
<p>Allow the user to edit an item.</p>
</li>
<li>
<p>Allow the user to mark an item as &quot;bought&quot;.</p>
</li>
<li>
<p>Save the shooping list by date so it can be shown later.</p>
</li>
<li>
<p>Clear the currently list to start over.</p>
</li>
<li>
<p>Allow the user to see statistics on which items were bought.</p>
</li>
<li>
<p>When adding new items, offer items that were previously bought.</p>
</li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li>Partial solution in <a href="https://github.com/szabgab/shopping-list">Python Flask</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How to set the job number and description for a Jenkinsfile in a Jenkins Pipeline?</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-12-07T09:35:01Z</updated>
    <pubDate>2019-12-07T09:35:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-set-job-name-and-description" />
    <id>https://code-maven.com/jenkins-pipeline-set-job-name-and-description</id>
    <content type="html"><![CDATA[<pre><code>currentBuild.displayName = &quot;hello&quot;  // replaces the job number
currentBuild.description = &quot;world&quot;  // Writes text under the job number
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins triggers: Periodic polling</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-12-07T08:30:01Z</updated>
    <pubDate>2019-12-07T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-triggers" />
    <id>https://code-maven.com/jenkins-triggers</id>
    <content type="html"><![CDATA[<p>For a Continuous Integration system ideally the Version Control system should trigger the Jenkins jobs when new code was piushed out, but sometimes this is not possible.
The next best thing is to let Jenkins periodically check for anything new.</p>
<h2 class="title is-4">Jenkins periodic polling</h2>
<p>Check the Version Control System every minute if there were changes since the last time.</p>
<pre><code>triggers {
    pollSCM '* * * * *'
}
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CI notification strategy</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-11-28T21:30:01Z</updated>
    <pubDate>2019-11-28T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ci-notification-strategy" />
    <id>https://code-maven.com/ci-notification-strategy</id>
    <content type="html"><![CDATA[<p>A recommended notification strategy for CI systems</p>
<h2 class="title is-4">Email notification:</h2>
<ul>
<li>On failure send message TO the most recent comitter and CC the team.</li>
<li>On the first success after a failure send message TO the most recent comitter and CC the team.</li>
<li>On regular success send message TO the most recent comitter (and not to the team).</li>
</ul>
<p>In every case the subject should start with the same text, eg. [TEAM-NAME CI] to make it easy to filter, followed by the status: FAILURE, FIXED, SUCCESS respectively.</p>
<p>Normally failure in the CI system should be a rare event, but when it happens we want everyone to know about it and we want everyone to look at the problem. Both in order to be able to help fixing it and to
learn from the mistakes. Even if they were made by some other people.</p>
<p>We would want to send notification on the first success after failure to everyone so if they were looking at the problem they know they can now relax. Also if someone looks at their e-mail later, we would
like them to be able to easily see that the problem was already fixed. Besides, if the failure event is rare then this is also rare.</p>
<p>Finally we would want to send a notification to the most recent comitter on the plain success of the CI system so s/he get a nice confirmation that their work was integrated properly.</p>
<h2 class="title is-4">Chat system (Slack, IRC, etc.) notifications.</h2>
<p>Like in e-mail but TO is replaced by DM (Direct Message) and CC-the team is replaced by a message to the central channel of the team.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Single counter with simple text file using Go</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-11-19T23:30:01Z</updated>
    <pubDate>2019-11-19T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/counter-using-go" />
    <id>https://code-maven.com/counter-using-go</id>
    <content type="html"><![CDATA[<p>This is a <a href="/counter">counter example</a> written in <a href="/go">Go</a>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/go-counter/counter.go">examples/go-counter/counter.go</a></strong></p>
<pre><code class="language-go">package main

import (
    &quot;fmt&quot;
    &quot;os&quot;
    &quot;bufio&quot;
    &quot;strconv&quot;
    &quot;strings&quot;
)

func main() {
    filename := &quot;counter.txt&quot;
    var fh *os.File

    counter := 0
    _, err := os.Stat(filename)
    if !os.IsNotExist(err) {
        fh, _ = os.Open(filename)
        reader := bufio.NewReader(fh)
        var line string
        line, err := reader.ReadString('\n')
        if err != nil {
            fmt.Println(&quot;error&quot;)
            fmt.Println(err)
            os.Exit(1)
        }
        line = strings.TrimSuffix(line, &quot;\n&quot;)
        counter, err = strconv.Atoi(line)
        if err != nil {
            fmt.Println(&quot;error&quot;)
            fmt.Println(err)
            os.Exit(1)
        }
    }

    counter++
    fmt.Printf(&quot;%d\n&quot;, counter)

    fh, err = os.Create(filename)
    if err == nil {
        fh.WriteString(fmt.Sprintf(&quot;%d\n&quot;, counter))
        fh.Close()
    }
}

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Enable Travis-CI for Continuous Integration</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-10-04T08:30:01Z</updated>
    <pubDate>2019-10-04T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/enable-travis-ci-for-continous-integration" />
    <id>https://code-maven.com/enable-travis-ci-for-continous-integration</id>
    <content type="html"><![CDATA[<p><a href="https://travis-ci.org/">Travis-CI</a> provides Continuous Integration for projects in GitHub repositories. For public repositories it is even free.</p>
<p>In other words, if Travis-CI is enabled and configured for your GitHub repository, then every time you <code>push</code> changes out to GitHub,
Travis-CI will automatically run the test on the latest commit.</p>
<p>This is great, as it means you can get feedback for your changes within a few minutes.</p>
<h2 class="title is-4">You received a Pull Request adding .travis.yml to your repo?</h2>
<p>If you have just received a Pull-Request adding .travis.yml to your repository, then you only need to tell Travis to
start looking for it. For this you nee to visit <a href="https://travis-ci.org/">https://travis-ci.org/</a>, login with
your GitHub credentials and allot Travis to access your public repositories.</p>
<p>It needs access because it needs to be able to add a trigger to it so Travis will be notified when there are changes in your repositories.
It also needs to be able to notify GitHub about the status of the most recent build process.</p>
<p>Once you have enabled that Travis will read the list of your repositories.</p>
<p>Visit the top-right corner of your Travis account and click on &quot;Settings&quot;. Find the name of the specific repository for
which you'd like to enable Travis-CI and flip the toggle to &quot;on&quot;.</p>
<p>That's it. If you merge the Pull-request now, Travis will notice it and will start to run the process within seconds.</p>
<p>From now on any time you push to your repository or any time someone sends you a Pull-Request the Travis-CI process will
run and report you any failures.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Golang</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-09-14T10:00:01Z</updated>
    <pubDate>2019-09-14T10:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/go" />
    <id>https://code-maven.com/go</id>
    <content type="html"><![CDATA[<ul>
<li><a href="/skeleton-go-program">Skeleton Go program - error messages in Go</a></li>
<li><a href="/counter-using-go">Single counter with simple text file using Go</a></li>
</ul>
<h2 class="title is-4">Go course</h2>
<ul>
<li><a href="/golang-getting-started-with-the-course">Getting started with the Golang course.</a></li>
<li><a href="/golang-why-use-go-the-features-of-golang">Why use Go? The features of Golang.</a></li>
<li><a href="/golang-go-and-open-source">Go and Open Source</a></li>
<li><a href="/golang-install-go-compiler">Install the Go compiler</a></li>
</ul>
<p>See the <a href="https://code-maven.com/slides/golang/">slides of my Go workshop</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>HAProxy</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-09-07T11:10:01Z</updated>
    <pubDate>2019-09-07T11:10:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/haproxy" />
    <id>https://code-maven.com/haproxy</id>
    <content type="html"><![CDATA[<p><a href="https://tecadmin.net/how-to-configure-haproxy-statics/">how-to-configure-haproxy-statics</a></p>
<p><a href="https://www.haproxy.com/blog/the-four-essential-sections-of-an-haproxy-configuration/">the-four-essential-sections-of-an-haproxy-configuration</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/haproxy/haproxy.cfg">examples/haproxy/haproxy.cfg</a></strong></p>
<pre><code class="language-cfg">/etc/haproxy/haproxy.cfg

frontend home
   bind 127.0.0.1:3000
   use_backend flask

backend flask
   balance roundrobin
   server server1 127.0.0.1:5001
   server server1 127.0.0.1:5002

listen stats
   bind :9000
   stats enable
   stats hide-version
   stats refresh 30s
   stats show-node
   stats uri /stats



</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/haproxy/web.py">examples/haproxy/web.py</a></strong></p>
<pre><code class="language-python">from flask import Flask, request
import sys
from datetime import datetime
app = Flask(__name__)

@app.route(&quot;/&quot;)
def hello():
   return 'Hello &lt;br&gt;Running on port {}&lt;br&gt;Loaded at {}'.format(port, datetime.now())


if __name__ == &quot;__main__&quot;:
   if len(sys.argv) &lt; 2:
       exit(&quot;Need port number&quot;)
   port = int(sys.argv[1])
   app.run(port = port)


</code></pre>
<p>python web.py 5001</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Testing with PyTest</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-08-20T07:10:01Z</updated>
    <pubDate>2019-08-20T07:10:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/testing-with-pytest" />
    <id>https://code-maven.com/testing-with-pytest</id>
    <content type="html"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/nznkU7Em5ns" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p><a href="http://pyvideo.org/pycon-israel-2017/testing-with-pytest.html">Testing with PyTest  on PyVideo</a></p>
<p>This presentation was recorded at <a href="http://il.pycon.org/2017/">PyCon Israel 2017</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>ps does not show name of the shell script only -bash or bash - Linux</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-08-12T07:30:01Z</updated>
    <pubDate>2019-08-12T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ps-does-not-show-name-of-script" />
    <id>https://code-maven.com/ps-does-not-show-name-of-script</id>
    <content type="html"><![CDATA[<p>Recently, on a CentOS box I've noticed that when I run <code>ps -ef</code> or <code>ps axuw</code> some of my scripts don't show
up. I also checked this on Ubuntu 19.04 with similar results.</p>
<p>TLDR: add <code>#!/bin/bash</code> as the first line of your Bash script.</p>
<p>I ran a little experiment.</p>
<p>Created a script called <b>hello.sh</b> with the following content:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/hello.sh">examples/shell/hello.sh</a></strong></p>
<pre><code class="language-bash">echo $$
sleep 100


</code></pre>
<p>Made it executable: <code>chmod +x hello.sh</code> and ran it:</p>
<pre><code>./hello.sh &amp;
</code></pre>
<p>I tried to see if I can find the process using ps and grepping for the name of the process, but it did not show up.</p>
<pre><code>ps -ef | grep hello
</code></pre>
<p>Then I did the same but this time grepping for the process ID. (That's why I printed it in my experimental script.)</p>
<pre><code>ps -ef | grep 12345
</code></pre>
<p>This time I saw the process and the name of the process was <code>-bash</code>.</p>
<h2 class="title is-4">sh-bang line</h2>
<p>Usually in Linux/Unix the first line of each script should point to the command that will be able to interpret the code
in the file. It is called <a href="https://en.wikipedia.org/wiki/Shebang_(Unix)">sh-bang</a>.</p>
<p>I've added it to the script (and renamed it becasue the web site can only have one file with the same name):</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/hello_again.sh">examples/shell/hello_again.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash

echo $$
sleep 100


</code></pre>
<p>Making this executable: <code>chmod +x hello_again.sh</code> and runing this the same way: <code>./hello_again.sh</code>.
This time the full name showed up in the output of <code>ps</code>.</p>
<h2 class="title is-4">Running with bash</h2>
<p>I tried also running it with <code>bash</code> like this:</p>
<pre><code>bash hello_again.sh
</code></pre>
<p>On Ubuntu it seems it showd up with the full name, but as I recall in CentOS it had the same result as the first
version, showing up only as <code>-bash</code>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Elasticseach administrative and configuration commands</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-07-20T12:30:01Z</updated>
    <pubDate>2019-07-20T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/elastic-search-administration" />
    <id>https://code-maven.com/elastic-search-administration</id>
    <content type="html"><![CDATA[<p>Just some random <code>curl</code> command that help me with the administration and the configuration of an Elasticsearch
cluster.</p>
<p>List of cats:</p>
<pre><code>http://localhost:9200/_cat/
</code></pre>
<p>List indices:</p>
<pre><code>http://localhost:9200/_cat/indices?v
</code></pre>
<p>Health of the system (should contain the word green)</p>
<pre><code>http://localhost:9200/_cat/health
</code></pre>
<pre><code>http://localhost:9200/_all/_settings
</code></pre>
<p>The health of the cluster:</p>
<pre><code>http://localhost:9200/_cluster/health
</code></pre>
<p>Cluster settings</p>
<pre><code>curl http://localhost:9200/_cluster/settings
</code></pre>
<p>Delete index:</p>
<pre><code>curl  -X DELETE http://localhost:9200/index-name
</code></pre>
<p>Set temporary (transient) the low disk watermark</p>
<pre><code>curl -X PUT http://localhost:9200/_cluster/settings  -H &quot;Content-Type: application/json&quot;  -d '{ &quot;transient&quot;: {&quot;cluster.routing.allocation.disk.watermark.low&quot;: &quot;5%&quot; } }'
</code></pre>
<p>Set the number of replicas to 1</p>
<pre><code>curl -X PUT http://localhost:9200/experimental/_settings  -H &quot;Content-Type: application/json&quot;  -d '{ &quot;index&quot;: {&quot;number_of_replicas&quot; : 1} }'
</code></pre>
<p>Tell the index to have no replicas. That is to have exactly one copy of each piece of data. No redundancy.
Useful if you only have a single node in your &quot;cluster&quot;.</p>
<pre><code>curl -X PUT http://localhost:9200/experimental/_settings  -H &quot;Content-Type: application/json&quot;  -d '{ &quot;index&quot;: {&quot;number_of_replicas&quot; : 0} }'
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bash set -e to stop script on failure</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-07-20T12:00:01Z</updated>
    <pubDate>2019-07-20T12:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bash-set-e" />
    <id>https://code-maven.com/bash-set-e</id>
    <content type="html"><![CDATA[<p>Normally if one of the commands executed by a shell script fails it set an exit code different from 0, but the script
will not stop. In some cases this might be the proper behavior, but in many cases, especially in a CI system
you'll probably want your shell script to fail of one of its commands failed.</p>
<p>The <code>-e</code> tells Bash to stop immediately if one of the statements it executes has an exit-code different from 0.</p>
<h2 class="title is-4">Exit code</h2>
<p>Every command you run on the command line of Linux has an exit code. 0 indicates success. Any other number is a failure.
The variable <code>$?</code> contains the exit-code of the previous command.</p>
<p>E.g. a successful command:</p>
<pre><code>$ ls
...  (the content of the directory)

$ echo $?
0
</code></pre>
<p>A failed command:</p>
<pre><code>$ ls some-place-that-does-not-exist
ls: cannot access 'some-place-that': No such file or directory

$ echo $?
2
</code></pre>
<h2 class="title is-4">Shell script without -e</h2>
<p>In this script we have 3 commands. The 2nd fails, but it does not bother the main script. It keeps working and
executes the 3rd command.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/no-set-e.sh">examples/shell/no-set-e.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash

echo &quot;Start&quot;

ls some-incorrect-path

echo &quot;Still working&quot;



</code></pre>
<pre><code>$ ./examples/shell/no-set-e.sh
Start
ls: cannot access 'some-incorrect-path': No such file or directory
Still working


$ echo $?
0
</code></pre>
<p>Not only that, but the whole script indicates success (its own exit code is set to be 0) even thought some part of it
have failed.</p>
<h2 class="title is-4">Shell script with -e</h2>
<p>We can set the <code>-e</code> either on the sh-bang line or with the <code>set -e</code> command.
We can turn it off using the <code>set +e</code> command.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/set-e.sh">examples/shell/set-e.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash -e

echo &quot;Start&quot;

ls some-incorrect-path

echo &quot;Still working&quot;




</code></pre>
<pre><code>$ ./examples/shell/set-e.sh
Start
ls: cannot access 'some-incorrect-path': No such file or directory

$ echo $?
2
</code></pre>
<p>Here, as you can see, after the 2nd command fails, the whole script stops and the exit-code of the script is set
to a non-zero number indicating failure.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bash set -x to print statements as they are executed</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-07-20T11:30:01Z</updated>
    <pubDate>2019-07-20T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bash-set-x" />
    <id>https://code-maven.com/bash-set-x</id>
    <content type="html"><![CDATA[<p>Setting the <code>-x</code> tells Bash to print out the statements as they are being executed.
It can be very useful as a logging facility and for debugging when you need to know which statements were execute and
in what order.</p>
<p>It can be enabled on the command line or on the sh-bang line by providing <code>-x</code> or by the <code>set -x</code> statement.</p>
<p>It can be disabled using the <code>set +x</code> statement.</p>
<p>See this example:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/set-x.sh">examples/shell/set-x.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash -x

name=&quot;Foo&quot;
echo $name

set +x

age=42
echo $age


set -x

language=Bash
echo $language

</code></pre>
<p>and the output it generates:</p>
<pre><code>$ ./examples/shell/set-x.sh

+ name=Foo
+ echo Foo
Foo
+ set +x
42
+ language=Bash
+ echo Bash
Bash
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Git: Check for conflicts before merge</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-06-26T21:30:01Z</updated>
    <pubDate>2019-06-26T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/git-check-for-conflicts-before-merge" />
    <id>https://code-maven.com/git-check-for-conflicts-before-merge</id>
    <content type="html"><![CDATA[<p>How can we check if a merge is going to create a conflict or not without actually doing the merge.</p>
<p>Apparently there is no single command for this, but it is easy to do:</p>
<pre><code>git merge --no-commit --no-ff BRANCH-TO-MERGE
echo $?
git merge --abort
</code></pre>
<p>The first command will try to merge, but without committing the change and without fast-forwarding.</p>
<p>This command will succeed if the merge can be executed and it will fail if there is a conflict.
So we can check if the exit code <code>$?</code> was 0 (success) of non-zeo (failure).
Then we have to clean up the partial merge.</p>
<h2 class="title is-4">Sequence to demonstrate</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/check_for_conflict.sh">examples/check_for_conflict.sh</a></strong></p>
<pre><code class="language-bash">git init
echo 1 &gt; README
git add README
git commit -m 1
git checkout -b conflict
echo &quot;2 in conflict&quot; &gt;&gt; README
git add .
git commit -m &quot;2 in conflict&quot;
git checkout master
git checkout -b simple
echo 1 &gt; OTHER
git add .
git commit -m &quot;other&quot;
git checkout master
echo 2 &gt;&gt; README
cat README
git add .
git commit -m &quot;2 in master&quot;
git checkout -b fast
echo f &gt; FAST
git add .
git commit -m &quot;fast&quot;
git checkout master
git status
git merge --no-commit --no-ff fast
echo $?
git status
git merge --abort
git status
git merge --no-commit --no-ff simple
echo $?
git status
git merge --abort
git status
git merge --no-commit --no-ff conflict
echo $?
git status
git merge --abort

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Elastic Search - updating complex data structure</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-06-25T06:30:01Z</updated>
    <pubDate>2019-06-25T06:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/elastic-search-snippets" />
    <id>https://code-maven.com/elastic-search-snippets</id>
    <content type="html"><![CDATA[<p>Just some snippets for experimenting with ElasticSearch</p>
<pre><code>GET _search
{
  &quot;query&quot;: {
    &quot;match_all&quot;: {}
  }
}
</code></pre>
<pre><code>POST /exp/experiments/
{
    &quot;name&quot; :&quot;Blue experiment&quot;,
    &quot;state&quot;: &quot;running&quot;,
    &quot;message&quot;: [
      {
        &quot;txt&quot; : &quot;start&quot;,
        &quot;ts&quot;: &quot;2018-01-01T07:30:01&quot;,
        &quot;status&quot; : &quot;received&quot;
      }
    ]
}
</code></pre>
<pre><code>POST /exp/experiments/
{
    &quot;name&quot; : &quot;Green experiment&quot;,
    &quot;state&quot;: &quot;running&quot;,
    &quot;message&quot;: [
      {
        &quot;txt&quot; : &quot;start&quot;,
        &quot;ts&quot;: &quot;2018-01-02T07:30:01&quot;,
        &quot;status&quot; : &quot;received&quot;
      }
    ]
}
</code></pre>
<pre><code>GET /exp/experiments/_search
</code></pre>
<pre><code># PUT /exp/experiments/1234
# same as POST but specifies the _id of the document

# POST and PUT both &quot;index&quot; a document
# DELETE /exp   deleting the whole index
</code></pre>
<pre><code>POST /exp/experiments/_bulk
{ &quot;index&quot; : { &quot;_id&quot; : 1 }}
{...}
{ &quot;index&quot; : { &quot;_id&quot; : 2 }}
{...}
</code></pre>
<pre><code>GET /exp/experiments/_search
{
  &quot;query&quot;: {
    &quot;match&quot;: {
      &quot;name&quot;: &quot;experiment&quot;
    }
  }
}
# match looking for single word
# match_phrase looking for the phrase (multiple words) in that order
</code></pre>
<pre><code>PUT /test/_doc/1
{
  &quot;counter&quot;: 0,
  &quot;name&quot; : &quot;Foo&quot;,
  &quot;tags&quot; : [&quot;apple&quot;, &quot;banana&quot;]
}
</code></pre>
<pre><code>POST /test/_doc/1/_update
{
    &quot;script&quot; : {
        &quot;source&quot;: &quot;ctx._source.counter += params.count&quot;,
        &quot;lang&quot;: &quot;painless&quot;,
        &quot;params&quot; : {
            &quot;count&quot; : 4
        }
    }
}
</code></pre>
<pre><code>POST /test/_doc/1/_update
{
    &quot;script&quot; : {
        &quot;source&quot;: &quot;ctx._source.tags.add(params.tag)&quot;,
        &quot;lang&quot;: &quot;painless&quot;,
        &quot;params&quot; : {
            &quot;tag&quot; : &quot;peach&quot;
        }
    }
}
</code></pre>
<pre><code>DELETE /test
GET /test/_doc/_search
GET /test/_mapping/_doc
</code></pre>
<pre><code>POST /test/_doc/1/_update
{
    &quot;script&quot; : &quot;ctx._source.new_field = 'value_of_new_field'&quot;
}
POST /test/_doc/1/_update
{
    &quot;script&quot; : &quot;ctx._source.remove('ppl')&quot;
}
POST /test/_doc/1/_update
{
    &quot;script&quot; : &quot;ctx._source.tags._index.0 = 'xxx'&quot;
}
</code></pre>
<pre><code>POST /test/_doc/1/_update
{
    &quot;script&quot; : &quot;ctx._source.ppl = params.people&quot;,
    &quot;params&quot; : {
      &quot;people&quot; : &quot;xxx&quot;
    }
}
</code></pre>
<pre><code>POST /test/_update_by_query
{
  &quot;script&quot;: {
    &quot;source&quot;: &quot;ctx._source.counter++&quot;,
    &quot;lang&quot;: &quot;painless&quot;
  },
  &quot;query&quot;: {
    &quot;term&quot;: {
      &quot;_id&quot;: 1
    }
  }
}
</code></pre>
<pre><code>PUT /test/_doc/2
{
  &quot;counter&quot;: 0,
  &quot;name&quot; : &quot;Foo&quot;,
  &quot;internal&quot; : {
    &quot;counter&quot; : 0
  },
  &quot;tags&quot; : [&quot;apple&quot;, &quot;banana&quot;],
  &quot;ppl&quot;  : [
     {&quot;name&quot;: &quot;Foo&quot;, &quot;age&quot; : 23},
     { &quot;name&quot; : &quot;Bar&quot;, &quot;age&quot; : 19}
  ]
}
</code></pre>
<pre><code>POST /test/_update_by_query
{
  &quot;script&quot;: {
    &quot;source&quot;: &quot;ctx._source.internal.counter++&quot;,
    &quot;lang&quot;: &quot;painless&quot;
  },
  &quot;query&quot;: {
    &quot;term&quot;: {
      &quot;_id&quot;: 2
    }
  }
}
</code></pre>
<pre><code>POST /test/_update_by_query
{
  &quot;script&quot;: {
    &quot;source&quot;: &quot;ctx._source.ppl.0.age++&quot;,
    &quot;lang&quot;: &quot;painless&quot;
  },
  &quot;query&quot;: {
    &quot;term&quot;: {
      &quot;_id&quot;: 2
    }
  }
}
</code></pre>
<pre><code>GET /test/_doc/_search
POST /test/_update_by_query
{
  &quot;script&quot;: {
    &quot;source&quot;: &quot;ctx._source.ppl.add(params.person)&quot;,
    &quot;lang&quot;: &quot;painless&quot;,
    &quot;params&quot;: {
      &quot;person&quot;: {
        &quot;name&quot; : &quot;Zorg&quot;,
        &quot;age&quot; : 100
      }
    }
  },
  &quot;query&quot;: {
    &quot;term&quot;: {
      &quot;_id&quot;: 2
    }
  }
}

POST /test/_update_by_query
{
  &quot;script&quot;: {
    &quot;source&quot;: &quot;ctx._source.ppl.remove(0)&quot;,
    &quot;lang&quot;: &quot;painless&quot;
  },
  &quot;query&quot;: {
    &quot;term&quot;: {
      &quot;_id&quot;: 2
    }
  }
}

POST /test/_update_by_query
{
  &quot;script&quot;: {
    &quot;source&quot;: &quot;ctx._source.ppl.0.address = 'Middle Earth'&quot;,
    &quot;lang&quot;: &quot;painless&quot;
  },
  &quot;query&quot;: {
    &quot;term&quot;: {
      &quot;_id&quot;: 2
    }
  }
}

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bash: parsing command line arguments with getopt</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-06-17T07:30:01Z</updated>
    <pubDate>2019-06-17T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bash-getopt-processing-command-line-arguments" />
    <id>https://code-maven.com/bash-getopt-processing-command-line-arguments</id>
    <content type="html"><![CDATA[<p>In this example we have a function that can optionally! accept the following parameters:</p>
<pre><code>-v
-d
--debug
--name VALUE
</code></pre>
<p>The call to <gl>getopt<code>defines the accepted names. The</code>-o dv<code>defines that we accept two short switches</code>-v<code>and</code>-d<code>. The </code>--long debug<code>defines that we accept the</code>--debug<code>switch. The</code>--long name:<code>defines that we accept the</code>--name` option followed by some value.</p>
<p>Then we have a whole <code>while</code> loop to actually take out the values from the list on the comand line
and to assign the appropriate values to variables.
Either 1 to the variables representing the switches, or the actual value passed to the <code>--name</code> option.</p>
<p>At the end we need to call this function with the <code>args $0 &quot;$@&quot;</code> expression.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/cli.sh">examples/shell/cli.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash

function args()
{
    options=$(getopt -o dv --long debug --long name: -- &quot;$@&quot;)
    if [ $? -ne 0 ]; then
        echo &quot;Incorrect option provided&quot;
        exit 1
    fi
    eval set -- &quot;$options&quot;
    while true; do
        case &quot;$1&quot; in
        -v)
            VERBOSE=1
            ;;
        -d)
            DEBUG=1
            ;;
        --debug)
            DEBUG=1
            ;;
        --name)
            shift; # The arg is next in position args
            NAME=$1
            ;;
        --)
            shift
            break
            ;;
        esac
        shift
    done
}

args $0 &quot;$@&quot;

echo $NAME
echo $DEBUG
echo $VERBOSE



</code></pre>
<h2 class="title is-4">An example calling it</h2>
<pre><code>$ ./cli.sh --name &quot;Foo Bar&quot; --debug -v

Foo Bar
1
1
</code></pre>
<pre><code>$ ./cli.sh --wrong

getopt: unrecognized option '--wrong'
Incorrect option provided
</code></pre>
<h2 class="title is-4">If condition in bash</h2>
<p>I used to have this, in the above code:</p>
<pre><code>[ $? -eq 0 ] || {
    echo &quot;Incorrect option provided&quot;
    exit 1
}
</code></pre>
<p>This is I think the shell-style meaning:</p>
<p>&quot;Either the previous command is successful (exit 0)  or <code>||</code> do the block (echo and exit)&quot;.</p>
<p>Later I realized using <code>if</code> would make it much more readable so I changed it to:</p>
<pre><code>if [ $? -ne 0 ]; then
    echo &quot;Incorrect option provided&quot;
    exit 1
fi
</code></pre>
<p>They both do the same.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>R&amp;D at The Black List</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-06-13T07:30:01Z</updated>
    <pubDate>2019-06-13T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rnd-the-black-list" />
    <id>https://code-maven.com/rnd-the-black-list</id>
    <content type="html"><![CDATA[<p><a id="rnd-logo" href="https://blcklst.com/"><img src="/img/rnd/the-black-list.png" alt="The Black List logo"></a></p>
<div class="rnd-author">
  <img class="rnd-author-img" src="/img/rnd/dino-simone.png" alt="Dino Simone">
  [Dino Simone](https://www.linkedin.com/in/dinosimone/) - Co-founder and CTO of The Black List.
  <p>
  [The Black List](https://blcklst.com/) is a Los Angeles based screenplay discovery and evaluation platform.
  We're a home to over 60,000 screenwriters and have hosted nearly 70,000 screenplays since our inception in 2012.
</div>
<div class="qa">
  <div class="question">
    What kind of products / services does your company develop / maintain? (web based, mobile, desktop, on-site appliance, embedded, hardware, etc.)
  </div>
  <div class="answer">
Web based.
  </div>
</div>
<div class="qa">
  <div class="question">
    Number of engineers:
  </div>
  <div class="answer">
Total team size is 8 with 2 full stack engineers. We also have hundreds of freelance professional readers who evaluate screenplays using our proprietary routing and queuing technology.
  </div>
</div>
<div class="qa">
  <div class="question">
    Are there any remote engineers? (If yes, how does that work out?)
  </div>
  <div class="answer">
All of engineering work is conducted remotely. We find remote work to be efficient and cost effective. Tools such as <a
href="https://slack.com/">Slack</a> and [Github](https://github.com/) are obviously crucial to being able to collaborate and get work done.
  </div>
</div>
<div class="qa">
  <div class="question">
Are the remote developers in the same time zone? Do you have all your communication asynchronous or do you have on-line meetings? How? How often?
  </div>
  <div class="answer">
Team is geographically dispersed between California, Massachusetts and Vermont.
Developers are on same time zone on the east coast.
We do both scheduled online meetings (once per week) and some asynchronous communication via email / Slack throughout the week.
  </div>
</div>
<div class="qa">
  <div class="question">
    What are the most common tools that engineers use?
  </div>
  <div class="answer">
Our team uses a combination of engineering and communication tools:
    <ul>
      <li>[Vim](https://www.vim.org/) for development</li>
      <li>[AWS CLI](https://aws.amazon.com/cli/)</li>
      <li>[Airbrake](https://airbrake.io/) for error monitoring</li>
      <li>[BrowserStack](https://www.browserstack.com/) for test automation</li>
      <li>[Castle.io](https://castle.io/)</li>
      <li>[Chrome developer tools](https://developers.google.com/web/tools/chrome-devtools/)</li>
      <li>[Kali Linux](https://www.kali.org/) for auditing & vulnerability testing</li>
      <li>[Jira](https://www.atlassian.com/software/jira) for project management and sprints</li>
      <li>Slack / Google Hangouts</li>
    </ul>
  </div>
</div>
<div class="qa">
  <div class="question">
    Which languages do engineers code in?
  </div>
  <div class="answer">
    <ul>
      <li>Mainly modern [Perl](https://www.perl.org/)
               ([Moose](https://perlmaven.com/moose) /
               [Mason](https://metacpan.org/pod/HTML::Mason) /
               [Catalyst](https://perlmaven.com/catalyst))</li>
      <li>[jQuery](https://jquery.com/) and [Foundation](https://foundation.zurb.com/) on the front-end</li>
    </ul>
  </div>
</div>
<div class="qa">
  <div class="question">
    Which operating systems do you use?
  </div>
  <div class="answer">
    <ul>
       <li>AWS Linux</li>
       <li>Kali Linux</li>
       <li>Mac OS</li>
    </ul>
  </div>
</div>
<div class="qa">
  <div class="question">
    Which databases do you use?
  </div>
  <div class="answer">
  <ul>
    <li>[MariaDB](https://mariadb.org/)</li>
    <li>[Memcached](https://memcached.org/)</li>
  </ul>
  </div>
</div>
<div class="qa">
  <div class="question">
    What are the development environments? (OS, editor, Vagrant? Docker?)
  </div>
  <div class="answer">
We have a developer sandbox image that is identical to what we run on production. Individual developers have their own instances running on AWS where they write most of the code in Vim.
  </div>
</div>
<div class="qa">
  <div class="question">
Isn't using AWS for development slow?
  </div>
  <div class="answer">
Not particularly. There is the added step of having to SSH to one's development machine.
Besides that, it's not all that different from developing locally.
The advantage of this for us is being able to develop in an environment we know is identical to what we run on production so there are no surprises.
  </div>
</div>
<div class="qa">
  <div class="question">
    What is the system architecture? (Monolith, Microservices, Mix, etc...?)
  </div>
  <div class="answer">
When we started off, we were definitely a monolith. These days, it's a blend. While the core application is still somewhat of a monolith, we've been migrating to microservices whenever we see it to be appropriate.
  </div>
</div>
<div class="qa">
  <div class="question">
    Do you use "the cloud"? What kind of cloud infrastructure do you use?
  </div>
  <div class="answer">
We originally started in a data center on a single rack server. We migrated to Rackspace after that. While we enjoyed the amazing support provided by Rackspace, we knew that in order to scale we needed the power of AWS. We've been on AWS for a couple of years now.
  </div>
</div>
<div class="qa">
  <div class="question">
    What Agile practices do you employ? (Daily stand-up, Sprints, Retrospectives, ...)
  </div>
  <div class="answer">
We do weekly sprints. Our stand-ups are more like Slack-ups since engineering works remotely. We've taken the best principles of Scrum and adapted for a small team size.
  </div>
</div>
<div class="qa">
  <div class="question">
Could you elaborate the steps you took to introduce Agile principles? What were the obstacles and how did you overcome them?
  </div>
  <div class="answer">
I became a certified ScrumMaster by attending one of the live courses first. This was helpful because I was able to see the challenges that other people were going through and learn from some of the mistakes. We slowly introduced a more minimalist version of it at the Black List. It was fairly easy to implement because of our small size and we continue to use it to this day.
  </div>
</div>
<div class="qa">
  <div class="question">
    What does DevOps mean in your company? (Do you have a dedicated developer experience/developer tools team?)
  </div>
  <div class="answer">
We do not because of our small engineering team size. Engineers are responsible for some of the work that would traditionally be performed by a dedicated devops person.
  </div>
</div>
<div class="qa">
  <div class="question">
    Is anyone on-call? Who? (Developers, DevOps people, ...?)
  </div>
  <div class="answer">
Developers
  </div>
</div>
<div class="qa">
  <div class="question">
    What is the development process like? (The lifecycle of a piece of committed code, branching strategy. How do developers cooperate?)
  </div>
  <div class="answer">
Whether we're fixing a bug or building a new feature, we work within a separate branch. Features are tested on sandbox by a developer working on it and also a dedicated product manager. Once we're satisfied with a new feature, we merge and push it up to production. We push new code frequently and do not follow a specific release schedule.
  </div>
</div>
<div class="qa">
  <div class="question">
If your developers can push all the time to production, what does having sprints provide you?
  </div>
  <div class="answer">
Well, I think there is a myth that in scrum code can only be released at the end of the sprint.
For us, scrum is about commitment to working on certain tasks we can complete in one week's time.
We may or may not be ready to release that product or feature at the end of the week, but at the very least we can get some feedback on its functionality from our product team.
Sprints provide us with focus on rapid incremental development and feedback.
  </div>
</div>
<div class="qa">
  <div class="question">
    Do you practice pair-programming? Mob-programming?
  </div>
  <div class="answer">
We do not at this time.
  </div>
</div>
<div class="qa">
  <div class="question">
    Do you have code reviews? How often? What is code review like?
  </div>
  <div class="answer">
We do code reviews once or twice during the development cycle. This is mainly to ensure we're following best practices and that there are no obvious security vulnerabilities. We perform a code review by logging into a developer's machine and viewing the code directly. In a way, it's a bit like pair-programming without actually sitting next to each other.
  </div>
</div>
<div class="qa">
  <div class="question">
    How is testing done? (Manual QA? What kind of tests do you run? How long does a test cycle take?)
  </div>
  <div class="answer">
We do a lot of manual testing and some automated testing as well. However, we're in the process of expanding our automated testing suite with the help of Browserstack.
  </div>
</div>
<div class="qa">
  <div class="question">
    How is code released / deployed? (How often? Who can do it? Do you have staging environment? Deployment circles?)
  </div>
  <div class="answer">
As mentioned above, our staging consists of individual developer sandboxes that run a production image. We push new features and bug fixes frequently and do not follow any specific deployment schedule.
  </div>
</div>
<div class="qa">
  <div class="question">
    What is an average day-in-the-life of someone on one of the engineering teams?
  </div>
  <div class="answer">
Our focus is on getting work done and not working set hours. I'm very much a fan of David Hansson's ideology here. In engineering at least, I encourage our small team to take ownership of certain products and services. Our end goal is to deliver great products to our user base. If that means going for a run or having some family time during the day, and working in the evening instead, that's entirely fine.
  </div>
</div>
<div class="qa">
  <div class="question">
    Any disaster you could share with us?
  </div>
  <div class="answer">
In the early days, we hosted the site on a single rack server in a Boston data center. This was all we could afford at the time. I remember one night a hard drive crashed and I raced to the data center to replace it. Luckily, it had a RAID setup so no data was lost. However, it quickly made me realize we needed to switch to something more reliable. We moved to Rackspace shortly before a major public launch, and again later to AWS. I still have the old server we originally launched on. Some day when we're further along, I'll turn it on to check out the original site.
  </div>
</div>
<div class="qa">
  <div class="question">
    What was a major problem you as an engineering organization have encountered in the last year and how did you solve it?
  </div>
  <div class="answer">
We've gone through a number of site redesigns to get to the current look and feel. A little over a year ago we, we went through a major site overhaul where were ripped apart a lot of the front-end UI and switched to the Foundation Framework. This was challenging because every page was being rebuilt from scratch essentially. However, we knew it was a necessary move for a cleaner more intuitive UI.
  </div>
</div>
<div class="qa">
  <div class="question">
    What makes your company a special place to be an engineer?
  </div>
  <div class="answer">
One is the flexibility. The other is knowing that the work you do is having such a big impact on the lives of screenwriters all over the world who otherwise would never be able to break into the industry. There are also other perks like being able to attend certain major film festivals and meet interesting people along the way.
  </div>
</div>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ansible playbook remove directory</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-06-12T19:40:01Z</updated>
    <pubDate>2019-06-12T19:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ansible-playbook-remove-directory" />
    <id>https://code-maven.com/ansible-playbook-remove-directory</id>
    <content type="html"><![CDATA[<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/remove-directory.yml">examples/ansible/remove-directory.yml</a></strong></p>
<pre><code class="language-yaml">- hosts: 127.0.0.1
  vars:
    ansible_python_interpreter: /usr/bin/python3

  tasks:
    - name: Remove directory
      file:
        path: /tmp/somedir
        state: absent

</code></pre>
<pre><code>ansible-playbook remove-directory.yml
</code></pre>
<p>See also <a href="https://docs.ansible.com/ansible/latest/modules/file_module.html">Ansible file module</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ansible playbook remove file</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-06-12T19:35:01Z</updated>
    <pubDate>2019-06-12T19:35:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ansible-playbook-remove-file" />
    <id>https://code-maven.com/ansible-playbook-remove-file</id>
    <content type="html"><![CDATA[<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/remove-file.yml">examples/ansible/remove-file.yml</a></strong></p>
<pre><code class="language-yaml">- hosts: 127.0.0.1
  vars:
    ansible_python_interpreter: /usr/bin/python3

  tasks:
    - name: Remove file
      file:
        path: /tmp/hello.txt
        state: absent

</code></pre>
<pre><code>ansible-playbook remove-file.yml
</code></pre>
<p>See also <a href="https://docs.ansible.com/ansible/latest/modules/file_module.html">Ansible file module</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Unix/Linux Shell - Bash</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-05-24T07:30:01Z</updated>
    <pubDate>2019-05-24T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/shell" />
    <id>https://code-maven.com/shell</id>
    <content type="html"><![CDATA[<ul>
<li>
<p><a href="/bash-shell-substring">Bash shell substring</a></p>
</li>
<li>
<p><a href="/bash-absolute-path">Bash: get absolute path to current script</a></p>
</li>
<li>
<p><a href="/bash-shell-relative-path">Bash shell path relative to current script</a></p>
</li>
<li>
<p><a href="/bash-while-loop">Bash: while loop - break - continue</a></p>
</li>
<li>
<p><a href="/functions-in-shell">Functions in Linux shell (bash)</a></p>
</li>
<li>
<p><a href="/create-temporary-directory-on-linux-using-bash">Create temporary directory on Linux with Bash using mktemp</a></p>
</li>
<li>
<p><a href="/count-lines-in-a-file-and-divide-by-seconds-in-a-day">Count number of lines in a file and divide it by number of seconds in a day using Bash</a></p>
</li>
<li>
<p><a href="/measure-elapsed-time-in-shell">Measure elapsed time in Linux shell using time and date</a></p>
</li>
<li>
<p><a href="/number-of-files-in-several-directory-trees">Show number of files in several directory trees using Shell</a></p>
</li>
<li>
<p><a href="/number-of-files-in-a-directory-tree">Show number of files in a directory tree using Shell</a></p>
</li>
<li>
<p><a href="/bash-set-x">Bash set -x to print statements as they are executed</a></p>
</li>
<li>
<p><a href="/bash-set-e">Bash set -e to stop script on failure</a></p>
</li>
<li>
<p><a href="/ps-does-not-show-name-of-script">ps does not show name of the shell script only -bash or bash - Linux</a></p>
</li>
<li>
<p><a href="/bash-read-file-line-by-line">Read file line-by-line</a></p>
</li>
<li>
<p><a href="/slides/bash/">Bash scripting slides</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bash shell substring</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-05-22T23:30:01Z</updated>
    <pubDate>2019-05-22T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bash-shell-substring" />
    <id>https://code-maven.com/bash-shell-substring</id>
    <content type="html"><![CDATA[<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/substring.sh">examples/shell/substring.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash

text=&quot;Hello World!&quot;
echo $text

first=${text:0:4}
echo $first



middle=${text:4:4}
echo $middle

</code></pre>
<pre><code>Hello World!
Hell
o Wo
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bash shell path relative to current script</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-05-22T22:30:01Z</updated>
    <pubDate>2019-05-22T22:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bash-shell-relative-path" />
    <id>https://code-maven.com/bash-shell-relative-path</id>
    <content type="html"><![CDATA[<p>If you bash script then it is a good idea to make sure it does not matter where you put the script
and what is your current working directory when you run it.</p>
<p>If you have a large project written using bash then it is even more important to make it directory independent.
So developers can have the whole project in any location on their disk and it still functions.</p>
<p>In such case, however, how does a script find other files that come with the project? e.g. Imagaes or data files.</p>
<p>It is easy. Use relative pathes.</p>
<p>Let's say this is the directory structure of your project:</p>
<pre><code>project/
├── bin
│   └── code.sh
└── data
    └── names.txt
</code></pre>
<p>How can the &quot;code.sh&quot; reliably find the &quot;names.txt&quot; file?
It needs to find its own directory. Then go one directory up and then enter the &quot;data&quot; directory.</p>
<p>We can use the <code>realpath</code> and <code>dirname</code> command as we saw them in the
page about <a href="/bash-absolute-path">absolute path</a>.</p>
<p>We have a similar case in the code-maven directory tree. It looks like this, just a lot bigger:</p>
<pre><code>.
├── examples
│   ├── data
│   │   ├── airports.csv
│   │   └── words_to_sort.txt
│   ├── shell
│   │   ├── relative.sh
│   │   ├── relative_one.sh
│   │   ├── relative_project.sh
</code></pre>
<p>The point is, however, that getting from the <code>relative.sh</code> we need to go one directory up and then down the
&quot;data&quot; direcotry.</p>
<p>This script implements it step by step using <code>realpath</code> and then <code>dirname</code>:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/relative.sh">examples/shell/relative.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash

echo $0

full_path=$(realpath $0)
echo $full_path

dir_path=$(dirname $full_path)
echo $dir_path

examples=$(dirname $dir_path )
echo $examples

data_dir=&quot;$examples/data&quot;
echo &quot;DATA: $data_dir&quot;




</code></pre>
<pre><code>./examples/shell/relative.sh
/home/gabor/work/code-maven.com/examples/shell/relative.sh
/home/gabor/work/code-maven.com/examples/shell
/home/gabor/work/code-maven.com/examples
DATA: /home/gabor/work/code-maven.com/examples/data
</code></pre>
<p>In the following example we do it in one step:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/relative_one.sh">examples/shell/relative_one.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash

data_dir=&quot;$(dirname $(dirname $(realpath $0)) )/data&quot;
echo &quot;DATA: $data_dir&quot;


</code></pre>
<pre><code>DATA: /home/gabor/work/code-maven.com/examples/data
</code></pre>
<p>In the last example we split it into two steps and went a bit further.</p>
<p>In the first step we calculate the path to the root of the project, the root of our git repository.
(In our case it is the parent directory of the &quot;examples&quot; directory, that is 2 steps above the &quot;shell&quot; directory
so we call <code>dirname</code> 3 times. Once to get rid of the filename and then twice to move up the directory tre to the
root of the project. Then from there we can add the path of each file or directory relative to the root of the it
working directory.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/relative_project.sh">examples/shell/relative_project.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash

project_root=$(dirname $(dirname $(dirname $(realpath $0 ))))
echo $project_root

data_dir=&quot;$project_root/examples/data&quot;
echo &quot;DATA: $data_dir&quot;



</code></pre>
<pre><code>/home/gabor/work/code-maven.com
DATA: /home/gabor/work/code-maven.com/examples/data
</code></pre>
<p>As you can from the results, no matter which version you pick, it can point to the directory where the data is located.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bash: get absolute path to current script</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-05-22T21:30:01Z</updated>
    <pubDate>2019-05-22T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bash-absolute-path" />
    <id>https://code-maven.com/bash-absolute-path</id>
    <content type="html"><![CDATA[<p>There can be many reasons why you'd want to get the exact location of your currently running script.
For example to calculate the <a href="/bash-shell-relative-path">relative path</a> in a reliable way.</p>
<p>Luckily there is a command called <code>realpath</code> that will calculate and print the absolute path
of a given path.</p>
<p>Let's see how it works:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/absolute.sh">examples/shell/absolute.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash

echo $0

full_path=$(realpath $0)
echo $full_path

dir_path=$(dirname $full_path)
echo $dir_path


</code></pre>
<p><code>$0</code> is the name of the current script as it was executed. So if we run the script as <code>./examples/shell/absolute.sh</code>
then that will be the content of <code>$0</code>.</p>
<p><code>realpath</code> prints the abosulte path.</p>
<p><code>dirname</code> prints the directory name, leaving the last part of the path which is in this case the name of the
file.</p>
<p>Let's see a couple of examples:</p>
<pre><code>$ ./examples/shell/absolute.sh

./examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell
</code></pre>
<pre><code>$ cd examples/shell/
$ ./absolute.sh                                                      # run right where it is

./absolute.sh
/home/gabor/work/code-maven.com/examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell
</code></pre>
<pre><code>$ cd ../../sites/en                                                  # go to a cousin of the scripts directory
$ ../../examples/shell/absolute.sh                                   # run relatively from there

../examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell
</code></pre>
<pre><code>$ ln -s ../../examples/shell/                                        # create a symbolic link to the directory
$ ./shell/absolute.sh                                                # run using the symlink

./shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell
</code></pre>
<pre><code>$ ln -s ../../examples/shell/absolute.sh                             # create a symlink to the script
$ ./absolute.sh                                                      # run using the symlink

./absolute.sh
/home/gabor/work/code-maven.com/examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell
</code></pre>
<pre><code>$ /home/gabor/work/code-maven.com/examples/shell/absolute.sh         # run with full path

/home/gabor/work/code-maven.com/examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell
</code></pre>
<pre><code>$ export PATH=/home/gabor/work/code-maven.com/examples/shell:$PATH   # make sure the directory of the script is in the path
$ cd                                                                 # go home
$ absolute.sh                                                        # run without knowing where it is

/home/gabor/work/code-maven.com/examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell/absolute.sh
/home/gabor/work/code-maven.com/examples/shell
</code></pre>
<p>As you can see in every case <code>$</code> was exactly as we invoked the script. Except of the last case where we invoked
it by name only and relied on the content of the <code>PATH</code> environment variable and the shell to find the script.
In that case <b>$0</b> already contained the full path.</p>
<p>However the 2nd and 3rd line of output were exactly the same in every case.</p>
<p>So we can rely on the <code>realpath</code> to consistently return the real full path of the script.
Even if we execute it via a symbolic link.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Google Cloud shutdown script</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-05-17T07:30:01Z</updated>
    <pubDate>2019-05-17T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/gcloud-shutdown-script" />
    <id>https://code-maven.com/gcloud-shutdown-script</id>
    <content type="html"><![CDATA[<p>When you shut down a compute intance manual via the console, using gcloud, or when an a preemptible instance is
automatically shut down, you can arrange for a script to be executed.</p>
<p>In normal shutdown situation the script has 90 seconds to run, in preemptible automatic shutdown it has 30 seconds to
run before the computer is really shut down.</p>
<p>In order to try this</p>
<ul>
<li>Make sure your instance can access the internet.</li>
<li>ssh to the instance and run the following command to verify: <code>curl -s https://httpbin.org/get?time=$(date +%s)</code></li>
<li>Follow the <a href="https://cloud.google.com/compute/docs/shutdownscript">instructions to add a shutdown-script</a></li>
<li>start the instance, shut it down, start it again</li>
<li>check if /root/out.txt has been generated and if its content is similar to what the original curl returned.</li>
</ul>
<p>The shutdown-script:</p>
<pre><code>while true; do curl -s https://httpbin.org/get?time=$(date +%s) &gt;&gt; /root/out.txt ; sleep 5; done
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Serving web pages over IPv6 and IPv4 and verifying it</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-05-05T17:30:01Z</updated>
    <pubDate>2019-05-05T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/serving-web-on-ipv6" />
    <id>https://code-maven.com/serving-web-on-ipv6</id>
    <content type="html"><![CDATA[<p>Much slower than expected but <a href="https://en.wikipedia.org/wiki/IPv6">IPv6</a> seems to be gaining ground. I don't
have any general statistics, but all of the VPS hosting companies I work with support IPv6 and even at homes networks I
have encountered IPv6.</p>
<p>So on the network layer many of my users have IPv6 enabled, and my servers also have it, but how can I make sure the web
server also serves both IPv4 and IPv6?</p>
<p>I'll start with the verification as you will also need to do that both before you make changes - to see what are the
problems - and after you make changes - to see if you have managed to fix them.</p>
<h2 class="title is-4">IPv6 on the network</h2>
<pre><code>$ ping6 code-maven.com

PING code-maven.com(s7.hostlocal.com (2600:3c00::f03c:91ff:fedf:456f)) 56 data bytes
64 bytes from s7.hostlocal.com (2600:3c00::f03c:91ff:fedf:456f): icmp_seq=1 ttl=54 time=265 ms
64 bytes from s7.hostlocal.com (2600:3c00::f03c:91ff:fedf:456f): icmp_seq=2 ttl=54 time=286 ms
...
</code></pre>
<pre><code>$ ping4 code-maven.com

PING code-maven.com (173.255.196.65) 56(84) bytes of data.
64 bytes from s7 (173.255.196.65): icmp_seq=1 ttl=45 time=312 ms
64 bytes from s7 (173.255.196.65): icmp_seq=2 ttl=45 time=238 ms
...
</code></pre>
<h2 class="title is-4">Verify HTTP and HTTPs over IPv4 and IPv6</h2>
<p><a href="https://curl.haxx.se/">curl</a> allows us to send http request. It has a <code>-I</code> flag that tells it to only
display the header we get. There is also a <code>-4</code> flag that tells it to use IPv4 and a <code>-6</code> flag that makes
it use IPv6.</p>
<p>So here is how I can check the site:</p>
<p>First I make sure that the request to http will redirect to the corresponding https page when using IPv4:</p>
<pre><code>$ curl -I -4 http://code-maven.com/

HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Sun, 05 May 2019 15:44:47 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: https://code-maven.com/
</code></pre>
<p>Then verify the same over Ipv6:</p>
<pre><code>$ curl -I -6 http://code-maven.com/

HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Sun, 05 May 2019 15:48:09 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: https://code-maven.com/
</code></pre>
<p>I can check the redirection for the <a href="http://www.code-maven.com">www.code-maven.com</a> hostname as well.</p>
<p>Then I can verify if the https version serves the page. First over IPv4 and then over IPv6.
In each case I can use <code>-I</code> to see the header or leave out the <code>-I</code> and see the actual html
content returned.</p>
<pre><code>$ curl -I -4 https://code-maven.com/

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Sun, 05 May 2019 15:49:24 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 11559
Connection: keep-alive
</code></pre>
<pre><code>$ curl -I -6 https://code-maven.com/

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Sun, 05 May 2019 15:51:39 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 11510
Connection: keep-alive
</code></pre>
<h2 class="title is-4">Wrong configuration</h2>
<p>Before I fixed this domain I had results like this:</p>
<pre><code>$ curl -I -4 http://code-maven.com/

HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Sun, 05 May 2019 15:44:47 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: https://code-maven.com/
</code></pre>
<pre><code>$ curl -I -6 http://code-maven.com/

HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Sun, 05 May 2019 15:48:09 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: http://hostlocal.com/
</code></pre>
<p>That is, the http version over IPv4 redirected to the right place
while http over IPv6 redirected to a different site. (That was the default site on the specific server.)</p>
<h2 class="title is-4">How to configure Nginx to serve over both Ipv4 and IPv6</h2>
<p>I am using an old version of Ubuntu and thus an old version of Nginx. I think the defaults have changed since then and
you might not need all this configuration, but as far as I understand explicitly configuring this won't cause
problems even in newer versions of nginx.</p>
<p>Tell each <b>https</b> <code>server</code> section in your Nginx configuration to work on both IPv6 (the first row) and on IPv4 (second row):</p>
<pre><code>  listen    [::]:443 ssl;
  listen    443 ssl;
</code></pre>
<p>Tell each <b>http</b> <code>server</code> section in your Nginx configuration to work on both IPv6 (the first row) and on IPv4 (second row):</p>
<pre><code>  listen     [::]:80;
  listen     80;
</code></pre>
<p>Once you made the changes, reload nginx, and verify with <code>curl</code>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>The difference between annotated and simple git tags</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-05-01T21:00:01Z</updated>
    <pubDate>2019-05-01T21:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/git-tag-annotate" />
    <id>https://code-maven.com/git-tag-annotate</id>
    <content type="html"><![CDATA[<p><code>git tag</code></p>
<p><code>git tag -a annotation -m &quot;some message&quot;</code></p>
<p>The latter has its own annotator person and date and it can include a messge provided by the -m flag.</p>
<pre><code>$ mkdir experiment
$ cd experiment/
$ git init .
Initialized empty Git repository in /home/gabor/experiment/.git/
</code></pre>
<pre><code>$ touch README
$ git add .
$ git commit -m &quot;add readme&quot;
[master (root-commit) ab44956] add readme
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
</code></pre>
<pre><code>$ echo &quot;Hello World&quot; &gt; README
$ git add .
$ git commit -m &quot;add hw&quot;
[master 1f619d4] add hw
 1 file changed, 1 insertion(+)
</code></pre>
<pre><code>$ git tag simple
$ git tag -a annotated -m message
</code></pre>
<pre><code>$ git show HEAD
commit 1f619d4acb900ddfa1d69bbc7d0d0a59b3a184ee
Author: Gabor Szabo &lt;gabor@twiggle.com&gt;
Date:   Tue Apr 30 14:04:12 2019 +0300

    add hw

diff --git a/README b/README
index e69de29..557db03 100644
--- a/README
+++ b/README
@@ -0,0 +1 @@
+Hello World
</code></pre>
<pre><code>$ git show simple
commit 1f619d4acb900ddfa1d69bbc7d0d0a59b3a184ee
Author: Gabor Szabo &lt;gabor@twiggle.com&gt;
Date:   Tue Apr 30 14:04:12 2019 +0300

    add hw

diff --git a/README b/README
index e69de29..557db03 100644
--- a/README
+++ b/README
@@ -0,0 +1 @@
+Hello World
</code></pre>
<pre><code>$ git show annotated
tag annotated
Tagger: Gabor Szabo &lt;gabor@twiggle.com&gt;
Date:   Tue Apr 30 14:04:28 2019 +0300

message

commit 1f619d4acb900ddfa1d69bbc7d0d0a59b3a184ee
Author: Gabor Szabo &lt;gabor@twiggle.com&gt;
Date:   Tue Apr 30 14:04:12 2019 +0300

    add hw

diff --git a/README b/README
index e69de29..557db03 100644
--- a/README
+++ b/README
@@ -0,0 +1 @@
+Hello World
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins report the name of the stage that failed</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-05-01T20:30:01Z</updated>
    <pubDate>2019-05-01T20:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-report-failed-stage-name" />
    <id>https://code-maven.com/jenkins-report-failed-stage-name</id>
    <content type="html"><![CDATA[<p>Store the STAGE_NAME in a variable and read it in the post-section</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/report_stage.jenkinsfile">examples/jenkins/report_stage.jenkinsfile</a></strong></p>
<pre><code class="language-txt">
pipeline {
    agent { label 'master' }
    stages {
        stage('first') {
            steps {
                script {
                    last_started = env.STAGE_NAME
                    echo &quot;in first&quot;
                    def a = 0
                    def b = 10 / a
                }
            }
        }
        stage('second') {
            steps {
                script {
                    last_started = env.STAGE_NAME
                    echo &quot;in second&quot;
                }
            }
        }
    }
    post {
        failure {
            echo &quot;last_started: $last_started&quot;
        }
    }
}



</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>What ports are open on Linux - which application uses which port</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-04-23T18:30:01Z</updated>
    <pubDate>2019-04-23T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/what-ports-are-open-on-linux" />
    <id>https://code-maven.com/what-ports-are-open-on-linux</id>
    <content type="html"><![CDATA[<pre><code>htop
</code></pre>
<p>To see what interesting processes are running:</p>
<pre><code>ps axuw
</code></pre>
<p><a href="https://www.cyberciti.biz/faq/how-do-i-find-out-what-ports-are-listeningopen-on-my-linuxfreebsd-server/">find out what ports are open</a></p>
<pre><code>netstat --listen
</code></pre>
<pre><code>sudo netstat -tulpn
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Resize images on the command line using image magick</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-04-21T13:30:01Z</updated>
    <pubDate>2019-04-21T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/resize-images-on-the-command-line" />
    <id>https://code-maven.com/resize-images-on-the-command-line</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Install on Ubunutu</h2>
<pre><code>sudo apt-get -y install imagemagick
</code></pre>
<pre><code>identify  image.png
file      image.png
</code></pre>
<h2 class="title is-4">Convert image</h2>
<pre><code>convert image.png -resize 300x400 new_image.png
</code></pre>
<p>See also <a href="https://guides.wp-bullet.com/batch-resize-images-using-linux-command-line-and-imagemagick/">Batch Resize Images using Linux Command Line and Imagemagick</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bash: while loop - break - continue</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-04-09T14:40:01Z</updated>
    <pubDate>2019-04-09T14:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bash-while-loop" />
    <id>https://code-maven.com/bash-while-loop</id>
    <content type="html"><![CDATA[<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/while_loop.sh">examples/shell/while_loop.sh</a></strong></p>
<pre><code class="language-bash">count=5

while [ $count -lt 10 ]; do
    echo $count
    sleep 1
    count=$(($count + 1))
done

</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/while_loop_break.sh">examples/shell/while_loop_break.sh</a></strong></p>
<pre><code class="language-bash">count=5
while true; do
    echo $count
    sleep 1
    count=$(($count + 1))
    if [ $count -gt 9 ];
    then
        break
    fi
done


</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/while_loop_continue.sh">examples/shell/while_loop_continue.sh</a></strong></p>
<pre><code class="language-bash">count=5
while true; do
    echo $count
    sleep 1
    if [ $count -lt 9 ];
    then
        count=$(($count + 1))
        continue
    fi
    break
done



</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Bind9 DNS records for SPF1 and DKIM1 for a domain used by mailgun</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-04-09T07:30:01Z</updated>
    <pubDate>2019-04-09T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/bind9-dns-records-for-spf1-dkim1-for-mailgun" />
    <id>https://code-maven.com/bind9-dns-records-for-spf1-dkim1-for-mailgun</id>
    <content type="html"><![CDATA[<p>If you'd like to use <a href="https://mailgun.com/">Mailgun</a> you will need to configure a domain or at least a hostname in a
domain that will be used to send out the messages.</p>
<p>You'll need to tell the world using <a href="https://en.wikipedia.org/wiki/Sender_Policy_Framework">SPF1</a> and
<a href="https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail">DKIM1</a> records that the IP addresses of Mailgun
are approved to send out messages of your domain.</p>
<p>This will increase the likelihood of your messages arriving to their destinations and not flagged out by SPAM filters.</p>
<p>They have instructions for various
<a href="https://documentation.mailgun.com/en/latest/quickstart-sending.html">DNS providers</a>, but
I have not seen instructions for plain old Bind9 files and it took me a while to figure them out,
but now here they are:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/mailgun-domain.txt">examples/mailgun-domain.txt</a></strong></p>
<pre><code class="language-txt">; For Mailgun:
mg                  3600 IN TXT    &quot;v=spf1 include:mailgun.org ~all&quot;
mx._domainkey.mg    3600 IN TXT    (&quot;v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKPkTXnvRQ6KIc0sA3FOZea5nunP3FhJVp6JKDkt7pqo5mtduiA/tN6E7OrE8rzgrWI50+DVYSMwxfOb5d9WLhwVlVc20dFM4ibTkcYNwDsZtPZHIbYpV/3hMjKIyZ1pauAmU05Lp0dtjf9vucIfdu4ysFol2rdenRNTt1Z+WwVwIDAQAB&quot;);

mg   3600   IN   MX    10    mxa.mailgun.org.
mg   3600   IN   MX    10    mxb.mailgun.org.
email.mg   3600   IN   CNAME  mailgun.org.


</code></pre>
<p>In this case I registered the <b>mg</b> hostname as in mg.hostocal.com.</p>
<h2 class="title is-4">Verify your configuration</h2>
<p>There is a <a href="https://help.mailgun.com/hc/en-us/articles/360011565514">detailed explanation</a> by Mailgun.</p>
<p>Here are the commands I used (on a Linux system):</p>
<pre><code>dig -t MX mg.hostlocal.com

dig -t TXT mg.hostlocal.com

dig -t TXT mx._domainkey.mg.hostlocal.com
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline: git checkout using reference to speed up cloning large repositories</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-04-05T08:30:01Z</updated>
    <pubDate>2019-04-05T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-git-check-out-using-reference" />
    <id>https://code-maven.com/jenkins-git-check-out-using-reference</id>
    <content type="html"><![CDATA[<p>At one client we have a git repository that is almost 2 Gb large. (Don't ask why, it is a long story.)
Among many other things one problem this causes is that in our CI environment (using Jenkins) every build takes
ages. (Cloning this repo takes between 5-30 minutes depending on the weather and the alignment of the stars.</p>
<p>If we have fixed Jenkins agents it would be fast, because Jenkins would maintain a clone of the repository and
would only need to update the repository with the most recent changes.</p>
<p>However in our situation we used on-demand started Google Compute Instances.</p>
<p>That meant every time ws started a new GCP instance it had to clone the whole repository. Wasting time, bandwidth,
and money.</p>
<p>To improve the situation our solution was the following.</p>
<p>We created an image in GCP and included a full clone of the repository in <b>/opt/code-maven</b>.
Then we used the <b>reference</b> option of git to provide a local reference clone of the repository.</p>
<p>Then, when we wanted to clone the repository we had code like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/clone_using_reference.jenkinsfile">examples/jenkins/clone_using_reference.jenkinsfile</a></strong></p>
<pre><code class="language-txt">

def checkout_from_reference(commit) {
    def reponame = 'code-maven'
    def repo_url = &quot;git@bitbucket.org:USER/${reponame}.git&quot;

    echo &quot;Checkout SHA from reference $commit&quot;
    checkout([
        $class: 'GitSCM',
        branches: [[name: commit]],
        doGenerateSubmoduleConfigurations: false,
        extensions: [
            [$class: 'RelativeTargetDirectory', relativeTargetDir: reponame],
            [$class: 'CloneOption', reference: &quot;/opt/${reponame}&quot;]
        ],
        submoduleCfg: [],
        userRemoteConfigs: [
            [credentialsId: 'jenkins-git-credentials', url: repo_url]
        ]
    ])
    // just to show we are in the right commit:
    dir(reponame) {
        sh(script: &quot;git rev-parse HEAD&quot;)
    }
}




</code></pre>
<p>This function can get a <b>sha1</b> or a name of a <b>branch</b> to check out.</p>
<p>Internally it has two variables <b>reponame</b> is the short name of the repository.
<b>repo_url</b> is the URL to the original repository. In this case it was in bitbucket.</p>
<p>There is also the name <b>jenkins-git-credentials</b> which is the name of the credentials
we added to Jenkins to be able to access the git repository in Bitbucket. If your git server
needs authentication, you'll need this configured manually in Jenkins.</p>
<p>Every now and then we had to update the image with the recent changes in the repository so the gap
between what we already have in the image and what we have in the reomte repository won't grow
too much, but we had to keep the image up to data anyway so this is not extra work.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Applied Imbalanced Data Solutions</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-03-31T08:30:01Z</updated>
    <pubDate>2019-03-31T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/no-show-unbalanced-data" />
    <id>https://code-maven.com/no-show-unbalanced-data</id>
    <content type="html"><![CDATA[<p><a href="/html/no-show-unbalanced-data.html">Applied Imbalanced Data Solutions</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Counter Examples</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-03-30T21:40:01Z</updated>
    <pubDate>2019-03-30T21:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/counter" />
    <id>https://code-maven.com/counter</id>
    <content type="html"><![CDATA[<p>I love experimenting with programming languages, databases, frameworks, etc.</p>
<p>The standard example of a &quot;Hello World&quot; program is nice to get started, but usually way too simple. So I started to create a slightly more complex example. A counter example.</p>
<p>In each example we are going to create a counter. A simple counter will just increment a single number. A multi-counter will handle several counters. e.g. one per client, one per user, or one per  some arbitrary string.</p>
<p><b>I think these counter example can show you several aspects of a programming environment and can help you get started writing your own applications.</b></p>
<p>In this project we are going to implement a counter with various front-ends and back-ends. Sometimes these two parts will be in one program.
Some of the solution will be web based. Some will be command line based. Some might be GUI-based.</p>
<p>The counters might be stored in some kind of a &quot;database&quot;. It can be a plain text file, some data serialization format, a relational database, a NoSQL database and who knows what else.</p>
<p>The simpler version of the counter handles a single counter. Every time we run the counter it will show a number one higher than the previous one.</p>
<p>An interaction with a command-line tool might look like this:</p>
<pre><code>$ count
  1
$ count
  2
$ count
  3
</code></pre>
<p>The multi-counter is slightly more complex. It will be able to maintain several counters at once.
So an interaction with a command-line tool might look like this:</p>
<pre><code>$ count foo
  foo: 1
$ count foo
  foo: 2
$ count bar
  bar: 1
$ count foo
  foo: 3
</code></pre>
<p>This is going to be a long project, but it might help understand various techniques for data serialization.</p>
<h2 class="title is-4">JavaScript</h2>
<ul>
<li><a href="/vanilla-javascript-counter">Plain Vanilla JavaScript</a></li>
<li><a href="/improved-vanilla-javascript-counter">Improved Vanilla JavaScript</a></li>
<li><a href="/on-load-counter-with-javascript-and-local-storage">On-load counter with plain Vanilla JavaScript and local storage</a></li>
<li><a href="/multiple-counters-with-plain-javascript-and-local-storage">Multiple counters with plain Vanialla JavaScript and local storage</a></li>
</ul>
<h2 class="title is-4">Python</h2>
<ul>
<li><a href="/comman-line-counter-in-python">Command-line counter in Python</a> for a single counter.</li>
<li><a href="/python-counter-with-mongodb">Python and MongoDB</a></li>
<li><a href="/flask-counter-sqlite-sqlalchemy">Flask counter with SQLite, SQLAlchemy, pytest</a></li>
</ul>
<h2 class="title is-4">Go</h2>
<ul>
<li><a href="/counter-using-go">Single counter with simple text file using Go</a></li>
</ul>
<h2 class="title is-4">Perl</h2>
<ul>
<li>A <a href="https://perlmaven.com/command-line-counter">command-line counter script in Perl</a> that uses a plain file called <code>counter.txt</code> for a single counter.</li>
<li><a href="https://perlmaven.com/multiple-command-line-counters">Multiple command line counters with plain TSV text file back-end in Perl.</a></li>
<li><a href="https://perlmaven.com/counter-with-database-backend-using-dbix-class">A command line counter with database back-end using Perl DBIx::Class</a></li>
<li><a href="https://perlmaven.com/command-line-counter-with-json-backend">Command line counter with JSON backend in Perl.</a></li>
<li><a href="https://perlmaven.com/counter-with-dancer-sessions">Counter with Perl Dancer session</a></li>
<li><a href="https://perlmaven.com/command-line-counter-with-mongodb">Command line counter in Perl with MongoDB as storage</a></li>
<li><a href="https://perlmaven.com/pro/counter-with-mojolicious-lite">Counter with Perl Mojolicious Lite</a></li>
<li><a href="https://perlmaven.com/command-line-counter-with-memchached">Command line counter with Memcached using Perl</a></li>
<li><a href="https://perlmaven.com/increase-numbers-in-a-file">Increasing numbers in a text file using Perl</a></li>
<li><a href="https://perlmaven.com/cli-counter-with-yaml-backend">Counter example in Perl using YAML file to store the data</a></li>
<li><a href="https://perlmaven.com/counter-with-dancer-using-in-memory-sqlite-database">A counter using Perl Dancer and an in-memory SQLite database</a></li>
<li><a href="https://perlmaven.com/counter-dancer2-redis-docker">A counter using Perl Dancer and Redis, both in a Docker container</a></li>
</ul>
<h2 class="title is-4">R</h2>
<ul>
<li><a href="/simple-counter-with-r">Simple file-based counter in R</a></li>
</ul>
<h2 class="title is-4">Rust</h2>
<ul>
<li><a href="https://rust.code-maven.com/cli-counter-with-plain-text-file">Command line counter with plain text file storage in Rust</a></li>
<li><a href="https://rust.code-maven.com/multi-counter-in-json-file">Command line multi-counter with JSON file storage in Rust</a></li>
<li><a href="https://rust.code-maven.com/rocket-single-counter-in-text-file">Rocket web framework - Single counter in a plain text file</a></li>
<li><a href="https://rust.code-maven.com/rocket-multi-counter-using-cookies">Rocket web framework - Multi-counter using cookies</a></li>
<li><a href="https://rust.code-maven.com/rocket-multi-counter-using-encrypted-cookies">Rocket web framework - Multi counter using encrypted cookies</a></li>
<li><a href="https://rust.code-maven.com/surrealdb-cli-multi-counter">Multi-counter with embedded SurrealDB database using Rust</a></li>
<li><a href=""></a></li>
</ul>
<h2 class="title is-4">Angular JS</h2>
<ul>
<li>
<p><a href="/simple-in-memory-counter-with-angularjs">Simple In-memory counter using AngularJS</a></p>
</li>
<li>
<p><a href="/automatic-counter-using-angularjs">Automatic counter using AngularJS</a></p>
</li>
<li>
<p><a href="/counter-in-mongodb-client">Several counters in MongoDB client</a></p>
</li>
</ul>
<!--
## Front-end

* command line
* web based:
        <ul>
* plain CGI
* CGI with Ajax
* plain PSGI
* PSGI with Ajax
* Dancer
* Mojolicious
        </ul>
    

## Back-end

* several counters each one in its own file
* several counters in a .txt file in CSV format
* several counters in a yaml/json file
* 1 counter in SQLite
* several counters in SQLite
* 1 counter in MySQL
* several counters in MySQL
*   ? PostgreSQL
* 1 counter in MongoDB
* several counters in MongoDB
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Stop and disable apt-get using Ansible</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-03-26T07:30:01Z</updated>
    <pubDate>2019-03-26T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ansible-disable-apt-get" />
    <id>https://code-maven.com/ansible-disable-apt-get</id>
    <content type="html"><![CDATA[<p>Disable the apt services to avoid collision between the <code>apt-get update</code> that runs when we start a new instance
and the Ansible process that tries to install modules:</p>
<p>The first one stops the service right now.</p>
<p>The second is there so when the service won't even start next time we boot or computer.</p>
<pre><code>- name: Stop services
  service:
    name: &quot;{{ item }}&quot;
    state: stopped
  with_items:
    - apt-daily
    - apt-daily.timer
    - apt-daily-upgrade
    - apt-daily-upgrade.timer

- name: Disable services
  service:
    name: &quot;{{ item }}&quot;
    enabled: no
  with_items:
    - apt-daily
    - apt-daily.timer
    - apt-daily-upgrade
    - apt-daily-upgrade.timer
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline - set and use environment variables</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-02-15T18:30:01Z</updated>
    <pubDate>2019-02-15T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-environment-variables" />
    <id>https://code-maven.com/jenkins-pipeline-environment-variables</id>
    <content type="html"><![CDATA[<h2 class="title is-4">How to list the environment variables available to Jenkins Pipeline</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/list_environment.Jenkinsfile">examples/jenkins/list_environment.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent none
   environment {
       color = &quot;blue&quot;
   }
   stages {
       stage('first') {
            agent { label 'master' }
            steps {
               sh &quot;printenv | sort&quot;
            }
        }
    }
}


</code></pre>
<p>In this example we list the environment variables using the <b>printenv</b> command of Unix/Linux
which we pipe through the Unix <b>sort</b> command so we'll see the environment variables in a sorted list.</p>
<p>We invoke it using the <b>sh</b> command of the Jenkins Pipeline.</p>
<p>Before we do that we set a new variable called &quot;color&quot; in the <b>environment</b> section of the Jenkins Pipeline.</p>
<p>On Unix/Linux:</p>
<pre><code>sh('printenv | sort')
</code></pre>
<p>On Windows you could run:</p>
<pre><code>bat('set')
</code></pre>
<p>The output will looks something like this:</p>
<pre><code>BUILD_DISPLAY_NAME=#18
BUILD_ID=18
BUILD_NUMBER=18
BUILD_TAG=jenkins-list_environment_variables-18
BUILD_URL=http://localhost:8080/job/list_environment_variables/18/
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/110/bus
EXECUTOR_NUMBER=1
HOME=/var/lib/jenkins
HUDSON_COOKIE=40cd788e-91bd-4ebd-86c9-c10333fa27a9
HUDSON_HOME=/var/lib/jenkins
HUDSON_SERVER_COOKIE=912830efeb6e2316
HUDSON_URL=http://localhost:8080/
JENKINS_HOME=/var/lib/jenkins
JENKINS_NODE_COOKIE=dbf878e6-0ae5-4ffe-a32c-aa7876f975ce
JENKINS_SERVER_COOKIE=durable-f6e3ca8e5d2310d4d5695d128db1ea2f
JENKINS_URL=http://localhost:8080/
JOB_BASE_NAME=list_environment_variables
JOB_DISPLAY_URL=http://localhost:8080/job/list_environment_variables/display/redirect
JOB_NAME=list_environment_variables
JOB_URL=http://localhost:8080/job/list_environment_variables/
LANG=C.UTF-8
LOGNAME=jenkins
MAIL=/var/mail/jenkins
NODE_LABELS=master
NODE_NAME=master
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
PWD=/var/lib/jenkins/workspace/list_environment_variables
RUN_CHANGES_DISPLAY_URL=http://localhost:8080/job/list_environment_variables/18/display/redirect?page=changes
RUN_DISPLAY_URL=http://localhost:8080/job/list_environment_variables/18/display/redirect
SHELL=/bin/bash
SHLVL=1
STAGE_NAME=example
USER=jenkins
WORKSPACE=/var/lib/jenkins/workspace/list_environment_variables
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
XDG_RUNTIME_DIR=/run/user/110
XDG_SESSION_ID=c1
_=/usr/bin/daemon
color=blue
</code></pre>
<h2 class="title is-4">List the environment variables without running the shell</h2>
<p>The <code>env</code> object is of type
<a href="https://javadoc.jenkins.io/plugin/workflow-cps/org/jenkinsci/plugins/workflow/cps/EnvActionImpl.html">class org.jenkinsci.plugins.workflow.cps.EnvActionImpl</a>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/list_environment_internally.Jenkinsfile">examples/jenkins/list_environment_internally.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent none
   environment {
       color = 'blue'
   }
   stages {
       stage('example') {
            agent { label 'master' }
            steps {
               script {
                   def fields = env.getEnvironment()
                   fields.each {
                        key, value -&gt; println(&quot;${key} = ${value}&quot;);
                    }

                    println(env.PATH)
               }
            }
        }
    }
}


</code></pre>
<p>We use the <b>getEnvironment</b> method that returns a <a href="https://javadoc.jenkins-ci.org/hudson/EnvVars.html">hudson.EnvVars</a> object.
This is a Groovy map so we can already use the <b>each</b> method to go over the keys and values.</p>
<p>This however only seem to list the internal variables of Jenkins and for example <b>PATH</b> was not
in the list even though we can access it as <b>env.PATH</b>.</p>
<h2 class="title is-4">How to set environment variables in Jenkins?</h2>
<p>As also seen above, a section called <code>environment</code> can be added to the pipeline</p>
<pre><code>environment {
    SOME_NAME = &quot;some value&quot;
}
</code></pre>
<p>Then it can be accessed using the following syntax:</p>
<pre><code>env.SOME_NAME
</code></pre>
<pre><code>pipeline {
   agent none
   environment {
       field = 'some'
   }
   stages {
       stage ('Preparation') {
           agent { label 'master'}
           environment {
               JENKINS_PATH = sh(script: 'pwd', , returnStdout: true).trim()
           }
           steps {
               echo &quot;Hello world&quot;
               echo &quot;PATH=${JENKINS_PATH}&quot;
               sh 'echo &quot;JP=$JENKINS_PATH&quot;'
          }
      }
   }
}
</code></pre>
<h2 class="title is-4">How to use environment variables in the environment section of Jenkins?</h2>
<pre><code>environment {
    PATH = &quot;/path/to/dir:${env.PATH}&quot;
    JNK_PATH = &quot;${env.WORKSPACE}\\subdir&quot;
}
</code></pre>
<p>The above only works when the environment section is inside a &quot;stage&quot; but would yield &quot;null&quot; for
WORKSPACE outside the stages.</p>
<h2 class="title is-4">Set environment executing code</h2>
<pre><code>environment {
    field = func()
}

def func() {
    ...
    return &quot;value&quot;
}
</code></pre>
<p>A working example:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/set_environment_by_script.Jenkinsfile">examples/jenkins/set_environment_by_script.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent none
   environment {
       first_path = get_first()
   }
   stages {
       stage('example') {
            agent { label 'master' }
            steps {
                print(env.first_path)
            }
        }
    }
}

def get_first() {
    node('master') {
        return env.PATH.split(':')[0]
    }
}


</code></pre>
<h2 class="title is-4">Comments</h2>
<p>I am trying to do something like this and getting error. Can I use conditional assignments in the environment section?</p>
<p>environment{
if (env == &quot;e2e&quot;) {
SLACK_CHANNEL = &quot;#e2e-monitoring&quot;
} else if (env == &quot;pqa&quot;) {
SLACK_CHANNEL = &quot;#pqa-monitoring&quot;
}
}</p>
<hr />
<p>so beautiful article!!!!</p>
<hr />
<p>Thanks for this tutorial. However, I'm having hard times understanding how to pass environment variables in case of Jenkins Pipelines by NOT using Jenkinsfile. In case of simple Jenkins build projects it was easy to do. However, how can I add custom environment variables to Jenkins Pipeline Multibranch build project so that the variables are not in Jenkinsfile?</p>
<p>I don't want to add sensitive keys, passwords etc to Jenkinsfile that would go to version control system.</p>
<p>Any tips?</p>
<hr />
<p>You can add &quot;secrets&quot; to your Jenkins server and then those secrets will be available to your jobs, but won't be part of your Jenkinsfile.
<a href="https://www.jenkins.io/doc/book/using/using-credentials/">https://www.jenkins.io/doc/book/using/using-credentials/</a></p>
<hr />
<p>Thanks! That's what I figured out, too but it's very cumbersome way of doing this:( Right now I went back to old way of creating builds - step by step and I do stuff in &quot;Shell&quot; step where I can set env variables easily.</p>
<p>Strange that some developers came up with that idea that when you add env variables in your pipeline steps these will be written and committed back to your git repo. That's VERY dangerous. Just wondering :)</p>
<hr />
<p>Why would you add the environment variables to your repo? The link I shared does not do that.</p>
<hr />
<p>I would not and as I explained - it's very bad idea.
I tried to explain that the standard way of doing it in the pipelines (add env variables by each step or to the pipeline) is designed in a really bad way so that whatever changes you do to your pipeline in Jenkins - it would get committed to SCM.</p>
<p>I added screenshot to illustrate my problem.</p>
<hr />
<p>I did not see that happening.</p>
<hr />
<p>i'm new in jenkins, i would know if someone know how can i build a remote trigger in the multibranch pipeline with post commit hook ?
and how can i get the current name branch in Pipeline job because i want to do some stages in master branch and other in develop branch
for example when i try with echo env.BRANCH_NAME it's return NULL :(</p>
<hr />
<p>can I make all the environment variables as None before my pipeline starts? and then set few values if I want. Is it possible?</p>
<hr />
<p>I am not sure I understand you. Why would you want to do that? What are you trying to achieve?</p>
<p>The environment variables come from the system, without them probably Jenkins would not be able to run. However you can set the ones you like in your Jenkins file first to be none and then to some interesting value.</p>
<hr />
<h2 class="title is-4">I am using these env.vars to set few jenkins parameters in my groovy. Because of which they are retaining previous builds parameters. I am trying to find a way to not retain the previous build's values.</h2>
<p>Jenkins gives you access to some meta data of the previous builds, but you don't need to access them.</p>
<p>What environment variables do you see that come from an earlier build?</p>
<hr />
<p>I am not using any system env variables to set to the parameters. Am setting some parameters to my jenkins job, by doing env.build=&quot;yyyyyyy&quot; and am setting the parameters to env.build as default values if its not set in the current build and is none. I see even though am not setting any env.build next time, its value is being taken from the previous build and is set to the jenkjns parameter.</p>
<hr />
<p>Could you create a minimal example that shows this?</p>
<hr />
<p>def string_param(Map opt=[defaultValue:&quot;&quot;, description:&quot;&quot;]) {</p>
<p>if (opt.name == null) {
throw new Exception(&quot;Arg name is mandatory&quot;)
}</p>
<p>return string(name: &quot;$opt.name&quot;, defaultValue: &quot;$opt.defaultValue&quot;,
description: &quot;$opt.description&quot;)
}</p>
<p>def def_boards = env.&quot;${board_u}_BOARDS&quot;
def boards = string_param(name: &quot;${board}_boards&quot;,
defaultValue: &quot;${def_boards?:''}&quot;,
description: &quot;Enter $board boards example: abc-1,abc-2&quot;)</p>
<p>in the first build when I set, env.xyz_BOARDS=&quot;xxxxxxxxxxxxx&quot;, for the second build even though am not setting it, this value is being retailed to boards value. How can I stop that for being retained?</p>
<hr />
<p>It is unclear to me why Jenkins keeps the old values, but at the end of your job you could set them to null again to make sure they are clean.</p>
<hr />
<p>Yeah thank you. I tried resetting the vars in the start of the groovy so that it would work for concurrent builds as well and I see its working as intended. Thank you</p>
<hr />
<p>Can you make a article on Jenkins shared libs ?</p>
<hr />
<p>env.first_path</p>
<p>calling a method that way is not something I would want to do too often, it just looks like a field, and it may/can have side-effects. Good explainer of the gotchas , thanks for sharing
:-)</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline BuildUser plugin</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-02-15T13:30:01Z</updated>
    <pubDate>2019-02-15T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-builduser" />
    <id>https://code-maven.com/jenkins-pipeline-builduser</id>
    <content type="html"><![CDATA[<p><a href="https://wiki.jenkins.io/display/JENKINS/Build+User+Vars+Plugin">Build User Vars Plugin</a>
also known as <a href="https://plugins.jenkins.io/build-user-vars-plugin">build user vars plugin</a></p>
<p>Install:</p>
<p>On the Jenkins UI click on Jenkins - Manage Jenkis - <a href="http://localhost:8080/pluginManager/">Manage Plugins</a> - Available
filter for <b>user build vars</b>, check the checkbox and click on &quot;install without restart&quot;.</p>
<p>This is a sample Jenkinsfile showing how to use it.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/builduser.Jenkinsfile">examples/jenkins/builduser.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent none
   stages {
       stage('example') {
           agent { label 'master' }
           steps {
               script {
                   wrap([$class: 'BuildUser']) {
                       echo &quot;BUILD_USER=${BUILD_USER}&quot;
                       echo &quot;BUILD_USER_FIRST_NAME=${BUILD_USER_FIRST_NAME}&quot;
                       echo &quot;BUILD_USER_LAST_NAME=${BUILD_USER_LAST_NAME}&quot;
                       echo &quot;BUILD_USER_ID=${BUILD_USER_ID}&quot;
                       echo &quot;BUILD_USER_EMAIL=${BUILD_USER_EMAIL}&quot;
                       echo &quot;---&quot;
                       echo &quot;env.BUILD_USER=${env.BUILD_USER}&quot;
                       echo &quot;env.BUILD_USER_FIRST_NAME=${env.BUILD_USER_FIRST_NAME}&quot;
                       echo &quot;env.BUILD_USER_LAST_NAME=${env.BUILD_USER_LAST_NAME}&quot;
                       echo &quot;env.BUILD_USER_ID=${env.BUILD_USER_ID}&quot;
                       echo &quot;env.BUILD_USER_EMAIL=${env.BUILD_USER_EMAIL}&quot;
                   }
               }
           }
       }
   }
}


</code></pre>
<p>In order to make the variables available you need to have your code wrapped in:</p>
<pre><code>wrap([$class: 'BuildUser']) {
}
</code></pre>
<p>Sometime it is inconvenient to do that for the whole code, so inside the wrapper, you can copy the values to
Other variables that can be then accessed outside of the wrapper as well.</p>
<p>See also <a href="/jenkins-get-current-user">Jenkins pipeline: get current user</a> using currentBuild and getBuildCauses.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Vagrant for Jenkins on Ubuntu</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-02-15T12:30:01Z</updated>
    <pubDate>2019-02-15T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/vagrant-for-jenkins-on-ubuntu" />
    <id>https://code-maven.com/vagrant-for-jenkins-on-ubuntu</id>
    <content type="html"><![CDATA[<p>A simple Vagrantfile you can use to set up Jenkins and start using it.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/vagrant-jenkins-ubuntu/Vagrantfile">examples/vagrant-jenkins-ubuntu/Vagrantfile</a></strong></p>
<pre><code class="language-txt"># vi: set ft=ruby :
Vagrant.configure(&quot;2&quot;) do |config|
  config.vm.box = &quot;ubuntu/cosmic64&quot;
  config.vm.network &quot;forwarded_port&quot;, guest: 8080, host: 8080, host_ip: &quot;127.0.0.1&quot;
  config.vm.provision &quot;shell&quot;, inline: &lt;&lt;-SHELL
    apt-get update
    apt-get upgrade -y

    wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
    sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ &gt; /etc/apt/sources.list.d/jenkins.list'
    apt-get update
    apt-get install -y openjdk-8-jre
    apt-get install -y jenkins
  SHELL
end


</code></pre>
<ul>
<li>Create an empty directory.</li>
<li>Copy the above file to it as <b>Vagrantfile</b>.</li>
<li>Install <a href="https://www.vagrantup.com/">Vagrant</a> and <a href="https://www.virtualbox.org/">VirtualBox</a> if you don't have them yet.</li>
<li>cd to the directory and run <b>vagrant up</b>. It will take a while to download the image and then to install Jenkins in the image.</li>
<li>Then on your computer browse to <a href="http://localhost:8080/">http://localhost:8080/</a>  It will want to get a secret code.</li>
<li>On the command line type int <b>vagrant ssh</b> this will ssh into the VirtualBox running Jenkins</li>
<li>type <b>sudo cat /var/lib/jenkins/secrets/initialAdminPassword</b> to get the secret, copy that secret to the browser</li>
<li>Install the defaults, create a user for yourself.</li>
<li>At this point I got a blank page (seems to be some bug) so I switched back to the terminal and restarted the machine by typiing in <b>sudo reboot</b>.</li>
<li>Once the machine started again you can reload the page in the browser and it will (most likely) show you the login page of Jenkins.</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>dot file or configuration files</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-02-03T07:30:01Z</updated>
    <pubDate>2019-02-03T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/dot" />
    <id>https://code-maven.com/dot</id>
    <content type="html"><![CDATA[<p>When setting up a new account on a Linux machine there are many things one can configure.
This is a collection of the &quot;dot files&quot;, (the ones that usually start with a dot and therefore are hidden)
that I use.</p>
<ul>
<li><a href="/tmux">tmux</a></li>
<li><a href="/git-config">git config</a> (<a href="/enforcing-commit-message-format-in-git">Enforcing commit message format in Git - on the client side</a>)</li>
</ul>
<h2 class="title is-4">Bash</h2>
<pre>
alias xssh='ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
alias myscp='scp -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
alias rm='rm -i'
alias mv='mv -i'
alias cp='cp -i'
alias ll='ls -l'
alias l='ls -la'
export HISTSIZE=1000
export EDITOR=vim
```

Make bash write to the `.bash_history` file immediately and read it on every command.
Allowing you to search and use the history created in one terminal to be used in another terminal.

```
shopt -s histappend
export PROMPT_COMMAND="history -a; history -c; history -r;"
</pre>
<h2 class="title is-4">ssh config</h2>
<pre><code>Host 10.* 172.31.* 172.32.* 172.33.* 172.34.*
   StrictHostKeyChecking no
   UserKnownHostsFile /dev/null
</code></pre>
<p>in ~/.ssh/config</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Limit Bitbucket pipelines to specific branches</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-01-31T09:30:01Z</updated>
    <pubDate>2019-01-31T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/limit-bitbucket-pipelines-to-specific-branches" />
    <id>https://code-maven.com/limit-bitbucket-pipelines-to-specific-branches</id>
    <content type="html"><![CDATA[<p>Bitbucket pipelines use an inclusive model, that's it, you can only say which branches you would like the pipeline to run
on, and you cannot exclude specific branches.</p>
<p>So you can say <b>run on &quot;master&quot;, &quot;dev&quot;, and &quot;feature/*&quot;</b>  but you cannot say <b>skip on &quot;experiment&quot;</b>.</p>
<p>All of this is controlled in the <b>bitbucket-pipelines.yml</b> file in the root of the repository.
Whenever you push out some changes to a branch, Bitbucket will look at the file in that branch.
So if you make changes to the pipeline configuration file in master, it will only affect an existing branch
if it merges the changes from master (or rebases onto master).</p>
<p>In the following example we configured that the &quot;master&quot; branch, the &quot;dev&quot; branch and any branch that starts with
&quot;feature/&quot; will execute one set of commands.</p>
<p>The &quot;work&quot; branch will execute a different set of commands.</p>
<p>None of the other branches will initiate a build.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/bitbucket-branches/bitbucket-pipelines.yml">examples/bitbucket-branches/bitbucket-pipelines.yml</a></strong></p>
<pre><code class="language-yaml">pipelines:
  branches:
    '{master,dev,feature/*}':
      - step:
          script:
            - echo &quot;master, dev, or feature/*&quot;
    work:
      - step:
          script:
            - echo &quot;work&quot;

</code></pre>
<p>Pay attention, there are <b>no spaces!</b> in the list of branches!</p>
<p>The above configuration will not run for a branch called <b>feature/a/b</b> as a single <b>*</b> only
captures a single directory level. If you'd like to have any number of directory levels, you can use
<b><strong></b>. As in <b>feature/</strong></b>.</p>
<p>Check out the valid <a href="https://confluence.atlassian.com/bitbucket/configure-bitbucket-pipelines-yml-792298910.html#Configurebitbucket-pipelines.yml-globbing_patterns">globbing patterns</a>.</p>
<h2 class="title is-4">Exclude or skip specific branches</h2>
<p>There is a workaround for the lack of exclusive configuration.
We can configure a default action, that will work on every branch.
Then we can create a basically empty branch-configuration for every branch we want to skip.</p>
<p>In this example we have a <b>default</b> configuration that does the real testing.
Then there is a configuration for certain branches we only call &quot;echo&quot; and tell the world we are skipping this branch.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/bitbucket-default/bitbucket-pipelines.yml">examples/bitbucket-default/bitbucket-pipelines.yml</a></strong></p>
<pre><code class="language-yaml">pipelines:
  default:
    - step:
        script:
          - echo &quot;run default, do the real work of CI&quot;
  branches:
    '{experiment/*,scratch}':
      - step:
          script:
            - echo &quot;skip this branch&quot;

</code></pre>
<p>Bitbucket will still run the pipeline for these branches, and it will report them as successes after running for a
number of seconds. Just to execute the <b>echo</b> command.</p>
<h2 class="title is-4">Exclude by removing the bitbucket-pipelines.yml</h2>
<p>Another option is to remove the bitbucket-pipelines.yml file in the branches where we don't want the pipeline to run.
This is in a way a clean solution, but it involves either two strange commits (removing the bitbucket-pipelines.yml and
adding it back), or it involves the rewriting the history.
In either case you have to remember to do that before you merge back to the main branch of your project.</p>
<pre><code>git checkout -b some-branch
git rm bitbucket-pipelines.yml
git commit -m 'remove bitbucket-pipelines.yml to skip the pipeline in this branch'
</code></pre>
<p>Then code, commit and push as much as you like.</p>
<p>Then <b>revert</b> the removal of the bitbucket-pipelines.yml file:</p>
<pre><code>git revert SHA1-of-the-removal-commit
</code></pre>
<p>This will add another commit the reverses the one where you removed the file.</p>
<p>From that point the pipeline is live again.</p>
<p>The history will look like this:</p>
<p><img src="/img/revert-rm-commit.png" alt="" /></p>
<h2 class="title is-4">Remove the bitbucket-pipelines.yml file and retore it by rewriting history</h2>
<p>The other solution involves rewriting the history.
First you remove the bitbucket-pipelines.yml as seen above and make some changes.
The history will look something like this:</p>
<p><img src="img/git-remove-file.png" alt="" /></p>
<p>Then, when you want the <b>bitbucket-pipelines.yml</b> file to come back you remove the commit that removed the file. (You change the history.)</p>
<p>First you run:</p>
<pre><code>git rebase -i SHA1-of-the-removal^
</code></pre>
<p>It will open your default editor listing all the commit starting with the one we wanted to remove.
Something like this:</p>
<pre><code>pick 62e820e remove bitbucket-pipelines.yml to skip the pipeline in this branch
pick e94ce98 one
pick 7d15fc5 two
</code></pre>
<p>We can mark the commit to be deleted by replacing the <b>pick</b> by <b>d</b> at the beginning of the specific row
(first row in this case) like this:</p>
<pre><code>d 62e820e remove bitbucket-pipelines.yml to skip the pipeline in this branch
pick e94ce98 one
pick 7d15fc5 two
</code></pre>
<p>Then we save the file and close it.</p>
<p>The resulting histroy will look like this:</p>
<p><img src="img/git-remove-commit-in-middle.png" alt="" /></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Measure elapsed time in Linux shell using time and date</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-01-25T07:30:01Z</updated>
    <pubDate>2019-01-25T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/measure-elapsed-time-in-shell" />
    <id>https://code-maven.com/measure-elapsed-time-in-shell</id>
    <content type="html"><![CDATA[<p>There are two main cases:</p>
<p>If you have a command and you'd like to know how much it takes you can use the <code>time</code> command.  Measure time
externally.</p>
<p>If you have a script and you'd like to measure how much various parts of it take you can use the <code>date</code> command.
Measure time internally.</p>
<h2 class="title is-4">Measure elapsed time internally in a script</h2>
<p>This is the other type of elapsed time measuring.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/measure_time.sh">examples/shell/measure_time.sh</a></strong></p>
<pre><code class="language-bash">START_TIME=$(date +%s)

sleep 1 # put some real task here instead of sleeping

END_TIME=$(date +%s)
echo &quot;It took $(($END_TIME - $START_TIME)) seconds to sleep of 1 second...&quot;


</code></pre>
<p>The output:</p>
<pre><code>It took 1 seconds to sleep of 1 second...
</code></pre>
<h2 class="title is-4">Measure elapsed time externally</h2>
<p>Let's say you have a command such as <code>run_this_thing</code> and you'd like to measure how long it takes to run.
You can run it as</p>
<pre><code>time run_this_thing
</code></pre>
<p>This will run the program and after the program has finished it will print something that looks like this:</p>
<pre><code>real  0m14.806s
user  0m0.089s
sys   0m0.019s
</code></pre>
<p>It tells us that the job took 14 seconds <code>real</code> time to run. This is what is sometimes referred to as wallclock time. This is the
time you could have measured with your personal stop-watch.</p>
<p>The <code>user</code> time is what the process spent in user mode (e.g. computing in memory).</p>
<p>The <code>sys</code> time (aka. system time) it the process spent using system calls. (e.g. the CPU time of accessing the
file-system, the screen, or the network, etc.), but excluding the time the Operatng System was waiting for the disk
or the network to send the data, or the screen to display it. Also excluding the time it was waiting for the Operating
Sytem to allocate CPU time to it.</p>
<p>All the time while the process was not actually using CPU but was waiting for something is in the <code>real</code> time.</p>
<p>So the above results mean that the process I ran was mostly waiting for some IO to finish. (In fact this was an ssh
command that executed something on a remote computer. So the computer I was running on hardly used its CPU. It was
mostly waiting for the other computer to finish its job and send a response.</p>
<p>On a single core (single cpu) system this would be the formula:</p>
<pre><code>sys + user + IO_time = real
</code></pre>
<p>So you could calculate the IO_time from the 3 numbers given by <code>time</code>.</p>
<p>On a multi-core system however both <code>sys</code> and <code>user</code> contain the combined time spent on all of the cores.
This means that both sys and user might be higher than the real time.</p>
<p>e.g. this result on a 4-core system probably means that each core spent 1 sec in <code>user</code> mode and 1 sec in
<code>sys</code>. So each core was used for 2 seconds, but that happened in parallel, so only 2 seconds of your life
was used.</p>
<pre><code>real  0m2.000s
user  0m4.000s
sys   0m4.000s
</code></pre>
<p>Of course this cannot really happen as there are other things running on your compuuter that take time so your process
won't be able to use 100% of each core.
So the real time will be longer. The following seems to be possible:</p>
<pre><code>real  0m2.500s
user  0m4.000s
sys   0m4.000s
</code></pre>
<p>Here, the 2 seconds per each CPU were executed within a 2.5 seconds timeframe.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>The importance of using HTTPS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-01-23T22:30:01Z</updated>
    <pubDate>2019-01-23T22:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/the-importance-of-https" />
    <id>https://code-maven.com/the-importance-of-https</id>
    <content type="html"><![CDATA[<p>When browsing the Internet in the privacy of your computer it is easy to forget that it is not just you, the computer and the web site on the other end. There are other organizations on the way and there can be other people who might watch your data traffic. Demonstrating how your data can be easily recorded can make a good case for anyone to look for the little lock in the address bar of their browsers.</p>
<p>It can also get more web site owners to switch to https. After all it is quite easy to do it today using the free service of <a href="https://letsencrypt.org/">Let's encrypt</a>.</p>
<h2 class="title is-4">What is HTTPS ?</h2>
<p>In a nutshell, HTTP is the <a href="https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol">Hypertext Transfer Protocol</a> used by browsers to communicate with web servers.</p>
<p>TLS is <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">Transport Layer Security</a> the new name of Secure Sockets Layer (SSL). It provides secure connection between two computers.</p>
<p>HTTPS is <a href="https://en.wikipedia.org/wiki/HTTPS">HTTP over Transport Layer Security [TLS]</a>.</p>
<h2 class="title is-4">Our tools</h2>
<p>For our demonstration we are going to use <a href="http://httpbin.org/">httpbin over http</a> and <a href="https://httpbin.org/">httpbin over https</a>. A great service that can be used by anyone who wants to experiment with web client.</p>
<p>We are also going to use <a href="https://curl.haxx.se/">curl</a> that makes it easy to access a web site from the command line. You could achieve the same results using your favorite browser.</p>
<p>Last, but not least, we are going to use <a href="http://www.tcpdump.org/">tcpdump</a>.
If you'd like to try this at home and you only have MS Windows, then you might want to use
<a href="https://www.winpcap.org/windump/">WinDump</a> or <a href="https://www.wireshark.org/">WireShark</a>.</p>
<h2 class="title is-4">GET over HTTP</h2>
<p>Let's start with a simple GET request over HTTP.</p>
<pre><code>curl 'http://httpbin.org/get?username=foobar&amp;password=secret'
</code></pre>
<p>The response will be</p>
<pre><code>{
  &quot;args&quot;: {
    &quot;password&quot;: &quot;secret&quot;,
    &quot;username&quot;: &quot;foobar&quot;
  },
  &quot;headers&quot;: {
    &quot;Accept&quot;: &quot;*/*&quot;,
    &quot;Connection&quot;: &quot;close&quot;,
    &quot;Host&quot;: &quot;httpbin.org&quot;,
    &quot;User-Agent&quot;: &quot;curl/7.54.0&quot;
  },
  &quot;origin&quot;: &quot;37.26.149.149&quot;,
  &quot;url&quot;: &quot;http://httpbin.org/get?username=foobar&amp;password=secret&quot;
}
</code></pre>
<p>You could do the same in your browser. Just visit <a href="http://httpbin.org/get?username=foobar&amp;password=secret">this url</a>.</p>
<p>Then run the following command on your Linux/Unix machine in one terminal: You might need to install the <code>tcpdump</code> command first and you will be asked for your password as this command needs root access.</p>
<pre><code>sudo tcpdump -vv host httpbin.org
</code></pre>
<p>This will start printing out all the communication to and from the httpbin.org server.</p>
<p>Then run the curl command again or visit <a href="http://httpbin.org/get?username=foobar&amp;password=secret">this url</a>.</p>
<pre><code>curl 'http://httpbin.org/get?username=foobar&amp;password=secret'
</code></pre>
<p>In the window where you ran the command you'll see the output you are expected. That's not the interesting part.</p>
<p>In the window where you ran the <code>tcpdump</code> command you'll see some cryptic messages, but you will also see the following:</p>
<pre><code>    air.65327 &gt; ec2-23-21-245-33.compute-1.amazonaws.com.http: Flags [P.], cksum 0x7bea (correct), seq 1:111, ack 1, win 4120, options [nop,nop,TS val 1989702306 ecr 686226205], length 110: HTTP, length: 110
    GET /get?username=foobar&amp;password=secret HTTP/1.1
    Host: httpbin.org
    User-Agent: curl/7.54.0
    Accept: */*
</code></pre>
<p>There you go. Your password was recorded as it passed through the network.</p>
<p>You will also see the response sent back by the server in clear text that in our case happens to contain the password again, though in regular service that should not happen. The point though is that both what you sent and what you received could be recorded by someone who listens in on the wire or on the wireless.</p>
<p>Not only that, but the content of the parameters can be seen in the address-bar of your browser. They will be also recorded in the log of the web server.</p>
<h2 class="title is-4">POST over HTTP</h2>
<p>POST requests seem to be more secure. For one, the data is not sent in the URL, so people watching over your shoulder cannot see it. Normally it does not get recored in the web server logs either. Though that could be changed by the web site owner.</p>
<p>We can tell <code>curl</code> to send a POST request instead of the default GET using the <code>-X</code> flag and then we can supply the data using the <code>-d</code> flag:</p>
<pre><code>curl -X POST -d 'username=foobar&amp;password=secret' 'http://httpbin.org/post'
</code></pre>
<p>This is the same when you have an HTML form using &quot;POST&quot; as the method of submission. Like in the next form that will open a new tab or new window:</p>
<form method="POST" action="http://httpbin.org/post" target="_new">
<input name="username" value="foobar">
<input name="password" type="password" value="secret">
<input type="submit" value="Send">
</form>
<p>In Firefox when you click on the submit button you'll get a pop-up warning you:</p>
<img src="/img/firefox-http-warning.png" alt="Firefox Security warning">
<p>On the terminal where you ran <code>tcpdump</code> you'll see, among some other output, the following:</p>
<pre><code>    192.168.1.101.50593 &gt; ec2-54-243-175-5.compute-1.amazonaws.com.http: Flags [P.], cksum 0xc8e5 (correct), seq 1:549, ack 1, win 4096, options [nop,nop,TS val 2187521457 ecr 795639310], length 548: HTTP, length: 548
    POST /post HTTP/1.1
    Host: httpbin.org
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:56.0) Gecko/20100101 Firefox/56.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 31
    Cookie: _gauges_unique_month=1; _gauges_unique_year=1; _gauges_unique=1; _gauges_unique_hour=1; _gauges_unique_day=1
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1

    username=foobar&amp;password=secret[!http]
</code></pre>
<p>There, the list line is the data I've submitted via the browser.</p>
<p>So even though in POST requests the data cannot be seen in the address-bar of the browser, it is still sent as clear text behind the scene. So someone monitoring your traffic can still see it.</p>
<h2 class="title is-4">GET over HTTPS</h2>
<p>Let's see what happens with the same requests going over HTTPS.</p>
<pre><code>curl 'https://httpbin.org/get?username=foobar&amp;password=secret'
</code></pre>
<p>Or click on <a href="https://httpbin.org/get?username=foobar&amp;password=secret">this link</a>.</p>
<p>If you look at the terminal with the <code>tcpdump</code> in it you will only see unreadable data. That's because everything is encrypted. <b>We can still see with which computer do you communicate</b>, but we cannot see the content of your request. Not even the URL you accessed.</p>
<p>Someone standing behind the shoulder still can see the parameters in the address-bar and it still gets recorded in the log file, but at least others cannot see all the details of your communication.</p>
<h2 class="title is-4">POST over HTTPS</h2>
<p>The same with POST requests, except the address-bar and the log files.</p>
<pre><code>curl -X POST -d 'username=foobar&amp;password=secret' 'https://httpbin.org/post'
</code></pre>
<form method="POST" action="https://httpbin.org/post" target="_new">
<input name="username" value="foobar">
<input name="password" type="password" value="secret">
<input type="submit" value="Send">
</form>
<h2 class="title is-4">TL;DR</h2>
<p>As a web site owner check out <a href="https://letsencrypt.org/">Let's encrypt</a>. They provide HTTPS certificates free of charge. With a little effort you can make your site and your users more secure.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Functions in Linux shell (bash)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-01-17T20:30:01Z</updated>
    <pubDate>2019-01-17T20:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/functions-in-shell" />
    <id>https://code-maven.com/functions-in-shell</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Define and call a function in Bash</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/hello_world_function.sh">examples/shell/hello_world_function.sh</a></strong></p>
<pre><code class="language-bash">function hello()
{
    echo &quot;Hello World&quot;
}

echo before
hello
echo after

</code></pre>
<h2 class="title is-4">Return value from shell function</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/return_from_function.sh">examples/shell/return_from_function.sh</a></strong></p>
<pre><code class="language-bash">function hello()
{
    echo &quot;hello world&quot;
}

result=$(hello)

echo before
echo $result
echo after

</code></pre>
<h2 class="title is-4">Parameter passing to functions in shell</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/parameter_passing.sh">examples/shell/parameter_passing.sh</a></strong></p>
<pre><code class="language-bash">function foo()
{
   echo &quot;param: '$1'  param: '$2'&quot;
}

echo before
foo &quot;one&quot; &quot;and two&quot;
echo after

</code></pre>
<h2 class="title is-4">Early return from shell functions</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/early_return.sh">examples/shell/early_return.sh</a></strong></p>
<pre><code class="language-bash">function foo()
{
   param=$1
   if [ &quot;$param&quot; == &quot;ok&quot; ]
   then
       echo &quot;short&quot;
       return
   fi
      echo &quot;long&quot;
}

foo

foo ok

foo

</code></pre>
<p>See also <a href="https://www.linuxjournal.com/content/return-values-bash-functions">Returning Values from Bash Functions</a></p>
<h2 class="title is-4">Empty shell functions</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/empty.sh">examples/shell/empty.sh</a></strong></p>
<pre><code class="language-bash">function hello()
{
}


</code></pre>
<p>This does not work, but gives this error:</p>
<pre><code>./empty.sh: line 3: syntax error near unexpected token `}'
./empty.sh: line 3: `}'
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/shell/empty_with_colon.sh">examples/shell/empty_with_colon.sh</a></strong></p>
<pre><code class="language-bash">function hello()
{
:
}


</code></pre>
<h2 class="title is-4">A Bash function can be called only after declaration</h2>
<pre><code># qqrq    # ./func.sh: line 2: qqrq: command not found

function qqrq()
{
   echo &quot;hello&quot;
}

qqrq
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Create temporary directory on Linux with Bash using mktemp</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-01-11T07:30:01Z</updated>
    <pubDate>2019-01-11T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/create-temporary-directory-on-linux-using-bash" />
    <id>https://code-maven.com/create-temporary-directory-on-linux-using-bash</id>
    <content type="html"><![CDATA[<p>When writing a test or whenn running a build job it is usually a good practice to use a temporary directory and then
clean up after the process is done.</p>
<p>It is also a good practice to make sure the temporary directoy is unique so if two processes run at the same time they
won't interfere.</p>
<p>In Linux one usually has a directory called <code>/tmp</code> to store temporary files. In most of the programming languages
there is some tool to create temporary directories. Sometimes these also handle the removal of these directories once
they are not needed any more.</p>
<p>In Unix/Linux shell we can use the <code>mktemp</code> commmand to create a temporary directory inside the <code>/tmp</code>
directory.</p>
<pre><code>mktemp -d -t ci-XXXXXXXXXX
</code></pre>
<p>The <code>-d</code> flag instructs the command to create the directory.</p>
<p>The <code>-t</code> flag allows us to provide a template. Each <code>X</code> character will be replaced by a random character.
The more such characters the better your chances of having a unique directory. The rest of the template can and should
be use to make it clear what is the purpose of the directory. In the above example this directory was created for and by
the CI system.</p>
<p>The command will print the directory to the screen, but you can capture it to a variable and you can use it to
create your files in this temporary directory.</p>
<pre><code>tmp_dir=$(mktemp -d -t ci-XXXXXXXXXX)
</code></pre>
<p>At the end of the process you will probably want to remove the directory.</p>
<p>Here is a full example:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ci.sh">examples/ci.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash
tmp_dir=$(mktemp -d -t ci-XXXXXXXXXX)
echo $tmp_dir

# ...

rm -rf $tmp_dir


</code></pre>
<p>It will print the name of the directory that will look like this:</p>
<pre><code>/tmp/ci-9p1TBXRJZK
</code></pre>
<h2 class="title is-4">Date based directory</h2>
<p>It can be also a good idea to include the date in the name of the directory.
Especially if we might keep it for later observation. In any case here is
an example on how to generate a temporary directory that has a fixed part,
a date-based part, and a random part:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ci-date.sh">examples/ci-date.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash
tmp_dir=$(mktemp -d -t ci-$(date +%Y-%m-%d-%H-%M-%S)-XXXXXXXXXX)

echo $tmp_dir

rm -rf $tmp_dir

</code></pre>
<p>The directory name will look like this:</p>
<pre><code>/tmp/ci-2019-01-11-11-48-34-KdQBLLObFw
</code></pre>
<h2 class="title is-4">Other root directory</h2>
<p>By default the temporary directory will be created inside the <code>/tmp</code> directory.
Sometimes we might want it to be in some other directory. For example I've created a tmp
directory in my home directory and wanted to place the temporary directories inside that
directory:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ci-other.sh">examples/ci-other.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash
tmp_dir=$(mktemp -d -t ci-XXXXXXXXXX --tmpdir=/home/gabor/tmp)

echo $tmp_dir

rm -rf $tmp_dir

</code></pre>
<p>The path to the new directory will look like this:</p>
<pre><code>/home/gabor/tmp/ci-PWDTbA19TA
</code></pre>
<p>For further options you might want to check out the <a href="https://www.gnu.org/software/autogen/mktemp.html">documentation of mktemp</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Free Meetup Spaces in Israel</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-01-01T07:30:07Z</updated>
    <pubDate>2019-01-01T07:30:07Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/venues-in-israel" />
    <id>https://code-maven.com/venues-in-israel</id>
    <content type="html"><![CDATA[<p>This page was created in 2019, long before COVID. Things have changed a lot since then.
For one I don't organize events so I have not checked if anything is still relevant in this list.</p>
<p>If you are an event organizer with a new group it might be tricky to find a good place for your gathering,
but even if you already have a large group with a long history you might be interested
to find alternative places to hold your events.
It can broaden the membership and can make your group more accessible to pepple living and working in other areas of the country.</p>
<p>On this page you'll find some of the best venues where you can organize your events. The majority seem to be in the
center of the country, especially in Tel Aviv, but I included information about other cities as well.</p>
<h2 class="title is-4">The questions</h2>
<p>Throught this post I am trying to answer the following questions about each place:</p>
<ul>
<li>
<p>Name of the place. Obviously.</p>
</li>
<li>
<p>Location (address).</p>
</li>
<li>
<p>The available spaces. (number of people, types of events: presentations only, hands-on events as well, or just round-table chats?)</p>
</li>
<li>
<p>How to get a time-slot to organize an event? (The process of registration)</p>
</li>
<li>
<p>What kind of events and content are they interested in?</p>
</li>
<li>
<p>At what time can event be organized?</p>
</li>
<li>
<p><a href="#tel-aviv">Tel Aviv</a></p>
<ul>
<li><a href="#google">Google</a></li>
<li><a href="#amazon">Amazon</a></li>
<li><a href="#microsoft">Microsoft</a></li>
<li><a href="#wix-tel-aviv">Wix</a></li>
<li><a href="#doit">DoIt</a></li>
<li><a href="#ironsource">ironSource</a></li>
<li><a href="#tikal">Tikal</a></li>
</ul>
</li>
<li>
<p><a href="#haifa">Haifa</a></p>
</li>
<li>
<p><a href="#jerusalem">Jerusalem</a></p>
</li>
<li>
<p><a href="#beer-sheva">Beer Sheva</a></p>
</li>
<li>
<p><a href="#herzliya">Herzliya</a></p>
</li>
</ul>
<h2 class="title is-4">Tel Aviv</h2>
<h3 class="title is-5"><a href="https://www.campus.co/tel-aviv/en">Google for Startups</a> - Tel Aviv</h3>
<p><a href="https://www.campus.co/tel-aviv/en">Google for Startups</a> (was Google Campus) is located in
HaUmanim 12, Tel Aviv, near the Azrieli towers. A very central location in Tel Aviv easily accessible with public transportation.
On the other hand arriving by car can be tricky.</p>
<p>There are 3 options to host events:</p>
<p>The Event Space (142 people) good for presentations.</p>
<img src="/static/img/venues-il/google-startup-event-space.jpg" />
<p>The Classroom (24 people) good for presentations and hands-on workshops.</p>
<img src="/static/img/venues-il/google-startup-class.jpg" />
<p>The Cafe (60 people) good for hands-on workshops, hackathons.</p>
<img src="/static/img/venues-il/google-startup-cafe.jpg" />
<p>They are open Sunday-Thursday 6:00-23:00 and you can schedule events during the day as well.</p>
<p>There is an on-line registration form to apply where you can see the available time-slots.
Soon after you submit your request to hold an event they send you their approval or they might ask
for clarification.</p>
<p>They are usually open to any type of technical event.</p>
<p>They also have their own <a href="https://www.campus.co/tel-aviv/en/events/">calendar of events</a> and promote your event to their members.</p>
<h3 class="title is-5"><a href="https://floor28.co.il/">Floor 28 Amazon AWS</a> - Tel Aviv</h3>
<p><a href="https://floor28.co.il/">AWS Floor28</a> is also located walking distance from the Azrieli
shopping mall in 121 Menachem Begin, Tel Aviv. Not surprisingly they are on the 28th floor of the Azrieli Sarona tower.</p>
<h3 class="title is-5"><a href="https://developer.microsoft.com/en-us/reactor/Location/Tel%20Aviv">Microsoft Reactor</a> - Tel Aviv</h3>
<p>The <a href="https://developer.microsoft.com/en-us/reactor/Location/Tel%20Aviv">Microsoft Reactor</a> is located in Dubnov 7, Tel Aviv.</p>
<p>It is open 9:00-18:00 Sunday-Thursday though events can last till 21:30 as well.</p>
<p>The event space can be used as a Classroom for max 120 people or as a theater for max 170 people.</p>
<img src="/static/img/venues-il/microsoft-tlv-space.jpg" />
<p>There is also a kitchen area with some free refreshments:</p>
<img src="/static/img/venues-il/microsoft-tlv-kitchen.jpg" />
<p>They have their own event-calendar on the <a href="https://developer.microsoft.com/en-us/reactor/">web site of the Reactor</a>
where you can check availability of the space and they have
an on-line form to request the space.</p>
<h3 class="title is-5"><a href="https://www.wix.engineering/">Wix</a> - Tel Aviv</h3>
<p>Wix itself has a number of Meetup groups, the biggets one being the <a href="https://www.meetup.com/at-wix/">At Wix</a>.
In addition they host events of a number of other groups.</p>
<p><a href="https://www.wix.engineering/">Wix</a> hosts events in Bitan 26, Namal Tel Aviv,
but they also have places in <a href="#beer-sheva">Beer Sheva</a> and <a href="#haifa">Haifa</a>.</p>
<h3 class="title is-5"><a href="https://www.doit-intl.com/">DoiT International</a> - Tel Aviv</h3>
<p><a href="https://www.doit-intl.com/">DoiT International (Israel)</a></p>
<p>Located at David Elazar 12, Tel Aviv-Yafo.</p>
<h3 class="title is-5"><a href="https://www.ironsrc.com/">ironSource</a> - Tel Aviv</h3>
<p><a href="https://www.ironsrc.com/">ironSource</a>
Located at Azrieli Sarona, 121 Derech Menachem Begin, Tel Aviv-Yafo</p>
<p>They have an auditorium that seats 150 people on couches, chairs and steps. It's a great set-up for a presentation.</p>
<p>They are interested in all kinds of tech, creative and content meet-ups.</p>
<p>Thers is no calendar of events and you can't check the availability of their space
on-line, but if you'd like to organize an event there,
you can send an email to <a href="mailto:events@ironsource.com">events@ironsource.com</a> adding as many details of your event as possible, and they will get back
to you soon.</p>
<p>The auditorium:</p>
<img src="/static/img/venues-il/ironsource-empty.jpg" />
<p>The auditorium packed with people:</p>
<img src="/static/img/venues-il/ironsource-full.jpg" />
<p>The terrace:</p>
<img src="/static/img/venues-il/ironsource-outside.jpg" />
<h3 class="title is-5"><a href="https://redislabs.com/">RedisLabs</a> - Tel Aviv</h3>
<p><a href="https://redislabs.com/">RedisLabs</a>.</p>
<p>Located in Igal Alon 94 Alon 2 Tower 32nd Floor, Tel-Aviv. It seems they are only interested in events related to Redis.</p>
<h3 class="title is-5"><a href="https://www.tikalk.com/">Tikal</a> - Tel Aviv</h3>
<p><a href="https://www.tikalk.com/">Tikal</a> has it office in Kiryat Atidim, Building 7, 3rd Floor.  Tel Aviv.</p>
<h3 class="title is-5">Haifa</h3>
<p>There are a number of Meetup groups in Haifa. One of them, the <a href="https://www.meetup.com/Haifa-Tech-Talks/">Haifa Tech Talks</a>
had event in many different locations so if you'd like to organize an event in Haifa it might be a good idea to contact
them and cooperate with them.</p>
<h2 class="title is-4"><a href="https://hicenter.co.il/">hiCenter</a> - Haifa</h2>
<p><a href="https://hicenter.co.il/">hiCenter</a>
at 32 Sderot Hameginim, Haifa 3326226, Israel
had a number of events. The have their of <a href="https://www.meetup.com/hiCenter-Campus-Meetup-Group/">hiCenter Meetup group</a></p>
<h2 class="title is-4"><a href="https://www.research.ibm.com/labs/haifa/visitor.shtml">IBM research labs</a> - Haifa</h2>
<p><a href="https://www.research.ibm.com/labs/haifa/visitor.shtml">IBM research labs Haifa</a>
<a href="https://www.meetup.com/Haifa-Cloud/">Haifa Cloud</a> held their events there.</p>
<h2 class="title is-4"><a href="https://www.wix.engineering/">Wix</a> - Haifa</h2>
<p><a href="https://www.wix.engineering/">Wix</a> at Derech HaAtzmaut 45, Haifa.</p>
<h3 class="title is-5">Jerusalem</h3>
<p>It seems in Jerusalem there are only very few Meetup groups and every time they meet at a different venue. If you'd like
to find a venue there, it is probably best to talk to the organizers of one of the few existing groups.</p>
<p>The biggest ones are
<a href="https://www.meetup.com/MadeinJLM/">Made in JLM- Jerusalem Tech &amp; Start-Up Community</a> has over 3,000 members,
<a href="https://www.meetup.com/DataTalks-JLM-Machine-and-Deep-Learning-in-the-Holy-City/">JerusML - Machine and Deep Learning in the Holy City</a> has 1,600 members.</p>
<p>Search for more
<a href="https://www.meetup.com/find/?allMeetups=true&amp;radius=10&amp;userFreeform=Jerusalem%2C+Israel&amp;mcId=c1017961&amp;change=yes&amp;sort=recommended&amp;eventFilter=mysugg">groups in Jerusalem</a>.</p>
<h3 class="title is-5">Beer Sheva</h3>
<h2 class="title is-4"><a href="https://www.wix.engineering/">Wix</a> - Beer Sheva</h2>
<p>Wix has an office in Torat HaYahasut 11, Beer Sheva where they organize events. See the Tel Aviv listing above.</p>
<p>In addition you can find
<a href="https://www.meetup.com/find/?allMeetups=true&amp;radius=25&amp;userFreeform=Be%27er+Sheva%2C+Israel&amp;mcId=c1017966&amp;change=yes&amp;sort=recommended&amp;eventFilter=mysugg">groups in Beer Sheva</a>.</p>
<h3 class="title is-5">Herzliya</h3>
<p><a href="https://www.appsflyer.com/">AppsFlyer</a> hosts events at its HQ at Maskit 14 Floor 6, Herzliya.</p>
<p>They have a <a href="https://www.meetup.com/AppsFlyer/">Meetup group</a> of their own.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Terraform</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2019-01-01T07:30:06Z</updated>
    <pubDate>2019-01-01T07:30:06Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/terraform" />
    <id>https://code-maven.com/terraform</id>
    <content type="html"><![CDATA[<p>This post isn't really finished, but one day it might be useful.</p>
<p>infrastructure as code
HashiCorp Terraform</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/terraform/1/main.tf">examples/terraform/1/main.tf</a></strong></p>
<pre><code class="language-txt">provider &quot;google&quot; {
  project     = &quot;project-name-1234&quot;
  region      = &quot;us-central1&quot;
}

resource &quot;google_compute_instance&quot; &quot;gabor&quot; {
  name         = &quot;gabor-1&quot;
  machine_type = &quot;f1-micro&quot;
  zone         = &quot;us-central1-a&quot;

  boot_disk {
    initialize_params {
      image = &quot;ubuntu-1804-lts&quot;
    }
  }

  network_interface {
    subnetwork = &quot;central1-resources&quot;
  }
}




</code></pre>
<pre><code>terraform init
terraform apply
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/terraform/2/main.tf">examples/terraform/2/main.tf</a></strong></p>
<pre><code class="language-txt">provider &quot;google&quot; {
  project     = &quot;project-name-12345&quot;
  region      = &quot;us-central1&quot;
}

resource &quot;google_compute_instance&quot; &quot;gabor&quot; {
  name         = &quot;gabor-${count.index + 1}&quot;
  machine_type = &quot;f1-micro&quot;
  zone         = &quot;us-central1-b&quot;
  count        = &quot;2&quot;

  labels = {
    owner = &quot;gabor&quot;
    group = &quot;devops&quot;
  }

#  tags = [&quot;access-external&quot;]

  boot_disk {
    initialize_params {
      image = &quot;ubuntu-1804-lts&quot;
    }
  }

  network_interface {
    subnetwork = &quot;central1-resources&quot;
  }

  scheduling {
    preemptible  = false
    automatic_restart = false
  }
}



</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/terraform/count/main.tf">examples/terraform/count/main.tf</a></strong></p>
<pre><code class="language-txt">vars {
   total = 1
}

resource &quot;google_compute_instance&quot; &quot;gabor&quot; {
  name         = &quot;gabor-${count.index + 1}&quot;
  machine_type = &quot;f1-micro&quot;
  # get the available zones of the current region and get the number of them
  #count = &quot;${length(data.google_compute_zones.available.names)}&quot;
  # pick the zone from the array (we cannot have a count that is larger than the available zones)
  #zone         = &quot;${data.google_compute_zones.available.names[count.index]}&quot;

  # we can use modulus, but now the number of entries in the list of zones is hard-coded 4
  #count        = &quot;10&quot;
  #zone         = &quot;${data.google_compute_zones.available.names[count.index % 4]}&quot;

  #vars.total = &quot;${length(data.google_compute_zones.available.names)}&quot;
  count        = &quot;10&quot;
  zone         = &quot;${data.google_compute_zones.available.names[count.index % ${vars.total} ]}&quot;

  labels = {
    owner = &quot;gabor&quot;
    group = &quot;devops&quot;
  }
}

</code></pre>
<p>links</p>
<p><a href="https://www.terraform.io/docs/configuration-0-11/interpolation.html#math">https://www.terraform.io/docs/configuration-0-11/interpolation.html#math</a></p>
<p><a href="https://www.terraform.io/docs/configuration/resources.html">https://www.terraform.io/docs/configuration/resources.html</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/terraform/google/main.tf">examples/terraform/google/main.tf</a></strong></p>
<pre><code class="language-txt">#variable &quot;region&quot; { default = &quot;us-central1&quot; }
variable &quot;name&quot; { }
variable &quot;zone&quot; { default = &quot;us-central1-a&quot; }

provider &quot;google&quot; {
 project     = &quot;project-name-12345&quot;
#  region      = &quot;${var.region}&quot;
}

resource &quot;google_compute_instance&quot; &quot;gabor&quot; {
 name         = var.name
 machine_type = &quot;f1-micro&quot;
 zone         = &quot;${var.zone}&quot;

 boot_disk {
   initialize_params {
     image = &quot;ubuntu-1804-lts&quot;
   }
 }

 network_interface {
   subnetwork = &quot;gce-d-us-central1-indexing&quot;
 }

 labels = {
   activity    = &quot;temp&quot;
   delete_at   = &quot;never&quot;
   group       = &quot;devops&quot;
   owner       = &quot;gabor&quot;
   start_at    = &quot;never&quot;
   stop_at     = &quot;never&quot;
 }

 connection {
     type     = &quot;ssh&quot;
     user     = &quot;gabor&quot;
     host     = var.name
 }

 provisioner &quot;file&quot; {
   source = &quot;startup.sh&quot;
   destination = &quot;/home/gabor/startup.sh&quot;
 }

 provisioner &quot;remote-exec&quot; {
   inline = [
      &quot;chmod +x /home/gabor/startup.sh&quot;
      #&quot;apt-get update&quot;,
      #&quot;apt-get install -y htop&quot;,
   ]
 }

 metadata = {
   &quot;startup-script&quot; : &quot;/home/gabor/startup.sh&quot;
 }
 #metadata_startup_script = &quot;date &gt;&gt; /opt/test.txt&quot;
}


</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/terraform/google/startup.sh">examples/terraform/google/startup.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash -x

date &gt;&gt; /home/gabor/startup.log


</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/terraform/google/dev.tfvars">examples/terraform/google/dev.tfvars</a></strong></p>
<pre><code class="language-txt">name = &quot;gabor-23&quot;
zone = &quot;us-central1-a&quot;

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Docker</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-12-07T09:30:01Z</updated>
    <pubDate>2018-12-07T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/docker-commands" />
    <id>https://code-maven.com/docker-commands</id>
    <content type="html"><![CDATA[<p>Check out the <a href="/docker">Docker Course</a>.</p>
<p>Build a Docker image</p>
<pre><code>docker build -t NAME .
</code></pre>
<p>List Docker Images</p>
<pre><code>docker images
</code></pre>
<p>List Running Docker Containers</p>
<pre><code>docker ps
</code></pre>
<p>List All Docker Containers, includig the ones that were stopped</p>
<pre><code>docker ps -a
</code></pre>
<p>Run a docker image in an interactive mode and open /bin/bash</p>
<pre><code>docker run -it IMAGE /bin/bash
</code></pre>
<p>Run the Docker image called IMAGE as the container called NAME in an interactive mode.
Attach the current working directory in the host filesystem to the /opt in the container.</p>
<pre><code>docker run -it -v $(pwd):/opt --name NAME IMAGE
</code></pre>
<p>List all the docker containers in quiet mode - CONTAINER IDs only</p>
<pre><code>docker ps -aq
</code></pre>
<p>Remove docker container by DOCKER ID</p>
<pre><code>docker rm DOCKER_ID
</code></pre>
<p>Combine the above two and remove all exited (stopped) the Docker containers:</p>
<pre><code>docker rm $(docker ps -aq)
</code></pre>
<pre><code>docker run -it  -d -p 8080:80 sudoku  /bin/bash
</code></pre>
<p>Attach to running container based on CONTAINER ID that can be listed by <code>docker ps -a</code>.</p>
<pre><code>docker attach CONTAINER_ID
</code></pre>
<p>Then we can exit the container.</p>
<h2 class="title is-4">Docker Hub</h2>
<p>Once we have a Dockerfile in our GitHub project we can configure Docker to host our public image.
For this we need to register on the <a href="https://hub.docker.com/">Docker HUB</a>. In there we need
to click on Create/Create Automated Build in the menu. If we have not linked our GitHub account yet then we need
to do it now. (See <a href="https://docs.docker.com/docker-hub/builds/">Configure automated builds on Docker Hub</a>
for further details.)</p>
<h2 class="title is-4">Digital Ocean</h2>
<p>The docker-machine command allows us to use VPS-es on various cloud service providers, for example on <a href="/digitalocean">Digital Ocean</a>. There is an article on <a href="https://docs.docker.com/machine/examples/ocean/">Docker for Digital Ocean</a>.</p>
<pre><code>$ docker-machine create --driver digitalocean --digitalocean-access-token xxxxx docker-sandbox
</code></pre>
<p>Where xxxx is the Access token you generate in your Digital Ocean account. docker-sandbox is an arbitrary name that will be used as the name of the VPS on Digial Ocean.</p>
<pre><code>$ docker-machine ls
$ docker-machine ip docker-sandbox
$ docker-machine inspect docker-sandbox
</code></pre>
<p>There all Run locally and lists the machne we have in the cloud and maybe also locally or inspect the configuration of one of the machines.</p>
<pre><code>docker-machine env docker-sandbox
</code></pre>
<pre><code>eval $(docker-machine env docker-sandbox)
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>at - running a command at some time in the future in Linux (relative time or absolute time)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-11-14T07:30:01Z</updated>
    <pubDate>2018-11-14T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/at" />
    <id>https://code-maven.com/at</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Install &quot;at&quot; on Ubuntu</h2>
<pre><code>sudo apt-get install at
</code></pre>
<h2 class="title is-4">Commands in a file - relative time</h2>
<p>Save your commands in a file. e.g.   <b>run.sh</b> will look like this:</p>
<pre><code>date &gt; a.txt
whoami &gt;&gt; a.txt
</code></pre>
<p>Then schedule it to be execute a minute later:</p>
<pre><code>at now + 1 minute &lt; run.sh
</code></pre>
<h2 class="title is-4">Run without file - relative time</h2>
<pre><code>echo &quot;date &gt; b.txt&quot; | at now + 1 minute
</code></pre>
<p>A minute later you can check your file system. You'll see a new file called &quot;b.txt&quot; with the date in it.</p>
<h2 class="title is-4">Run without file - absolute time</h2>
<pre><code>echo &quot;date &gt; c.txt&quot; | at 04:58
</code></pre>
<p>At 04:58 the file c.txt will be created with the timestamp in it.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>jq</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-11-11T11:12:13Z</updated>
    <pubDate>2018-11-11T11:12:13Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jq" />
    <id>https://code-maven.com/jq</id>
    <content type="html"><![CDATA[<p><a href="https://stedolan.github.io/jq/">jq</a> is the swiss army knife for dealing with JSON files.</p>
<p>Alternatively, you can write your own <a href="/json-beautifier">JSON beautifier</a> in one line of your facorite languge.</p>
<h2 class="title is-4">Fetching a JSON file</h2>
<p>Fetching a JSON file is the job of <code>curl</code> or similar tools. Here is an example how you might do it:</p>
<pre><code>curl -X GET -H &quot;Content-Type: application/json&quot; -H &quot;Authorization: Bearer $DO_API_TOKEN&quot; &quot;https://api.digitalocean.com/v2/images?type=distribution&quot; &gt; images.json
</code></pre>
<p>A few <code>jq</code> command that can be used for that file.</p>
<pre><code>jq keys images.json

jq .images[].slug images.json

jq .links images.json  | jq keys

jq .images images.json  | jq keys      are all numbers
</code></pre>
<h2 class="title is-4">A sample JSON file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/in.json">examples/data/in.json</a></strong></p>
<pre><code class="language-json">{&quot;prereqs&quot;:{&quot;runtime&quot;:{&quot;requires&quot;:{&quot;Code::Explain&quot;:&quot;0.02&quot;,&quot;App::Ack&quot;:&quot;0&quot;,&quot;Archive::Any&quot;:&quot;0&quot;,&quot;Acme::MetaSyntactic&quot;:&quot;1.012&quot;}}},&quot;name&quot;:&quot;Perl-Maven&quot;,&quot;author&quot;:[&quot;Gabor Szabo&quot;],&quot;abstract&quot;:&quot;Web application running the Perl Maven sites&quot;,&quot;no_index&quot;:{&quot;directory&quot;:[&quot;t&quot;,&quot;inc&quot;]},&quot;generated_by&quot;:&quot;ExtUtils::MakeMaker version 7.08, CPAN::Meta::Converter version 2.150005&quot;,&quot;meta-spec&quot;:{&quot;url&quot;:&quot;http://search.cpan.org/perldoc?CPAN::Meta::Spec&quot;,&quot;version&quot;:&quot;2&quot;}}
</code></pre>
<p>Print the whole content of the JSON file in a readable way:</p>
<pre><code>jq . in.json
</code></pre>
<p>Print the top-level keys of the file:</p>
<pre><code>jq keys in.json

[
  &quot;abstract&quot;,
  &quot;author&quot;,
  &quot;generated_by&quot;,
  &quot;meta-spec&quot;,
  &quot;name&quot;,
  &quot;no_index&quot;,
  &quot;prereqs&quot;
]
</code></pre>
<p><b>The value of a key</b></p>
<p>The name after the dot.</p>
<pre><code>jq .abstract examples/data/in.json
jq .prereqs examples/data/in.json

jq .prereqs.runtime.requires examples/data/in.json
{
  &quot;Code::Explain&quot;: &quot;0.02&quot;,
  &quot;App::Ack&quot;: &quot;0&quot;,
  &quot;Archive::Any&quot;: &quot;0&quot;,
  &quot;Acme::MetaSyntactic&quot;: &quot;1.012&quot;
}
</code></pre>
<p>Element in a list</p>
<pre><code>jq .no_index.directory[0] examples/data/in.json
</code></pre>
<h2 class="title is-4">Array as the top level item</h2>
<p>If the top level is an array <code>jq keys data.json</code> will list the indexes <code>jq .[0].name data.json</code> will fetch the &quot;name&quot; field of the first element.</p>
<h2 class="title is-4">Generating JSON</h2>
<pre><code>echo '{}' | jq --arg name 'Foo Bar' --arg email 'foo@bar.com' '.name |= $name | .address |= $email'
</code></pre>
<p>generates this:</p>
<pre><code>{
  &quot;name&quot;: &quot;Foo Bar&quot;,
  &quot;address&quot;: &quot;foo@bar.com&quot;
}
</code></pre>
<h2 class="title is-4">Adding values to JSON</h2>
<p>Given a JSON file, eg. `template.json</h2> with the following content:</p>
<pre><code>{
    &quot;title&quot;: &quot;Example&quot;
}
</code></pre>
<p>We can add fields to it:</p>
<pre><code>jq --arg name 'Foo Bar' --arg email 'foo@bar.com' '.name |= $name | .address |= $email' template.json 
</code></pre>
<p>The result will look like this:</p>
<pre><code>{
  &quot;title&quot;: &quot;Example&quot;,
  &quot;name&quot;: &quot;Foo Bar&quot;,
  &quot;address&quot;: &quot;foo@bar.com&quot;
}
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>PostgreSQL</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-10-30T07:30:01Z</updated>
    <pubDate>2018-10-30T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/postgresql" />
    <id>https://code-maven.com/postgresql</id>
    <content type="html"><![CDATA[<p>Just some PostgreSQL related commands.</p>
<h2 class="title is-4">Copy a whole database</h2>
<pre><code>CREATE DATABASE new_db_name WITH TEMPLATE origin_db_name;
</code></pre>
<h2 class="title is-4">Get list of databases</h2>
<pre><code>SELECT datname FROM pg_database ORDER BY datname
</code></pre>
<h2 class="title is-4">Get the size of all the databases</h2>
<pre><code>   SELECT
       t1.datname AS db_name,
       pg_database_size(t1.datname) AS db_size
   FROM pg_database t1
   ORDER BY pg_database_size(t1.datname) DESC;
</code></pre>
<p>The same on the command line:</p>
<pre><code>PGPASSWORD=password  psql -h 10.11.12.13  -U username -c &quot;SELECT t1.datname AS db_name, pg_size_pretty(pg_database_size(t1.datname)) AS db_size FROM pg_database t1 ORDER BY pg_database_size(t1.datname) DESC;
</code></pre>
<h2 class="title is-4">Get the size of a single database</h2>
<pre><code>SELECT pg_database_size('foobar');
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Using the Open Weather Map API with curl</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-10-26T12:30:01Z</updated>
    <pubDate>2018-10-26T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/openweathermap-api-using-curl" />
    <id>https://code-maven.com/openweathermap-api-using-curl</id>
    <content type="html"><![CDATA[<p>The <a href="https://openweathermap.org/">Open Weather Map</a> provides data about the weather. How novel :)</p>
<p>The really cool part is that a large chunk of the data can be received via their <a href="https://openweathermap.org/api">API</a>
free of charge. Let's see a simple example using their API from a Perl script.</p>
<h2 class="title is-4">Get API keys</h2>
<p>Though you don't have to pay for the service you need to get an <strong>API key</strong> to identify your requests. In order to get
an API key you need to register on the <a href="https://home.openweathermap.org/">Open Weather Map</a> web site and then
you need to visit the <a href="https://home.openweathermap.org/api_keys">API keys</a> section  of the site. There you can generate
API keys.</p>
<p>Once you have the key you can start reading the documentation of the API and you can start making calls either with your browser
or using something like <code>curl</code> on the command line.</p>
<p>For example:</p>
<pre><code>curl &quot;https://api.openweathermap.org/data/2.5/weather?q=Budapest&amp;appid=a457e758ed0d9ab3fcc40xxxe&amp;units=metric&quot;
</code></pre>
<p>has several parts:</p>
<ol>
<li>The URL itself that leads to the correct end-point of the specific query type.</li>
<li><code>q=Budapest</code>, the parameter indicating the name of the city for which I am interested in the weather.</li>
<li><code>appid=...</code> which is the API key generated manually on the web site. In order to use this you'll need to replace the one above with an API key of your own.</li>
<li><code>units=metric</code> tells the API that instead of the default Kelvin you'd like to get the temperatures in Celsius.</li>
</ol>
<p>The above request returned the following JSON:</p>
<pre><code>{
  &quot;coord&quot;: {
    &quot;lon&quot;: 19.04,
    &quot;lat&quot;: 47.5
  },
  &quot;weather&quot;: [
    {
      &quot;id&quot;: 701,
      &quot;main&quot;: &quot;Mist&quot;,
      &quot;description&quot;: &quot;mist&quot;,
      &quot;icon&quot;: &quot;50d&quot;
    }
  ],
  &quot;base&quot;: &quot;stations&quot;,
  &quot;main&quot;: {
    &quot;temp&quot;: 3,
    &quot;pressure&quot;: 1016,
    &quot;humidity&quot;: 74,
    &quot;temp_min&quot;: 3,
    &quot;temp_max&quot;: 3
  },
  &quot;visibility&quot;: 5000,
  &quot;wind&quot;: {
    &quot;speed&quot;: 1.5
  },
  &quot;clouds&quot;: {
    &quot;all&quot;: 75
  },
  &quot;dt&quot;: 1518174000,
  &quot;sys&quot;: {
    &quot;type&quot;: 1,
    &quot;id&quot;: 5724,
    &quot;message&quot;: 0.0038,
    &quot;country&quot;: &quot;HU&quot;,
    &quot;sunrise&quot;: 1518155907,
    &quot;sunset&quot;: 1518191898
  },
  &quot;id&quot;: 3054643,
  &quot;name&quot;: &quot;Budapest&quot;,
  &quot;cod&quot;: 200
}
</code></pre>
<p>I used <a href="https://stedolan.github.io/jq/">jq</a> to beautify the JSON structure.</p>
<p>You can go on further experiment with the other API end-point, or you can start building
and application using these requests in <a href="https://perlmaven.com/pro/openweathermap-api-using-perl">Perl</a> or in <a href="/openweathermap-api-using-python">Python</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Pretty print JSON with beautifier: How to make a JSON readable</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-09-18T17:30:01Z</updated>
    <pubDate>2018-09-18T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/json-beautifier" />
    <id>https://code-maven.com/json-beautifier</id>
    <content type="html"><![CDATA[<p><a href="https://stedolan.github.io/jq/">jq</a> is the swiss army knife for dealing with JSON files. If you can install it use that.</p>
<p>However I often find myself in situations where, for whatever technical, legal, or just plain stupid reason I cannot install it.</p>
<p>If you find yourself in similar situation, here are a few tools that might help you.</p>
<h2 class="title is-4">What is JSON</h2>
<p>Read a bit about <a href="/json">JSON</a>.</p>
<h2 class="title is-4">Input</h2>
<p>Just a random JSON file:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/in.json">examples/data/in.json</a></strong></p>
<pre><code class="language-json">{&quot;prereqs&quot;:{&quot;runtime&quot;:{&quot;requires&quot;:{&quot;Code::Explain&quot;:&quot;0.02&quot;,&quot;App::Ack&quot;:&quot;0&quot;,&quot;Archive::Any&quot;:&quot;0&quot;,&quot;Acme::MetaSyntactic&quot;:&quot;1.012&quot;}}},&quot;name&quot;:&quot;Perl-Maven&quot;,&quot;author&quot;:[&quot;Gabor Szabo&quot;],&quot;abstract&quot;:&quot;Web application running the Perl Maven sites&quot;,&quot;no_index&quot;:{&quot;directory&quot;:[&quot;t&quot;,&quot;inc&quot;]},&quot;generated_by&quot;:&quot;ExtUtils::MakeMaker version 7.08, CPAN::Meta::Converter version 2.150005&quot;,&quot;meta-spec&quot;:{&quot;url&quot;:&quot;http://search.cpan.org/perldoc?CPAN::Meta::Spec&quot;,&quot;version&quot;:&quot;2&quot;}}
</code></pre>
<h2 class="title is-4">Expected Output</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/out.json">examples/data/out.json</a></strong></p>
<pre><code class="language-json">{
   &quot;no_index&quot; : {
      &quot;directory&quot; : [
         &quot;t&quot;,
         &quot;inc&quot;
      ]
   },
   &quot;name&quot; : &quot;Perl-Maven&quot;,
   &quot;author&quot; : [
      &quot;Gabor Szabo&quot;
   ],
   &quot;prereqs&quot; : {
      &quot;runtime&quot; : {
         &quot;requires&quot; : {
            &quot;App::Ack&quot; : &quot;0&quot;,
            &quot;Acme::MetaSyntactic&quot; : &quot;1.012&quot;,
            &quot;Archive::Any&quot; : &quot;0&quot;,
            &quot;Code::Explain&quot; : &quot;0.02&quot;
         }
      }
   },
   &quot;meta-spec&quot; : {
      &quot;version&quot; : &quot;2&quot;,
      &quot;url&quot; : &quot;http://search.cpan.org/perldoc?CPAN::Meta::Spec&quot;
   },
   &quot;abstract&quot; : &quot;Web application running the Perl Maven sites&quot;,
   &quot;generated_by&quot; : &quot;ExtUtils::MakeMaker version 7.08, CPAN::Meta::Converter version 2.150005&quot;
}

</code></pre>
<h2 class="title is-4">How to use these?</h2>
<p>Save the code in a file. Make the file executable:</p>
<pre><code>chmod +x filename
</code></pre>
<p>Run the file and redirect the JSON string into its Standard Input (STDIN).
If the JSON is in a file called &quot;in.json&quot;:</p>
<pre><code>./filename &lt; in.json
</code></pre>
<p>If it is received from an API then:</p>
<pre><code>curl http://... | ./filename
</code></pre>
<h2 class="title is-4">Perl 5</h2>
<p>If you have Perl 5 installed you might use the following code:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jq.pl">examples/jq.pl</a></strong></p>
<pre><code class="language-perl">#!/usr/bin/env perl
use JSON qw(decode_json);
print JSON-&gt;new-&gt;ascii-&gt;pretty-&gt;encode(decode_json join '', &lt;&gt;);

</code></pre>
<p>You could also use one of the other <a href="https://perlmaven.com/json">JSON implementations</a> in Perl
and you can also read my <a href="https://perlmaven.com/">Perl Tutorial</a>.</p>
<h2 class="title is-4">Rakudo Perl 6</h2>
<p>If you have <a href="http://rakudo.org/">Rakudo</a> <a href="https://perl6.org/">Perl 6</a> installed you might use the following code:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/perl6/jq.pl6">examples/perl6/jq.pl6</a></strong></p>
<pre><code class="language-txt">#!/usr/bin/env perl6
use JSON::Fast;
say to-json from-json($*IN.slurp), :pretty;

</code></pre>
<p>and then you can read more on the <a href="http://perl6maven.com/">Perl 6 Maven</a> site.</p>
<h2 class="title is-4">Python</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/python/jq.py">examples/python/jq.py</a></strong></p>
<pre><code class="language-python">#!/usr/bin/env python3
import json
import sys

print(json.dumps(json.loads(sys.stdin.read()), sort_keys=True, indent=4))

</code></pre>
<p>Please remember NOT to call this file json.py as that will not work.</p>
<p>An alternative Python one-liner suggested by <a href="https://www.linkedin.com/in/caleb-clark-0529ab2/">Caleb Clark</a> looks like this:</p>
<pre><code>python -m json.tool in.json
</code></pre>
<pre><code>curl ... | python -m json.tool
</code></pre>
<h2 class="title is-4">Ruby</h2>
<p>It is less likely that you have Ruby installed, but in any case here is the example in Ruby:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ruby/jq.rb">examples/ruby/jq.rb</a></strong></p>
<pre><code class="language-ruby">#!/usr/bin/env ruby
require 'json'

puts JSON.pretty_generate( JSON.parse( STDIN.read ) )


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>tmux a terminal multiplexer</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-09-16T07:30:01Z</updated>
    <pubDate>2018-09-16T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/tmux" />
    <id>https://code-maven.com/tmux</id>
    <content type="html"><![CDATA[<p><code>tmux</code> is great to keep a session on a remote computer alive even when you get disconnected because of a network failure
or because you need to move from one network access point to another.</p>
<p>The interactive process you ran on the remote machine keeps running.</p>
<p>The editor you opened on the remote machine stays open. Even if you are in the middle of a cut-and-paste,
when the connection is lost, you can still reconnect and you don't lose anything.</p>
<p>It can provide you with multiple buffers and split-windows to do more than one operation at the same time via a single
<code>ssh</code> connection.</p>
<p>Here is my modest configuration file and some command I use.</p>
<h2 class="title is-4">My Configuration file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/tmux.conf">examples/tmux.conf</a></strong></p>
<pre><code class="language-conf"># See http://www.hamvocke.com/blog/a-guide-to-customizing-your-tmux-conf/
# remap prefix from 'C-b' to 'C-a'
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
bind-key C-d detach-client

</code></pre>
<h2 class="title is-4">Start using</h2>
<ul>
<li>
<p>ssh to remote machine (use Putty if your desktop runs Windows)</p>
</li>
<li>
<p>Save the above file in <code>~/.tmux.conf</code></p>
</li>
<li>
<p>Install <code>tmux</code> if it is not installed yet. e.g. <code>sudo apt-get install tmux</code></p>
</li>
<li>
<p>Start tmux by running <code>tmux</code></p>
</li>
<li>
<p><code>Ctrl-a Ctrl-d</code> - detach from the tmux session (then you can close your ssh session with <code>Ctrl-d</code> keeping the tmux session alive</p>
</li>
<li>
<p>Next time when you connect to the server, run <code>tmux a</code> to attach to the existing session</p>
</li>
</ul>
<h2 class="title is-4">Buffers</h2>
<ul>
<li><code>Ctrl-a c</code>    Create another buffer</li>
<li><code>Ctrl-a 0</code>    Jump to buffer 0</li>
<li><code>Ctrl-a 1</code>    Jump to buffer 1</li>
<li>...</li>
<li><code>Ctrl-a ,</code>    Set the name of the buffer</li>
<li><code>Ctrl-a w</code>    Select buffer (list view)</li>
<li><code>Ctrl-a s</code>    Select buffer (tree view)</li>
<li><code>Ctrl-a f</code>    Select buffer search (ENTER on empty search to see full list)</li>
<li><code>Ctrl-d</code> or <code>exit</code> will close the buffer</li>
</ul>
<h2 class="title is-4">Windows</h2>
<p>Each buffer can be split up into windows.</p>
<ul>
<li>
<p><code>Ctrl-a &quot;</code> Split window vertically</p>
</li>
<li>
<p><code>Ctrl-a %</code> Split window horizontally</p>
</li>
<li>
<p><code>Ctrl-a (arrows)</code> switch to another window</p>
</li>
<li>
<p><code>Ctrl-a x</code> Close current window</p>
</li>
</ul>
<h2 class="title is-4">Ctrl-a</h2>
<ul>
<li>
<p><code>Ctrl-a Ctrl-a</code> is a <code>Ctrl-a</code> (jump to the beginning of the line)</p>
</li>
</ul>
<h2 class="title is-4">Help</h2>
<ul>
<li><code>Ctrl-a ?</code> list keyboard binding. The <code>bind-key</code> is Ctrl-b by default but we have configured it to be <code>Ctrl-a</code>.</li>
<li><code>ESC ESC</code> pressed twice will leave the help window</li>
<li><code>Ctrl-s</code> Search in help window</li>
</ul>
<h2 class="title is-4">Multiple sessions</h2>
<p>I never needed to run two <code>tmux</code> session on the same remote machine, but sometimes I forgot that I already have one running and instead of using <code>tmux a</code> to attache to an existing one I ran <code>tmux</code> that created a new one.</p>
<p>If I recognize it immediately I can just quit it (e.g. with <code>Ctrl-d</code>) and then get into my regular session.</p>
<p>If, however I start working and get disconnected, when I reconnect I might want to decide which one to connect to.</p>
<p>From the outside (after <code>ssh</code> connection was established, but before you attach to <code>tmux</code>, you can run:
<code>tmux list-sessions</code> that will, well, list the sessions.</p>
<pre><code>0: 1 windows (created Mon Jul 23 04:52:55 2018) [135x61]
3: 1 windows (created Mon Sep 17 04:27:08 2018) [135x61]
</code></pre>
<p>Then you can attach yourself to any of the existing session:</p>
<p><code>tmux a -t 0</code></p>
<h2 class="title is-4">Copy Paste in tmux</h2>
<p>See the article about <a href="http://www.rushiagr.com/blog/2016/06/16/everything-you-need-to-know-about-tmux-copy-pasting-ubuntu/">select-copy-paste in tmux</a>.</p>
<h2 class="title is-4">Comments</h2>
<p>One of my favorite features of tmux that you did not mention is the <code>copy-mode</code> that makes you interact with the terminal history as if you were in an editor. You can search backwards, select and copy, and then paste into the same window/pane or in a different window. Much faster than using a mouse.</p>
<hr />
<p>How do you do that?</p>
<hr />
<p>See e.g.: <a href="http://www.rushiagr.com/blog/2016/06/16/everything-you-need-to-know-about-tmux-copy-pasting-ubuntu/">http://www.rushiagr.com/blog/2016/06/16/everything-you-need-to-know-about-tmux-copy-pasting-ubuntu/</a></p>
<p>But basically you just enter it by «Hotkey»[ and you can then traverse the buffer in readonly mode, search it, mark it, and copy it into the tmux copy buffer. You can then paste from the tmux copy buffer (e.g. in another pane or window) with through «Hotkey»] .</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Create Digital Ocean Droplet using Terraform</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-09-15T14:00:01Z</updated>
    <pubDate>2018-09-15T14:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/digital-ocean-droplet-using-terraform" />
    <id>https://code-maven.com/digital-ocean-droplet-using-terraform</id>
    <content type="html"><![CDATA[<p><a href="https://www.terraform.io/">Terraform</a> makes it easy to manage various cloud resources. In this article we'll see how to use it to create (and destroy) Virtual Machines (aka. Droplets) on <a href="/digitalocean">Digital Ocean</a>.</p>
<h2 class="title is-4">Install Terraform</h2>
<p>Download <a href="https://www.terraform.io/">Terraform</a>. It is a single executable wrapped in a zip file.
Once you have downloaded it, use <code>unzip</code> to extract the executable and them move it to some place that
is in your <code>PATH</code> variable so you can easily run it.</p>
<p>For me this was:</p>
<pre>
$ unzip terraform_0.11.8_darwin_amd64.zip
$ sudo mv terraform /usr/local/bin/
</pre>
<p>Then I checked the version number, just to make sure I can run the program:</p>
<pre>
$ terraform --version
Terraform v0.11.8
</pre>
<h2 class="title is-4">Prepare the Terraform configuration file</h2>
<p>I've created a new directory called <code>do</code> (as in Digital Ocean) and in there a file called <code>do.tf</code>.
As far as I can see the name of the file does not matter. I added the following content:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/terraform/do/do1.tf">examples/terraform/do/do1.tf</a></strong></p>
<pre><code class="language-txt">provider &quot;digitalocean&quot; {
    token = &quot;...&quot;
}

resource &quot;digitalocean_droplet&quot; &quot;web&quot; {
    name  = &quot;tf-1&quot;
    image = &quot;ubuntu-18-04-x64&quot;
    region = &quot;nyc1&quot;
    size   = &quot;512mb&quot;
}

</code></pre>
<p>Instead of the 3 dots, the value of the token was the <a href="/digital-ocean-api">Digital Ocean API token</a> I've generated.</p>
<p>The &quot;name&quot; will be the name of the instance. It can be anything.
The possible values for &quot;image&quot;, &quot;region&quot;, and &quot;size&quot; can be fetched via the <a href="/digital-ocean-api">Digital Ocean API</a> using <code>curl</code>.</p>
<p>Once we have the file we need to initialize Terraform. It will download the plugin needed for Digital Ocean and
print some explanation:</p>
<pre><code>$ terraform init

Initializing provider plugins...
- Checking for available provider plugins on https://releases.hashicorp.com...
- Downloading plugin for provider &quot;digitalocean&quot; (0.1.3)...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = &quot;...&quot; constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.digitalocean: version = &quot;~&gt; 0.1&quot;

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running &quot;terraform plan&quot; to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
</code></pre>
<p>We can then go ahead an &quot;apply&quot; our configuration.</p>
<p>If you run the following, it will show the configuration information and then wait for your approval.</p>
<pre>
$ terraform apply
</pre>
<p>If you run this, it will just go ahead to do the work.</p>
<pre>
$ terraform apply -auto-approve
</pre>
<p>It will take some 30-40 seconds to create the Digital Ocean instance.
At the end Digital Ocean will send us an e-mail with a one-time password to log in to our new
Droplet as user &quot;root&quot;.</p>
<p>We can also see our new <a href="https://cloud.digitalocean.com/droplets">Droplet listed</a>.</p>
<p>Terraform will also create a file called <code>terraform.tfstate</code> that will store the state of
the configuration it created.</p>
<h2 class="title is-4">Remove the Droplet</h2>
<p>After using the droplet you might want to destroy it. You can do it by using the following command:</p>
<pre>
$ terraform destroy
</pre>
<p>or this, if you don't want to review the changes before you approve them.</p>
<pre>
$ terraform destroy -auto-approve
</pre>
<h2 class="title is-4">Create Digital Ocean Droplet with SSH key</h2>
<p>Getting the password of the new instance in an e-mail is both inconvenient and a bit unsecure.</p>
<p>You can <a href="/generate-and-deploy-ssh-private-public-keypair">create a pair of ssh keys</a>
if you don't have them yet, and you can upload them to Digital Ocean in the <a href="https://cloud.digitalocean.com/account/security">Security tab</a>. Each ssh key has an internal ID in Digital Ocean that you can only fetch via the
<a href="/digital-ocean-api">Digital Ocean API</a>. (Mine is a 5 digit number, nowedays I see people get 8-digit numbers.)
You can add that ID to the configuration file (actually you can add a list of IDs). The corresponding public keys will be added to the &quot;</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/terraform/do/do2.tf">examples/terraform/do/do2.tf</a></strong></p>
<pre><code class="language-txt">provider &quot;digitalocean&quot; {
    token = &quot;...&quot;
}

resource &quot;digitalocean_droplet&quot; &quot;web&quot; {
    name  = &quot;tf-1&quot;
    image = &quot;ubuntu-18-04-x64&quot;
    region = &quot;nyc1&quot;
    size   = &quot;512mb&quot;
    ssh_keys = [12345]
}

</code></pre>
<p>Create the Droplet:</p>
<pre>
$ terraform apply -auto-approve
</pre>
<p>Take the IP address from the <a href="https://cloud.digitalocean.com/droplets/">list of Droplets</a></p>
<pre>
ssh root@IP
</pre>
<p>or use the following flags to avoid the questions of ssh:</p>
<pre>
ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=n  root@IP
</pre>
<h2 class="title is-4">Get the IP of the newly created Droplet</h2>
<p>Getting the IP from the web interface still prohibits automation, so we need to make another little change to the Terraform configuration file. We declare an output attribute that will contain the IPv4 address of the new instance.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/terraform/do/do3.tf">examples/terraform/do/do3.tf</a></strong></p>
<pre><code class="language-txt">provider &quot;digitalocean&quot; {
    token = &quot;...&quot;
}

resource &quot;digitalocean_droplet&quot; &quot;web&quot; {
    name  = &quot;tf-1&quot;
    image = &quot;ubuntu-18-04-x64&quot;
    region = &quot;nyc1&quot;
    size   = &quot;512mb&quot;
    ssh_keys = [12345]
}

output &quot;ip&quot; {
    value = &quot;${digitalocean_droplet.web.ipv4_address}&quot;
}


</code></pre>
<p>If the Droplet already exists when you add these lines you will need to run</p>
<pre>
$  terraform refresh
</pre>
<p>That will already print the IP address, but you can also run</p>
<pre>
terraform output ip
</pre>
<p>That will only include the IP address. Much better to use in some automated script.</p>
<p>If you create a new Droplet with this configuration file then the IP will be included in the default output.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Digital Ocean API</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-09-14T12:10:01Z</updated>
    <pubDate>2018-09-14T12:10:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/digital-ocean-api" />
    <id>https://code-maven.com/digital-ocean-api</id>
    <content type="html"><![CDATA[<p><a href="/digitalocean">Digital Ocean</a> is a cloud provider with a nice and simple interface. I have been using it for many years for a number of servers. It also has a nice API that we can use to automate the administration of instances.</p>
<p>Let's see a few examples that you might need from the API.</p>
<h2 class="title is-4">Generate an API token</h2>
<p>In order to use it first you need to <a href="/digitalocean">sign up to Digital Ocean</a>. Without
an account there is no point using the API.</p>
<p>Then you need to create an <a href="https://cloud.digitalocean.com/account/api/tokens">API token</a> with read-write access.</p>
<p>Keep this code somewhere safe as people who have access to this token can manage your instances.</p>
<p>In order no to copy the token in every command I've created an environment variable:</p>
<pre>
export DO_API_TOKEN=....
</pre>
<h2 class="title is-4">Get the list of images</h2>
<pre><code>curl -X GET -H &quot;Content-Type: application/json&quot; -H &quot;Authorization: Bearer $DO_API_TOKEN&quot; &quot;https://api.digitalocean.com/v2/images?type=distribution&quot; &gt; images.json
</code></pre>
<p>Use <a href="https://stedolan.github.io/jq/">jq</a> to see the file in a readable way:</p>
<pre>
jq . images.json  | less
</pre>
<p>or to list the slugs only:</p>
<pre>
jq .images[].slug images.json
</pre>
<h2 class="title is-4">Get the list of Droplet sizes</h2>
<pre><code>curl -X GET -H &quot;Content-Type: application/json&quot; -H &quot;Authorization: Bearer $DO_TOKEN&quot; 'https://api.digitalocean.com/v2/sizes' &gt; sizes.json
</code></pre>
<h2 class="title is-4">Get list of SSH keys in your account</h2>
<pre>
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $DO_API_TOKEN" "https://api.digitalocean.com/v2/account/keys" > ssh.json
<pre>

And then the following to print the IDs and the names respectively.

<pre>
jq .ssh_keys[].id  ssh.json
jq .ssh_keys[].name  ssh.json
</pre>
<p>or both of them:</p>
<pre>
jq '.ssh_keys[] | "\(.id) \(.name)"'  ssh.json
</pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>aws - the command line tool for AWS Amazon Web Services</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-31T08:30:01Z</updated>
    <pubDate>2018-08-31T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/aws" />
    <id>https://code-maven.com/aws</id>
    <content type="html"><![CDATA[<p><a href="https://aws.amazon.com/cli/">aws</a> is a command line interface (CLI) to
the <a href="https://console.aws.amazon.com/">console</a> of <a href="https://aws.amazon.com/">AWS</a>.</p>
<h2 class="title is-4">List of regions</h2>
<pre><code>aws ec2 describe-regions
aws ec2 describe-regions --output text
aws ec2 describe-regions --query &quot;Regions[*].RegionName&quot; --output text
</code></pre>
<h2 class="title is-4">List of a given tag in a single region</h2>
<p>we use the eu-central-1 region here (which is Frankfurt) looking for the values of the &quot;role&quot; tag in every instance.</p>
<pre><code>aws ec2 describe-instances --region eu-central-1 --output text

aws ec2 describe-instances --region eu-central-1 --query &quot;Reservations[*].Instances[*].[Tags[?Key=='role'].Value]&quot; --output text

aws ec2 describe-instances --region eu-central-1 --filters &quot;Name=tag:Role,Values=Production&quot; --query &quot;Reservations[*].Instances[*].[ImageId,Tags[*]]&quot;
</code></pre>
<h2 class="title is-4">List of a given tag in every region</h2>
<pre><code>(for n in $(aws ec2 describe-regions --query &quot;Regions[*].RegionName&quot; --output text); do aws ec2
describe-instances --region $n --query &quot;Reservations[*].Instances[*].[Tags[?Key=='role'].Value]&quot; --output text; done) | sort | uniq
</code></pre>
<h2 class="title is-4">Add / remove tags</h2>
<pre><code>aws ec2 create-tags --region ap-south-1 --resources i-09c456eacadkahu --tags Key=owner,Value=foobar

aws ec2 delete-tags --region ap-south-1 --resources i-09c456eacadkahdkas --tags Key=Owner

aws ec2 describe-instances --region eu-central-1 --query &quot;Reservations[*].Instances[*].[Tags[?Key=='Name'].Value,InstanceId,State.Name]&quot;
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>gcloud - the command line tool for Google Cloud Platform</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-31T08:00:01Z</updated>
    <pubDate>2018-08-31T08:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/gcloud" />
    <id>https://code-maven.com/gcloud</id>
    <content type="html"><![CDATA[<p><a href="https://cloud.google.com/sdk/gcloud/">gcloud</a> is a command-line tool to access the services and the configurations of provided by the <a href="https://console.cloud.google.com/">console</a> of GCP.</p>
<h2 class="title is-4">Connect to Google instance</h2>
<pre><code>gcloud compute ssh NAME
</code></pre>
<p>List all the instances:</p>
<pre><code>gcloud compute instances list
</code></pre>
<p>Make sure the zone configured in your configuration is the same where the instance can be found or the command will not find the instance by name.</p>
<p>See more about <a href="https://cloud.google.com/compute/docs/instances/connecting-to-instance">connecting to instances</a>.</p>
<h2 class="title is-4">Access instance using ssh</h2>
<p>In the <a href="https://console.cloud.google.com/compute/metadata/sshKeys">SSH Keys</a>
of the <a href="https://console.cloud.google.com/compute/metadata">Metadata</a> of your &quot;Project&quot;
add the public key of your ssh keypair with your username as &quot;username&quot;.</p>
<p>After that every <b>new</b> instance will have this public key installed and so you can use plain old ssh (or Putty if you are using MS Windows) to connect to the machine.</p>
<p>If you are ready to take the risk you can also use the following flags to connect without saving the key of the server in the known_hosts file of your local computer.</p>
<pre><code>ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no  EXTERNAL_IP
</code></pre>
<h2 class="title is-4">Projects</h2>
<p>Projects are the biggest units of organization inside GCP. They allow you to configure access control to your engineers.</p>
<p>This is a collection of a few useful commands.</p>
<h2 class="title is-4">Projects and Compute Instances</h2>
<p>List all the Compute Instances (virtual machines) in the currently configured project and
return the results as JSON.</p>
<pre><code>gcloud compute instances list --format='json'
</code></pre>
<p>List all the Compute Instances in the project supplied on the command line. For this you don't need to configure each project, you just need to be logged in and you need to have access rights to the specific project.</p>
<pre><code>gcloud compute instances list --project PROJECT --format=json
</code></pre>
<h3 class="title is-5">Stop instance</h3>
<p>It will stop the instance (move to TERMINATED state) but won't delete it.</p>
<pre><code>gcloud compute instances stop --project PROJECT --zone ZONE NAME --format json
</code></pre>
<h3 class="title is-5">Start instance</h3>
<p>It will start the instance (move to RUNNING state).</p>
<pre><code>gcloud compute instances start --project PROJECT --zone ZONE NAME --format json
</code></pre>
<h2 class="title is-4">Get Information about an instance</h2>
<pre><code>gcloud compute instances describe NAME --zone ZONE --project PROJECT
gcloud compute instances describe NAME --zone ZONE --project PROJECT --format json
</code></pre>
<h2 class="title is-4">List all the values of a label</h2>
<p>Each compute instance can have labels on it that can help understanding why do we have a machine and it can be used in billing to see what do spend our money on - by category.</p>
<p>Just to have a look we fetch all the labels called &quot;role&quot; together with the name of each instance from the given project.</p>
<pre><code>gcloud compute instances list --format='csv(labels.role,name)' --project development-42
</code></pre>
<p>In this example we would like to know what values does the label &quot;role&quot; have in the project called &quot;development-42&quot;. First we list the values from all the instances in CSV format. This will contain the list but it will also contain the name of the field (&quot;role&quot; in our case) as the first line of the result. So we filter it out using the <code>tail</code> command. Then we <code>sort</code> the values and run through <code>uniq</code>. That gives us each name once.</p>
<pre><code>gcloud compute instances list --format='csv(labels.role)' --project development-42 | tail +2 | sort | uniq
</code></pre>
<h2 class="title is-4">List all the local configurations</h2>
<p>Instead of supplying all the values on the command line for every command (e.g. name of the project, zone, etc.) we can have local configurations with with defaults. Each configuration has a name and a bunch of key-value pairs.</p>
<p>The command</p>
<pre><code>gcloud init
</code></pre>
<p>can be used to create new configurations or to change existing ones.</p>
<p>BTW the configuration files are stored in <code>~/.config/gcloud/configurations/</code></p>
<pre><code>gcloud config configurations list --format json
</code></pre>
<p>You can switch between local configurations using:</p>
<pre><code>gcloud config configurations activate
</code></pre>
<pre><code>gsutil ls
</code></pre>
<h2 class="title is-4">Labels</h2>
<p>List all the instances with stop_at label:</p>
<pre><code>gcloud compute instances list --filter=&quot;labels.stop_at:*&quot; --format='csv(labels.stop_at,name)' --project NAME-OF-PROJECT
</code></pre>
<p>All the instances with stop_at label with value 'never':</p>
<pre><code>gcloud compute instances list --filter=&quot;labels.stop_at:never&quot; --format='csv(labels.stop_at,name)' --project NAME-OF-PROJECT
</code></pre>
<p>List all the instances without a stop_at label:</p>
<pre><code>gcloud compute instances list --filter=&quot;NOT labels.stop_at:*&quot; --format='csv(name)' --project NAME-OF-PROJECT
</code></pre>
<p>List all the instances without a stop_at label (without CSV header row):</p>
<pre><code>gcloud compute instances list --filter=&quot;NOT labels.stop_at:*&quot; --format='csv[no-heading](name)' --project NAME-OF-PROJECT
</code></pre>
<h2 class="title is-4">Set default value in case of missing label</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/perl/gcloud_set_default_label.pl">examples/perl/gcloud_set_default_label.pl</a></strong></p>
<pre><code class="language-perl">use strict;
use warnings;

# Setting default label
# Set the label $label to $value on each instance (in $project) that does not have that label.

my $project = 'name-of-project';
my $label   = 'stop_at';
my $value   = 'never';

my @lines = qx{gcloud compute instances list --filter=&quot;NOT labels.${label}:*&quot; --format='csv[no-heading](zone,name)' --project $project};
for my $line (@lines) {
   chomp $line;
   my ($zone, $name) = split /,/, $line;
   #print &quot;$zone\n   $name\n&quot;;
   my $cmd = qq{gcloud compute instances add-labels $name --labels=&quot;${label}=${value}&quot; --zone $zone --project $project};
   #print &quot;$cmd\n&quot;;
   system $cmd;
}

</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/python/list_gcloud_buckets.py">examples/python/list_gcloud_buckets.py</a></strong></p>
<pre><code class="language-python">from google.cloud import storage

# pip install --upgrade google-cloud-storage

storage_client = storage.Client()
for b in storage_client.list_buckets():
   print(b.name)
   print(b.labels)

</code></pre>
<h2 class="title is-4">Images</h2>
<p>List all the available images</p>
<pre><code>gcloud compute images list
</code></pre>
<p>List all the images created by the user (non-standard images) and format the output as JSON.</p>
<pre><code>gcloud compute images list --no-standard-images --format=json
</code></pre>
<p>List the names of all the non-standard images.</p>
<pre><code>gcloud compute images list --no-standard-images --format='csv[no-heading](name)'
</code></pre>
<h2 class="title is-4">Create an instance using a public image</h2>
<p>Creating an instance called &quot;demo&quot;.</p>
<pre><code>gcloud compute instances create demo --image-project ubuntu-os-cloud --image-family ubuntu-1804-lts
</code></pre>
<h2 class="title is-4">Create an instance using a private image</h2>
<pre><code>gcloud compute instances create demo --image-project NAME-OF-YOUR-PROJECT --image-family ubuntu-1804-lts
</code></pre>
<h2 class="title is-4">Delete an instance</h2>
<pre><code>gcloud compute instances delete demo --project NAME-OF-YOUR-PROJECT  --zone us-central1-c --quiet
</code></pre>
<p>Without the <code>--quiet</code> flag it will ask for confirmation.</p>
<h2 class="title is-4">Getting started with IAM and service accounts</h2>
<p>Install <code>gcloud</code> but do not configure it and especially do not authenticate.</p>
<pre><code>gcloud config configurations list

NAME     IS_ACTIVE  ACCOUNT  PROJECT  DEFAULT_ZONE  DEFAULT_REGION
default  True
</code></pre>
<p>Visit <a href="https://console.cloud.google.com/iam-admin/serviceaccounts/create">IAM &amp; admin / Service accounts</a>.
Click on Create service account. Type in a name (e.g. demo-account)</p>
<p>Select a Role (Compute Viewer) and click on Continue.</p>
<p>click on &quot;Create a key&quot; , select JSON and click on Create.
It will offer you to download a JSON file.</p>
<p>Make sure you keep this file safe. Both because you won't be able to re-create it (you'll need to create a new key if
you lose this) but also because whoever has this file will automatically have access to your Gcloud account with all the
rights you'll assign to this service account.</p>
<pre><code>gcloud auth activate-service-account --key-file=google.json
</code></pre>
<pre><code>export GOOGLE_APPLICATION_CREDENTIALS=/home/foobar/google.json
</code></pre>
<p><a href="/gcloud-shutdown-script">Google Cloud shutdown script</a> triggered by manual or automatic shutdown (of
preemptible instances.)</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins CLI: create node</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-22T08:30:01Z</updated>
    <pubDate>2018-08-22T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-cli-create-node" />
    <id>https://code-maven.com/jenkins-cli-create-node</id>
    <content type="html"><![CDATA[<p>In some situation you might need to add nodes (aka. agents) programmatically to a Jenkins setup.
This is a shell script to register the new node based on the <a href="https://gist.github.com/ChristopherDavenport/bc5ba7a33d5dd5fc975da81c4a270a90">gist of Christopher Davenport</a>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/create-jenkins-node.sh">examples/jenkins/create-jenkins-node.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash

JENKINS_URL=$1
NODE_NAME=$2
NODE_HOME='/home/build/jenkins-node'
EXECUTORS=1
SSH_PORT=22
CRED_ID=$3
LABELS=build
USERID=${USER}

cat &lt;&lt;EOF | java -jar ~/bin/jenkins-cli.jar -s $1 create-node $2
&lt;slave&gt;
  &lt;name&gt;${NODE_NAME}&lt;/name&gt;
  &lt;description&gt;&lt;/description&gt;
  &lt;remoteFS&gt;${NODE_HOME}&lt;/remoteFS&gt;
  &lt;numExecutors&gt;${EXECUTORS}&lt;/numExecutors&gt;
  &lt;mode&gt;NORMAL&lt;/mode&gt;
  &lt;retentionStrategy class=&quot;hudson.slaves.RetentionStrategy$Always&quot;/&gt;
  &lt;launcher class=&quot;hudson.plugins.sshslaves.SSHLauncher&quot; plugin=&quot;ssh-slaves@1.5&quot;&gt;
    &lt;host&gt;${NODE_NAME}&lt;/host&gt;
    &lt;port&gt;${SSH_PORT}&lt;/port&gt;
    &lt;credentialsId&gt;${CRED_ID}&lt;/credentialsId&gt;
  &lt;/launcher&gt;
  &lt;label&gt;${LABELS}&lt;/label&gt;
  &lt;nodeProperties/&gt;
  &lt;userId&gt;${USERID}&lt;/userId&gt;
&lt;/slave&gt;
EOF

</code></pre>
<p>Notes:</p>
<ul>
<li>&quot;Agent&quot; and &quot;node&quot; is often used interchangably and in the old days they were called &quot;slaves&quot; so you will still see that word used in some documentation and in the code.</li>
<li>The origrinal name of the Jenkins project was Hudson and that too still appears in a lot of the code.</li>
<li>remove the -remoting flag</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline: Add some text to the job using manager.addShortText</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-21T22:30:01Z</updated>
    <pubDate>2018-08-21T22:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-short-text" />
    <id>https://code-maven.com/jenkins-pipeline-short-text</id>
    <content type="html"><![CDATA[<p>This will add text to the specific job on the summary page of the classic UI.
The text does not show up on the BlueOcean UI.</p>
<pre><code class="language-groovy">script {
   manager.addShortText(&quot;Some text&quot;)
   manager.addShortText(&quot;\ntext&quot;)

   manager.addShortText(&quot;same line&quot;, &quot;black&quot;, &quot;lightgreen&quot;, &quot;0px&quot;, &quot;white&quot;)
   manager.addShortText(text, foreground_color, background_color, border_width, border_color)
}
</code></pre>
<p>For the manager object to exists we need to install the <a href="https://wiki.jenkins.io/display/JENKINS/Groovy+Postbuild+Plugin">Groovy Postbuild Plugin</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/manager_addShortText.Jenkinsfile">examples/jenkins/manager_addShortText.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
    agent {
        label 'master'
    }
    parameters {
        string(name: 'text',              defaultValue: 'Some Text',  description: 'Text')
        string(name: 'foreground_color',  defaultValue: 'black',      description: 'Foreground')
        string(name: 'background_color',  defaultValue: 'lightgreen', description: 'Background')
        string(name: 'border_size',       defaultValue: '5px',        description: 'Border size')
        string(name: 'border_color',      defaultValue: 'yellow',     description: 'Border color')
    }

    stages {
        stage('Check disk usage') {
            steps {
                script {
                    manager.addShortText(
                        params.text,
                        params.foreground_color,
                        params.background_color,
                        params.border_size,
                        params.border_color
                    )
                    currentBuild.description = &quot;Foreground: ${foreground_color}&lt;br&gt;&quot;
                    currentBuild.description += &quot;Background: ${background_color}&lt;br&gt;&quot;
                    currentBuild.description += &quot;Border size: ${params.border_size}&lt;br&gt;&quot;
                    currentBuild.description += &quot;Border color: ${params.border_color}&quot;

                }
            }
        }
    }
}


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline: Send e-mail notifications</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-21T20:30:01Z</updated>
    <pubDate>2018-08-21T20:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-send-email-notifications" />
    <id>https://code-maven.com/jenkins-send-email-notifications</id>
    <content type="html"><![CDATA[<p>Configuring Jenkins to send e-mail will be covered later. For now let's see a few snippets of pipeline code that will send the e-mail.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/emailtext.gvy">examples/jenkins/emailtext.gvy</a></strong></p>
<pre><code class="language-groovy">emailext (
    subject: &quot;Job '${env.JOB_NAME} ${env.BUILD_NUMBER}'&quot;,
    body: &quot;&quot;&quot;&lt;p&gt;Check console output at &lt;a href=&quot;${env.BUILD_URL}&quot;&gt;${env.JOB_NAME}&lt;/a&gt;&lt;/p&gt;&quot;&quot;&quot;,
    to: &quot;report@code-maven.com&quot;,
    from: &quot;jenkins@code-maven.com&quot;
)


</code></pre>
<h2 class="title is-4">BuildUser plugin and e-mail</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/notify.gvy">examples/jenkins/notify.gvy</a></strong></p>
<pre><code class="language-groovy">def notify(status) {
   wrap([$class: 'BuildUser']) {
       emailext (
       subject: &quot;${status}: Job ${env.JOB_NAME} ([${env.BUILD_NUMBER})&quot;,
       body: &quot;&quot;&quot;
       Check console output at &lt;a href=&quot;${env.BUILD_URL}&quot;&gt;${env.JOB_NAME} (${env.BUILD_NUMBER})&lt;/a&gt;&quot;&quot;&quot;,
       to: &quot;${BUILD_USER_EMAIL}&quot;,
       from: 'jenkins@company.com')
   }
}


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline: running external programs with sh or bat</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-20T21:30:01Z</updated>
    <pubDate>2018-08-20T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-running-external-programs" />
    <id>https://code-maven.com/jenkins-pipeline-running-external-programs</id>
    <content type="html"><![CDATA[<p>From within a Jenkins pipeline you can any external program. If your pipeline will run on Unix/Linux you need to use the <code>sh</code> command.
If your pipeline will run on MS Windows you'll need to use the <code>bat</code> command.</p>
<p>Naturally the commands you pass to these will also need to make sense on the specific operating system.</p>
<p>In this example first we use the internal <code>echo</code> command of Jenkins.</p>
<p>Then we call <code>sh</code> and run the <code>echo</code> of our Unix shell.</p>
<p>Then we execute the <code>hostname</code> command and finally the <code>uptime</code> command.</p>
<pre><code class="language-groovy">pipeline {
    agent { label 'master' }
    stages {
        stage('build') {
            steps {
                echo &quot;Hello World!&quot;
                sh &quot;echo Hello from the shell&quot;
                sh &quot;hostname&quot;
                sh &quot;uptime&quot;
            }
        }
    }
}
</code></pre>
<p>The result looks like this:</p>
<pre><code>Started by user Gabor Szabo
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/simple-pipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (build)
[Pipeline] echo
Hello World!
[Pipeline] sh
[simple-pipeline] Running shell script
+ echo Hello from the shell
Hello from the shell
[Pipeline] sh
[simple-pipeline] Running shell script
+ hostname
s17
[Pipeline] sh
[simple-pipeline] Running shell script
+ uptime
 17:15:35 up 3 days,  1:59,  0 users,  load average: 0.00, 0.00, 0.00
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
</code></pre>
<h2 class="title is-4">MS Windows</h2>
<p>A few examples in Windows:</p>
<p>Show the name of the computer (a bit like hostname on Unix):</p>
<pre><code>bat 'wmic computersystem get name'
</code></pre>
<p>Print out the content of the PATH environment variable as seen by Windows.</p>
<pre><code>bat 'echo %PATH%'
</code></pre>
<p>Of course we could have printed the PATH environment variable without invoking an external call:</p>
<pre><code>echo env.PATH
</code></pre>
<h2 class="title is-4">Print out all the environment variables seen by Windows.</h2>
<pre><code>echo bat(returnStdout: true, script: 'set')
</code></pre>
<h2 class="title is-4">Get the disk size of a local disk</h2>
<pre><code>script {
    def disk_size = sh(script: &quot;df / --output=avail | tail -1&quot;, returnStdout: true).trim() as Integer
    println(&quot;disk_size = ${disk_size}&quot;)
}
</code></pre>
<p>Full examples:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/list_disk_size.Jenkinsfile">examples/jenkins/list_disk_size.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
    agent { label 'master' }
    stages {
        stage('build') {
            steps {
                script {
                    def disk_size = sh(script: &quot;df / --output=avail | tail -1&quot;, returnStdout: true).trim() as Integer
                    println(&quot;disk_size = ${disk_size}&quot;)
                }
            }
        }
    }
}




</code></pre>
<h2 class="title is-4">Get the disk size of a remote disk</h2>
<pre><code>script {
    def disk_size = sh(script: &quot;ssh remote-server df / --output=avail | tail -1&quot;, returnStdout: true).trim() as Integer
    println(&quot;disk_size = ${disk_size}&quot;)
}
</code></pre>
<h2 class="title is-4">Comments</h2>
<p>I have a pipeline with tests running with maven, how can I get the name of each test run out of the pipeline output?</p>
<hr />
<p>I have a question...I am implementing a pipeline and I m using k8s plugin an run the pipeline in pods and created my own docker container with nessery libraries. My scripts is based on groovy scripts and I am heavly use 'sh' to execute shell commands due to my IaC..in your examples you have used many sh block under one single step.. even though you have the ability to run all things in a one sh block (that a because of You may have used that kind approach to explain the sh Ior you don't care and you use as much as you like..let's assume that you don't care and use many..to understand my concern ). My practice is to handle the control flow with the groovy as much as possible and things I need to do with the shell I used sh blocks inside those groovy control blocks (if else). Since I m prefer to use groovy due to the flexibility. If someone is arguing that when you has the ability to control the flow in same sh block by providing the groovy value with the interpolation in to the shell block as the condition values.. why do you do that in two sh block while maintaining the control flow with groovy. ...for this question my point is when I am having a advanced tool like groovy why don't I consider that as the primary tool and I am using groovy to maintain the control flow and shell is a very low level option and the flexibility is low than groovy and I am arguing that then why don't you write shell script for your entire pipeline.. ..these are two perceptions on sh.. I would like to know you perception on these two aspects... actually what kind of best practice we should follow..</p>
<hr />
<p>In this example I was indeed only showing that you can use &quot;sh&quot; or &quot;bat&quot; to execute external commands.</p>
<p>The external commands can be written in any language, not just shell.</p>
<p>My recommendation is to write as much as you can in some high-level languages (e.g. Perl, Python, Ruby) and make it independent from the fact that it is being executed by Jenkins.</p>
<p>Write the part in Groovy only if must interact with the steps of the Jenklins pipeline.</p>
<p>It is usually easier to write in those languages than in Shell or in Groovy and that will make your code more flexible so people might execute them on their own system without using Jenkins.</p>
<hr />
<p>what if i have to migrate that shell script into Jenkins itself. Is there a way to just use that shell script in Jenkins?</p>
<hr />
<p>What do you mean &quot;into Jenkins itself&quot;?</p>
<hr />
<p>So i am using an external shell script which is located on my Jenkins server. I have to give up my server and migrate Jenkis to a POD on openshift. Is there a way to import that file in the Jenkis itself and use it in the jobs using a plugin or something?</p>
<hr />
<p>You could have the shell script embedded in the Jenkins file and then save it and run it when needed, but it is a nasty hack. I would recommend that both your Jenkinsfile and your shell script were in some version control system that is then cloned when Jenkins runs the job.</p>
<hr />
<p>would it be possible to call a batch file and still continue with other commands with the same 'bat' block...? Something like bat ''' mybatchfile.bat
pip install mypackage '''.</p>
<p>The use case would be to activate a created python virtual environment and to continue installing packages within that virtual environment.
In this case, if I want to activate a python virtual environment, I am supposed to call a batch file (activate.bat) and then I should continue with the 'pip install my-python-package'</p>
<hr />
<p>I think what you mean is running the external process in the background. On windows you'd use START for this. On Linux/OSX you would put &amp; at the end of the command.</p>
<hr />
<p>how can i use a curl command in jenkins pipeline where the node is windows?</p>
<hr />
<p>How can you use curl on Windows without Jenkins?</p>
<hr />
<p>Hi, I want to download the file using wget and check if the file is available using shell script in pipeline. How do i do that?
Im trying something like below but it is failing syntactically. Im new to groovy.</p>
<p>sh &quot;&quot;&quot;
status=$(curl --head --silent ${REPO_URL} | head -n 1) ---Failing in this line
if echo ${status} | grep -q 404
echo 'No previous versions for the components exists'
else
gunzip ${FILE_NAME}.tar.gz
tar -xvf ${FILE_NAME}.tar
def props = readProperties file:'component.properties'
PREVIOUS_DATALOAD_VERSION = props['PREVIOUS_DATALOAD_VERSION']
PREVIOUS_SERVER_VERSION = props['PREVIOUS_SERVER_VERSION']
fi
&quot;&quot;&quot;</p>
<hr />
<p>why are you mixing groovy code in shell script? Line:8</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins Pipeline - Hello World</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-20T20:30:01Z</updated>
    <pubDate>2018-08-20T20:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins-pipeline-hello-world" />
    <id>https://code-maven.com/jenkins-pipeline-hello-world</id>
    <content type="html"><![CDATA[<p>Let's create our first Jenkins Pipeline. Without any actual software, just printing &quot;Hello World&quot;.</p>
<p>Aftr logging in to Jenkins click on the &quot;New Item&quot; menu option:</p>
<img src="/img/jenkins-menu.png" alt="Jenkins Menu" />
<p>Type in the name of the Jenkins Pipeline (simple-pipeline in our case).</p>
<p>Click on the &quot;Pipeline&quot;.</p>
<p>Then press the &quot;OK&quot; button. (It will be disabled until you select a project-type)</p>
<img src="/img/jenkins-new-item.png" alt="Jenkins New Item" />
<p>It will take you directly to the &quot;Configuration&quot; page of the project that looks like this:</p>
<img src="/img/jenkins-pipeline-config.png" alt="Jenkins Pipeline config" />
<p>Scroll down to the section called &quot;Pipeline&quot;, paste the following code:</p>
<pre><code>pipeline {
    agent { label 'master' }
    stages {
        stage('build') {
            steps {
                echo &quot;Hello World!&quot;
            }
        }
    }
}
</code></pre>
<p>It will look like this:</p>
<img src="/img/jenkins-hello-world-pipeline.png" alt="Jenkins Pipeline" />
<p>Click on &quot;Save&quot;.</p>
<p>It will take to the menu of the specific project:</p>
<img src="/img/jenkins-pipeline-menu.png" alt="Jenkins Pipeline menu" />
<p>Click on the &quot;Build Now&quot; button.</p>
<p>It will start running the pipeline and within a few seconds you'll see an indicator of your first job
being successful (blue dot on the left hand side).</p>
<img src="/img/jenkins-pipeline-first-build.png" alt="Jenkins First job" />
<p>If you click on that blue dot on the left hand side it will take you to the &quot;Console Output&quot; that looks like this:</p>
<img src="/img/jenkins-hello-world-console.png" alt="Jenkins Console output" />
<h2 class="title is-4">What is in the first pipeline?</h2>
<p>You can see the basic structure of the pipelines.</p>
<p>Everything is wrapped in a block called &quot;pipeline&quot;. Inside we need to declare on which agents can the pipeline run.
In this example we requested it to run on the Jenkins &quot;master&quot;. Usually only very small setups rely on the &quot;master&quot;.
Once your project starts to grow you'll start setting up agents Later we'll see how to set up agents and how to tell
the different parts of the pipeline to run on different agents. (Originally these were called &quot;slaves&quot;. While they are
being renamed to &quot;agents&quot; you'll still find a lot of examples using the word &quot;slave&quot;. In some places thet are also called
&quot;nodes&quot;. In the end they refer to the same things. Maybe the right way to think about them is that nodes = master + agents,
but then in the pipeline we also call &quot;master&quot; to be an agent. Go figure.</p>
<p>Inside the <code>pipeline</code> there can be <code>stages</code> (We have one). Inside the <code>stages</code> The can be several <code>stage</code>
element. Inside each <code>stage</code> there must be <code>steps</code>. The steps themselves are Jenkins commands.</p>
<p><code>echo</code> will just print something on the console. It can be useful for displaying values as the pipeline makes progress.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ansible playbook: print output of command</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-16T15:30:01Z</updated>
    <pubDate>2018-08-16T15:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ansible-playbook-print-output-of-command" />
    <id>https://code-maven.com/ansible-playbook-print-output-of-command</id>
    <content type="html"><![CDATA[<p>An old example that might or might not work.</p>
<h2 class="title is-4">Setup</h2>
<p>For this example we are using an inventory file that only lists localhost:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/localhost.cfg">examples/ansible/localhost.cfg</a></strong></p>
<pre><code class="language-cfg">[localhost]
127.0.0.1

</code></pre>
<p>Unlike the sime <a href="">debug printing</a> example, this will require ssh access to the target machine, which is the same machibe we are working on. You still need to make sure you can <code>ssh</code> to <code>localost</code> without any password.</p>
<p>`</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/output_playbook.yml">examples/ansible/output_playbook.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: localhost
  gather_facts: False
  become: False
  tasks:
    - debug:
        msg: &quot;Debug statement&quot;

    - shell: /usr/bin/uptime
      register: result

    - debug:
        var: result


 #       verbosity: 2



#If vebosity 2 is set then the results will be only printed if -vv is supplied

# echo results of local commands
#ansible-playbook -vv try.yml

</code></pre>
<pre><code>$  ansible-playbook -i examples/ansible/localhost.cfg examples/ansible/output_playbook.yml
</code></pre>
<pre><code>PLAY [localhost] ************************************************************************************

TASK [debug] ****************************************************************************************
ok: [127.0.0.1] =&gt; {
    &quot;msg&quot;: &quot;Debug statement&quot;
}

TASK [shell] ****************************************************************************************
changed: [127.0.0.1]

TASK [debug] ****************************************************************************************
ok: [127.0.0.1] =&gt; {
    &quot;result&quot;: {
        &quot;changed&quot;: true,
        &quot;cmd&quot;: &quot;/usr/bin/uptime&quot;,
        &quot;delta&quot;: &quot;0:00:00.011499&quot;,
        &quot;end&quot;: &quot;2018-08-10 13:52:34.651618&quot;,
        &quot;failed&quot;: false,
        &quot;rc&quot;: 0,
        &quot;start&quot;: &quot;2018-08-10 13:52:34.640119&quot;,
        &quot;stderr&quot;: &quot;&quot;,
        &quot;stderr_lines&quot;: [],
        &quot;stdout&quot;: &quot;13:52  up 13 days,  6:01, 4 users, load averages: 1.42 1.88 1.91&quot;,
        &quot;stdout_lines&quot;: [
            &quot;13:52  up 13 days,  6:01, 4 users, load averages: 1.42 1.88 1.91&quot;
        ]
    }
}

PLAY RECAP ******************************************************************************************
127.0.0.1                  : ok=3    changed=1    unreachable=0    failed=0

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Enforce fast forward as merge strategy in Git</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-15T22:30:01Z</updated>
    <pubDate>2018-08-15T22:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/enforce-fast-forward-as-merge-strategy" />
    <id>https://code-maven.com/enforce-fast-forward-as-merge-strategy</id>
    <content type="html"><![CDATA[<p>Some people like to see lots of branches and the way they are merged together in their git history. Others like to have nice straight line.</p>
<p>Some companies have a development workflow in which the only way to add to the &quot;master&quot; branch is to send a pull-request, get it reviewed, approved and then merged into &quot;master&quot;. For them it might be useful to enforce that merging into master can be done only with a fast-forward merge.</p>
<p>There are several ways to enforce it or at least to gently nudge you in the chosen direction.</p>
<p><a href="https://twitter.com/ajbonner">Aaron Bonner</a> wanted to
<a href="https://aaronbonner.io/post/78444674979/only-allow-git-fast-forward-merges-to-avoid-ugly">Only Allow Git Fast-forward Merges to Avoid Ugly Merge Commits</a> and he suggested execute</p>
<pre><code>git config --global merge.ff only
</code></pre>
<p>That will add an entry to your <code>~/.gitconfig</code> file:</p>
<pre><code>[merge]
    ff = only
</code></pre>
<p>and it will require that you only merge branches that can fast-forward. That basically forces you to either rebase before merging, or turn off this configuration, or to force your way through using</p>
<pre><code>git merge --no-ff
</code></pre>
<p>Alternatively you can execute the following command <b>while inside a git workspace</b></p>
<pre><code>git config --local merge.ff only
</code></pre>
<p>This will add the same entry to the <code>.git/config</code> of the current project.
This way the enforcing only happens in specific projects.</p>
<p>Of course all this is on the client side and not on the server.</p>
<h2 class="title is-4">Enforce fast-forward to a single branch only</h2>
<p>Adding the following to the <code>.git/config</code> file of your project will enforce the &quot;merge only with fast-forward&quot; rule on the &quot;master&quot; branch only.</p>
<pre><code>[branch &quot;master&quot;]
    mergeOptions = --ff-only
</code></pre>
<p>This is also describe by <a href="https://twitter.com/mvuksano">Marko Vuksanovic</a>
in <a href="https://medium.com/@mvuksano/git-tips-use-only-fast-forward-merges-with-rebase-c80c9d260a83">Git tips: Use only fast-forward merges (with rebase)</a></p>
<h2 class="title is-4">Team Foundation Server</h2>
<p>TFS allows the admins to set
<a href="https://docs.microsoft.com/en-us/vsts/repos/git/branch-policies?view=vst">branch policies</a>. Among the several features one can <b>Enforce a merge strategy</b>, but as far as I can see only <b>No fast-forward merge</b> and <b>Squash merge</b> are available.</p>
<h2 class="title is-4">Atlassian BitBucket</h2>
<p>The documentation seems to indicated that the admin of a project can set the
<a href="https://confluence.atlassian.com/bitbucketserver/pull-request-merge-strategies-844499235.html">available merge strategies</a>, but all I managed to do was to set the default merge strategy. It indeed stopped me from accepting a pull-request that could not be merged using fast-forward. However I was still able to pick a different merge strategy when I was about to accept the pull-request.</p>
<p>Maybe I have not looked close enough.</p>
<h2 class="title is-4">GitHub</h2>
<p>As far as I know GitHub does not support requiring fast-forward when you accept and <a href="https://help.github.com/articles/merging-a-pull-request/">merge a pull-request</a>.</p>
<h2 class="title is-4">GitLab</h2>
<p>As I can see one can set <a href="https://docs.gitlab.com/ee/user/project/merge_requests/fast_forward_merge.html">fast forward merge</a> as the only acceptable merge strategy.</p>
<h2 class="title is-4">Comments</h2>
<p>On Bitbucket Server you can install my &quot;Control Freak&quot; plugin to enforce a fast-forward policy when merging into certain branches (e.g., master).</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ansible playbook: print debugging statement</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-10T13:30:01Z</updated>
    <pubDate>2018-08-10T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ansible-playbook-print-debugging-statement" />
    <id>https://code-maven.com/ansible-playbook-print-debugging-statement</id>
    <content type="html"><![CDATA[<p>A simple Ansible playbook example showing how to print debugging statements.</p>
<p>Create an Ansible Playbook file which is just a <a href="/yaml">YAML</a> file:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/debug_playbook.yml">examples/ansible/debug_playbook.yml</a></strong></p>
<pre><code class="language-yaml">---
- name: Demo
  hosts: localhost
  gather_facts: False
  become: False

  tasks:
    - debug:
        msg: Just echo something

</code></pre>
<p>Run it as</p>
<pre><code>$  ansible-playbook examples/ansible/debug_playbook.yml
</code></pre>
<p>The result will look like this:</p>
<pre><code> [WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

 [WARNING]: No inventory was parsed, only implicit localhost is available

 [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit
localhost does not match 'all'


PLAY [Demo] *****************************************************************************************

TASK [debug] ****************************************************************************************
ok: [localhost] =&gt; {
    &quot;msg&quot;: &quot;Just echo something&quot;
}

PLAY RECAP ******************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0
</code></pre>
<p>We run this on the local machine called <code>localhost</code>. It generates a few warnings, but we don't need an extra machine to play with.
If you'd like to eliminate these warnings you can create an inventory file that onlys lists localhost:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/localhost.cfg">examples/ansible/localhost.cfg</a></strong></p>
<pre><code class="language-cfg">[localhost]
127.0.0.1

</code></pre>
<p>And supply it on the command line:</p>
<pre><code>$  ansible-playbook -i examples/ansible/localhost.cfg  examples/ansible/debug_playbook.yml
</code></pre>
<h2 class="title is-4">Incorrect indentation: Ignoring invalid attribute: msg</h2>
<p>One thing you need to be aware is that YAML derives its structure from the indentations and thus you need to make sure the <code>msg</code> tag is indented properly. If the indentation is incorrect as in the next example:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/debug_playbook_bad.yml">examples/ansible/debug_playbook_bad.yml</a></strong></p>
<pre><code class="language-yaml">---
- name: Demo
  hosts: localhost
  gather_facts: False
  become: False

  tasks:
    - debug:
      msg: Just echo something

</code></pre>
<p>Then running it:</p>
<pre><code>$  ansible-playbook -i examples/ansible/localhost.cfg  examples/ansible/debug_playbook_bad.yml
</code></pre>
<p>will yield the following output including the warning:</p>
<pre><code> [WARNING]: Ignoring invalid attribute: msg


PLAY [Demo] *****************************************************************************************

TASK [debug] ****************************************************************************************
ok: [127.0.0.1] =&gt; {
    &quot;msg&quot;: &quot;Hello world!&quot;
}

PLAY RECAP ******************************************************************************************
127.0.0.1                  : ok=1    changed=0    unreachable=0    failed=0
</code></pre>
<h2 class="title is-4">No name</h2>
<p>Finally, just to make anothe small change, one does not need to provide the <code>name</code> field at all:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/debug_playbook_noname.yml">examples/ansible/debug_playbook_noname.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: localhost
  gather_facts: False
  become: False

  tasks:
    - debug:
        msg: Just echo something

</code></pre>
<p>Result:</p>
<pre><code>$  ansible-playbook -i examples/ansible/localhost.cfg  examples/ansible/debug_playbook_noname.yml
</code></pre>
<pre><code>
PLAY [localhost] ************************************************************************************

TASK [debug] ****************************************************************************************
ok: [127.0.0.1] =&gt; {
    &quot;msg&quot;: &quot;Just echo something&quot;
}

PLAY RECAP ******************************************************************************************
127.0.0.1                  : ok=1    changed=0    unreachable=0    failed=0

</code></pre>
<h2 class="title is-4">Print results of shell commands</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/debug_playbook_shell.yml">examples/ansible/debug_playbook_shell.yml</a></strong></p>
<pre><code class="language-yaml">---
- name: Everything
  hosts: localhost
  tasks:
      #- name: run shell command
      #- shell: hostname
    - debug: msg=&quot;hello world&quot;

    - debug:
        msg: &quot;one two&quot;

    - shell: hostname
      register: hostname
    - debug:
        var: hostname


    - debug:
        msg: &quot;This is hostname: {{ hostname.stdout_lines[0] }}&quot;

    - shell: |
        hostname
        whoami
      register: res
    - debug:
        var: res

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Enforcing commit message format in Git - on the client side</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-10T12:30:01Z</updated>
    <pubDate>2018-08-10T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/enforcing-commit-message-format-in-git" />
    <id>https://code-maven.com/enforcing-commit-message-format-in-git</id>
    <content type="html"><![CDATA[<p>By default git allows you to include anything in a commit message. This freedom is nice, but when I need to look back on the commit history it is very useful to be able to connect commits to specific issues.</p>
<p>This could be done by including the issue number in every commit message. (Even if in  your setting it is called ticket number or bug number.). e.g. <code>#42</code>.</p>
<p>Git provides ways to enforce that you every commit has such a string in it, but this enforcement can only be done on the server. Too late if I made several commit on the client without the required part.</p>
<p>You can, however, ask git on your own computer to help you enforce this rule.</p>
<p>In your workspace on your computer the whole git database is in the <code>.git</code> subdirectory of your workspace. Inside there is a directory called <code>.git/hooks/</code> with a bunch of file with th extension &quot;sample&quot;. These are or example scripts to have actions at various stages of your work life-cycle.</p>
<p>Here is what I did: I create a file called <code>.git/hooks/commit-msg</code> with the following content:</p>
<pre><code class="language-shell">#!/bin/sh

test &quot;&quot; = &quot;$(grep '^#\d* - ' &quot;$1&quot;)&quot; &amp;&amp; {
   echo &gt;&amp;2 &quot;******  Start the commit message with a # character followed by the task-id!&quot;
   exit 1
}

exit 0
</code></pre>
<p>Made it executable with</p>
<pre><code>chmod +x .git/hooks/commit-msg
</code></pre>
<p>From this point on, in this repository I'll have to make sure the commit message starts with
<code>#</code> followed by a number, followed by a <code>-</code>. The rest is optional.</p>
<h2 class="title is-4">How the commit-msg hook works:</h2>
<p>Before a commit is recorded the commit message is saved in a temporary file and this script is executed passing the name of the file as the first parameter. If the exit code of this script is 0 (meaning success) then the commit can go on. If the exit code is any other number (meaning failure) then the commit is aborted. The above code checks if the content of the file (of which the name is located in variable <code>$1</code> contains the correct format.</p>
<h2 class="title is-4">Enforce task-by-name</h2>
<p>If you don't have a bug-tracking system, or you don't always want to require a bug number, I'd still suggest to require some kind of identification to the commits that will make it easier later to connect commits that are related to the same task.</p>
<p>This slight modification requires some kind of a word consisting of letters, digits, and the underscore immediately after the <code>#</code> tag.</p>
<pre><code class="language-shell">#!/bin/sh

test &quot;&quot; = &quot;$(grep '^#\w* - ' &quot;$1&quot;)&quot; &amp;&amp; {
   echo &gt;&amp;2 &quot;******  Start the commit message with a # character followed by the task!&quot;
   exit 1
}

exit 0
</code></pre>
<p>So a commit message can look like:</p>
<pre><code>#refactoring - merging 4 cases of copy-paste into a function call
</code></pre>
<h2 class="title is-4">Select from specific names</h2>
<p>The above still allows for typos in the identifier that is mainly a problem as it will make it much harder to list the related commits.</p>
<p>The next one, written in Perl, that should still be called <code>.git/hooks/commit-msg</code> has a list of acceptable task names.
It checks if the text starts with one of those.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/commit-msg.pl">examples/commit-msg.pl</a></strong></p>
<pre><code class="language-perl">#!/usr/bin/perl
use strict;
use warnings;
use autodie;

my @tasks  = qw(refactoring design bug);

my $filename = shift;
open my $fh, '&lt;', $filename;
my $line = &lt;$fh&gt;;
my ($task) = $line =~ /^#(\w+) - /;
my $error;

if ($task) {
    if (grep { $task eq $_ } @tasks) {
        # OK
    } else {
        $error = &quot;Invalid task '$task'.&quot;;
    }
} else {
    $error = 'Invalid message format.'; 
}

if ($error) {
    die &quot;****** $error\nThe message needs to start with '#TASK - ' where TASK is one of the following:\n@tasks\n&quot;;
}


</code></pre>
<p>Using this will require you to update the <code>.git/hooks/commit-msg</code> file with the current task names, but will enforce the specific names.</p>
<h2 class="title is-4">Comments</h2>
<p>Thanks for the useful article! I think there is an error in the first two examples, grep with a Regex pattern works only with -P parameter. To make it work, I needed to add it, so for example:</p>
<p>test &quot;&quot; = &quot;$(grep -P '^#(\d+)\s' &quot;$1&quot;)&quot; &amp;&amp; {</p>
<hr />
<p>Thanks for this, it really solves my problem. However, is there an easy way to deploy it across my teams when they do their next pull? It looks like the .git folder is excluded from the repo.</p>
<hr />
<p>No AFAIK you cannot automatically distribute this. I would also not put any such enforcement on my team. I'd educate them and let them opt for self-enforcement if they feel the need.</p>
<hr />
<p>Why not? Shouldn't we require traceability be established between commits and the tickets that authorize the work?</p>
<hr />
<p>Since I made that comment I learned about the <a href="https://pre-commit.com/">https://pre-commit.com/</a> project that would make it easy to distribute pre-commit hooks, but unless the computers of the developers are locked down they can always find a way to avoid the pet-commit hooks. If someone so much distrust their employees then, well, I don't have much to say.</p>
<p>I sure think it is a good idea to have traceability, but it should not be extreme. If I want to fix a typo in a comment, do I need to open a ticket, get approval from management in order to do that?</p>
<p>Do I need to get authorization to change a variable name to be more descriptive?</p>
<p>I think that's not the right way to handle development.</p>
<hr />
<p>Wouldn't this make Git consider the line to be comment (and to not include in the final commit message), because it starts with '#'?</p>
<hr />
<p>If you supply the comment on the command-line then this works. If you let it open an editor then indeed the solution is problematic. There are was to tell git to not consider # as a comment. A better solution might be not to use # as the leading character in my commit messages.</p>
<hr />
<p>Yes, you can change comment character to something else with <code>core.commentChar</code>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>R&amp;D at Cellex Networks</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-08-04T21:30:01Z</updated>
    <pubDate>2018-08-04T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rnd-at-cellex" />
    <id>https://code-maven.com/rnd-at-cellex</id>
    <content type="html"><![CDATA[<p><a id="rnd-logo" href="http://www.cellexnetworks.com/"><img src="/img/rnd/cellex-networks.jpg" alt="Cellex Networks logo"></a>
Cellex Networks located in Bnei Brak, Israel builds and sells tools to monitor network traffic from the point of view of the customer.</p>
<div class="rnd-author">
  <img class="rnd-author-img" src="/img/rnd/yoni-lavi.jpg" alt="Yoni Lavi">
  [Yoni Lavi](https://www.linkedin.com/in/yoni-lavi-7511413/) Co-founder, VP R&amp;D and Product.
</div>
<div class="qa">
  <div class="question">
    What kind products / services does your company develop / maintain? (web based, on-site appliance, hardware, etc.)
  </div>
  <div class="answer">
  Software/Hardware appliance.
  </div>
</div>
<div class="qa">
  <div class="question">
    Number of engineers:
  </div>
  <div class="answer">
    10 engineers, out of which 2 are in India.
  </div>
</div>
<div class="qa">
  <div class="question">
    What are the most common tools that engineers use?
  </div>
  <div class="answer">
   <ul>
     <li>Visual Studio development environment</li>
     <li>Visual Code</li>
   </ul>
  </div>
</div>
<div class="qa">
  <div class="question">
    Which languages do engineers code in?
  </div>
  <div class="answer">
    <ul>
      <li>C++</li>
      <li>Angular/Java Script</li>
    </ul>
  </div>
</div>
<div class="qa">
  <div class="question">
    Which operating systems do you use?
  </div>
  <div class="answer">
     Windows
  </div>
</div>
<div class="qa">
  <div class="question">
    Which databases do you use?
  </div>
  <div class="answer">
     MS SQL, MongoDB
  </div>
</div>
<div class="qa">
  <div class="question">
    What are the development environments? (OS, editor, Vagrant? Docker?)
  </div>
  <div class="answer">
      Windows, Visual Studio, .net
  </div>
</div>
<div class="qa">
  <div class="question">
    What is the system architecture? (Monolith, Microservices, Mix, etc...?)
  </div>
  <div class="answer">
    Distributed architecture, remote units connects with the centralized server. In the centralized server there are numerous micro services. 
  </div>
</div>
<div class="qa">
  <div class="question">
    What kind of cloud infrastructure do you use?
  </div>
  <div class="answer">
     Amazon.
  </div>
</div>
<div class="qa">
  <div class="question">
    What Agile practices do you employ? (Daily stand-up, Sprints, Retrospectives, ...)
  </div>
  <div class="answer">
     Working in Sprints, Daly stand-up. soft version of SCRUM.
  </div>
</div>
<div class="qa">
  <div class="question">
    What does DevOps mean in your company? (Do you have a dedicated developer experience/developer tools team?)
  </div>
  <div class="answer">
     No dedicated DevOps team. No real DevOps.
  </div>
</div>
<div class="qa">
  <div class="question">
    Is anyone on-call? Who? (Developers, DevOps people, ...?)
  </div>
  <div class="answer">
    Service team is on call, developers usually are not. 
  </div>
</div>
<div class="qa">
  <div class="question">
    What is the development process like? (The lifecycle of a piece of committed code, branching strategy)
  </div>
  <div class="answer">
     Features are listed in backlog, a more detailed design is performed for high-priority features, work-items are being added to Sprints. A detailed design is done as part of the sprint, tests are done at the end.
  </div>
</div>
<div class="qa">
  <div class="question">
    Do you do code reviews? How often? What is code review like?
  </div>
  <div class="answer">
    Yes, Team leaders review the code before commit (Pull request).
  </div>
</div>
<div class="qa">
  <div class="question">
    How is testing done? (Manual QA? What kind of tests are run? How long does a test cycle run?)
  </div>
  <div class="answer">
    New features are being tested manually, automated tests for regression. 
  </div>
</div>
<div class="qa">
  <div class="question">
    How is code released / deployed? (How often? Who can do it? Do you have staging environment? Deployment circles?)
  </div>
  <div class="answer">
    We have releases every 3 months and hot-fixes per need (1-2 a month).
  </div>
</div>
<div class="qa">
  <div class="question">
    What is an average day-in-the-life of someone on one of the engineering teams?
  </div>
  <div class="answer">
    <ul>
      <li>60% development of new features.</li>
      <li>30% bug fixes</li>
      <li>10% analysis of field issues.</li>
    </ul>
  </div>
</div>
<div class="qa">
  <div class="question">
    What makes your company a special place to be an engineer?
  </div>
  <div class="answer">
     A lot of autonomy, development in many different development environment (Android, C++, Embedded, .net, etc.) 
  </div>
</div>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Install Jenkins on Ubuntu</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-07-15T19:30:01Z</updated>
    <pubDate>2018-07-15T19:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/install-jenkins-on-ubuntu" />
    <id>https://code-maven.com/install-jenkins-on-ubuntu</id>
    <content type="html"><![CDATA[<p>In order to experiment with Jenkins, I am going to use <a href="https://www.vagrantup.com/">Vagrant</a> and <a href="https://www.virtualbox.org/">VirtialBox</a> to set up a box running <a href="https://www.ubuntu.com/">Ubuntu 17.10</a>.</p>
<h2 class="title is-4">Install Vagrant and VirtualBox</h2>
<p>Nothing special, you just need to install the two applications with using the standard
installation process of your operating system. Download <a href="https://www.vagrantup.com/">Vagrant</a> and <a href="https://www.virtualbox.org/">VirtialBox</a> and intsall them both.</p>
<h2 class="title is-4">Set up the Ubuntu 17.10 box using Vagrant</h2>
<p>Create an empty directory and in that directory create a file called <code>Vagrantfile</code> (no extension) with the following content:</p>
<pre><code>Vagrant.configure(2) do |config|
  config.vm.box = &quot;generic/ubuntu1710&quot;
  config.vm.network &quot;forwarded_port&quot;, guest: 8080, host:8080
  #config.vm.synced_folder &quot;/Users/gabor/work&quot;, &quot;/vagrant&quot;
  config.vm.provider &quot;virtualbox&quot; do |vb|
    vb.memory = &quot;512&quot;
  end
end
</code></pre>
<p>Open a terminal window or in MS Windows a Command window. Change to the directory you created for our work. Then type in</p>
<pre><code>vagrant up
</code></pre>
<p>This will take some time as it first downloads an Ubuntu image and then it will create a VirtualBox and set up the Ubuntu image as a new Virtual Box.  (It took me about 5-10 minutes.)</p>
<p>Once it completed the createtion successfully you can log in to the machine by typing:</p>
<pre><code>vagrant ssh
</code></pre>
<h2 class="title is-4">Install Jenkins</h2>
<p>Execute the following commands inside the VirtualBox image (after you ran <code>vagrant ssh</code> and were logged in to the Virtual Box).</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/sudo.txt">examples/jenkins/sudo.txt</a></strong></p>
<pre><code class="language-txt">sudo apt-get update
sudo apt-get -y upgrade
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
echo &quot;deb https://pkg.jenkins.io/debian-stable binary/&quot; | sudo tee -a  /etc/apt/sources.list &gt; /dev/null
sudo apt-get update
sudo apt-get install -y jenkins

</code></pre>
<h2 class="title is-4">Check if Vagrant is running</h2>
<p>From inside the Virtual Box images you can run the following command:</p>
<pre><code>curl http://localhost:8080/
</code></pre>
<p>You will most likely get some message about being forbidden. That's actually a good sign.</p>
<h2 class="title is-4">Set up Vagrant</h2>
<p>Visit the newly installed Jenkins using your regular browser on your computer by following this URL:</p>
<p><a href="http://localhost:8080/login?from=%2F">http://localhost:8080/login?from=%2F</a></p>
<p>You should see something like this:</p>
<p><img src="/img/unlock-jenkins.png" alt="" /></p>
<p>Basically the following text:</p>
<pre><code>Unlock Jenkins

To ensure Jenkins is securely set up by the administrator, a password has been written to the log (not sure where to find it?) and this file on the server:

/var/lib/jenkins/secrets/initialAdminPassword

Please copy the password from either location and paste it below.
Administrator password
</code></pre>
<p>On the command line type in the following:</p>
<pre><code>sudo cat /var/lib/jenkins/secrets/initialAdminPassword
</code></pre>
<p>This will print the password. Something like this:</p>
<pre><code>da3160af7d0f4c8db649d4b8000380a6
</code></pre>
<p>Copy that string and paste in the above window.</p>
<p>The next page will offer you to Customize Jenkins:</p>
<p><img src="/img/customize-jenkins.png" alt="" /></p>
<p>Select <code>Install suggested plugins</code></p>
<p>You will see a progress window saying <code>Getting Started</code>:</p>
<p><img src="/img/getting-started-jenkins.png" alt="" /></p>
<p>After a while it finished and shows a new page asking you to
<code>Create Firs Admin User</code>:</p>
<p><img src="/img/create-first-admin-user-jenkins.png" alt="" /></p>
<p>I typed in &quot;foobar&quot; as the username, &quot;Foo Bar&quot; as the Full name
and my real e-mail address.</p>
<p>Then that's done you will see a page confirming our success:</p>
<p><img src="/img/jenkins-is-ready.png" alt="" /></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>R&amp;D at Graduway</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-07-12T08:30:01Z</updated>
    <pubDate>2018-07-12T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rnd-at-graduway" />
    <id>https://code-maven.com/rnd-at-graduway</id>
    <content type="html"><![CDATA[<p><a href="https://graduway.com/">Graduway</a> a Raanana, Israel based tech company that provides SaaS products aimed at universities, schools, enterprises, and other organizations.</p>
<p><a id="rnd-logo" href="https://graduway.com/"><img src="/img/rnd/graduway.png" alt="Graduway logo"></a></p>
<div class="rnd-author">
  <img class="rnd-author-img" src="/img/rnd/antony-gelberg.png" alt="Antony Gelberg">
  [Antony Gelberg](https://www.linkedin.com/in/antgel/) VP R&amp;D. You can also reach him [@antgel](https://twitter.com/antgel).
</div>
<div class="qa">
  <div class="question">
    What kind products / services does your company develop / maintain? (web based, on-site appliance, hardware, etc.)
  </div>
  <div class="answer">
Our main products are Alumni Networking and Mentoring Intelligence, subscription SaaS products aimed at universities, schools, enterprises, and all institutions that wish to foster improved connections between alumni. We are the market leaders with over 600 customers, and we're growing fast.
  </div>
</div>
<div class="qa">
  <div class="question">
    Number of engineers:
  </div>
  <div class="answer">
    12 Full Stack Developers, 3 QA-ers.
  </div>
</div>
<div class="qa">
  <div class="question">
    Are there any remote engineers? (If yes, how does that work out?)
  </div>
  <div class="answer">
We outsource some HTML generation to a company based in Ukraine. It's not ideal, anyone who knows Agile knows how important face-to-face communication is, but we have learnt to work well together, minimizing any potential bottlenecks.
<p>For example, we store the HTML in a separate git repository which means we can use GitHub PRs and Issues to review code and track requests.</p>
<p>We also use an on-site contractor for some DevOps-y work (see below). The challenges there are getting the standard of polish that we would expect internally. It's understandable and natural that we have to work hard to coordinate expectations.</p>
  </div>
</div>
<div class="qa">
  <div class="question">
    What are the most common tools that engineers use?
  </div>
  <div class="answer">
    <ul>
      <li>A standard Microsoft environment e.g. Visual Studio / Visual Studio Code / SSMS.</li>
      <li>Git (from Bash where possible).</li>
      <li>Meld for resolving git conflicts.</li>
      <li>Postman for JSON fun.</li>
      <li>Chrome Developer Tools, an underrated tool under constant development. The Performance and Audit tabs are particularly impressive and under-utilized.</li>
      <li>I'm working hard to install some Linux / bash-fu in the team!</li>
    </ul>
  </div>
</div>
<div class="qa">
  <div class="question">
    Which languages do engineers code in?
  </div>
  <div class="answer">
    Angular / TypeScript for the web frontend, C# for the backend API.
  </div>
</div>
<div class="qa">
  <div class="question">
    Which operating systems do you use?
  </div>
  <div class="answer">
    Due to our .NET Framework legacy, we use Windows. My laptop is currently the only one in the company running Linux. Once we migrate to .NET Core, which seems the sane choice rather than rewriting the backend in Python / Ruby / Node, that will open the door to migrate our servers to Linux.
  </div>
</div>
<div class="qa">
  <div class="question">
    Which databases do you use?
  </div>
  <div class="answer">
    Microsoft SQL Server, more legacy. Long-term, we'd like to move to Postgres.
  </div>
</div>
<div class="qa">
  <div class="question">
    What are the development environments? (OS, editor, Vagrant? Docker?)
  </div>
  <div class="answer">
    See above.
  </div>
</div>
<div class="qa">
  <div class="question">
    What is the system architecture? (Monolith, Microservices, Mix, etc…?)
  </div>
  <div class="answer">
    The backend API is currently built and deployed as one unit. It's important not to over-engineer and pre-optimize. As and when there is a defining business need, we would consider refactoring into microservices. We also don't use containers, and that's totally cool.
  </div>
</div>
<div class="qa">
  <div class="question">
    What kind of cloud infrastructure do you use?
  </div>
  <div class="answer">
    We've been through the three big players, and are about to settle on AWS with the release of our Next-Generation Product.
  </div>
</div>
<div class="qa">
  <div class="question">
    What Agile practices do you employ? (Daily stand-up, Sprints, Retrospectives, ...)
  </div>
  <div class="answer">
These are Scrum practices, and we do them all. When I arrived, we didn't do any, so that was a clear win. Team leaders estimated tasks for engineers, and the focus was on trying to build a perfect architecture rather than to deliver small working increments.
<p>Now, developers are empowered and more connected to the product and business. We run two-week sprints, and take the Retrospective very seriously - it's a crucial part of the process for any team that wants to improve. At first, many people were shy and even afraid to express constructive criticism. But now, the contributions are plentiful, and everyone is enthusiastic to participate. It builds trust and we learn lots.</p>
<p>It's important to note that one can act according to Agile principles, but not “do Agile” - Agile isn't a process. We keep the Agile Manifesto and Principles at the front of our thinking, and implement what we can, where we can.</p>
  </div>
</div>
<div class="qa">
  <div class="question">
    What does DevOps mean in your company? (Do you have a dedicated developer experience/developer tools team?)
  </div>
  <div class="answer">
When I arrived, there was nothing, deploys were manual and a massive drain on resources. Implementing a CI / CD pipeline was one of my first strategic goals. My background is across all areas of computer science, and being no stranger to DevOps, I implemented the first version of the pipeline with support from a contractor. When it goes live in the next few weeks, I don't intend to build a specialist DevOps team.
<p>Why not, you ask? At its heart, DevOps is a culture, not a profession, and I see no reason why “Full Stack” shouldn't include the architecture. It's “just” code, right? So we'll be working as a team to learn about these tools and concepts, and bring them into our day-to-day life. We have a blank slate, and we can afford to be brave.</p>
  </div>
</div>
<div class="qa">
  <div class="question">
    Is anyone on-call? Who? (Developers, DevOps people, ...?)
  </div>
  <div class="answer">
We don't use a formal rotation system like PagerDuty, because we rarely have downtime. If we have ever needed to work through the night, it was before my time. If and when there is an incident, we gather in Rocket.Chat (the open-source Slack clone, highly recommended!) and self-organize to deal with it, with minimum fuss.
  </div>
</div>
<div class="qa">
  <div class="question">
    What is the development process like? (The lifecycle of a piece of committed code, branching strategy)
  </div>
  <div class="answer">
It's pretty simple. We use GitHub (soon to be GitLab? ;) ) as a de facto solution. Work on a feature branch, submit a pull-request, at least one colleague reviews and merges the code to master. We have separate branches for development, QA, and production code, which are roughly aligned with our three Terraform-generated cloud environments.
  </div>
</div>
<div class="qa">
  <div class="question">
    Do you do pair-programming?
  </div>
  <div class="answer">
Almost never. I mention it a lot but we rarely seem to do it in practice. It's a fine balancing act, with business pressures on one side, and long-term professional growth on the other. But communication and support within the team are good, and we do learn from each other.
  </div>
</div>
<div class="qa">
  <div class="question">
    Do you do code reviews? How often? What is code review like?
  </div>
  <div class="answer">
When I arrived, everyone could push anything they wanted to master, and this was a big reason why the quality wasn't as expected. Now, all code is reviewed before hitting master. At first, it was a shock to the system for some of us. But the right kind of developer is not only open to having their code reviewed, they see it as a bonus, a chance to learn something. Same goes for the reviewers, who learn a lot by reading others' code.
  </div>
</div>
<div class="qa">
  <div class="question">
    How is testing done? (Manual QA? What kind of tests are run? How long does a test cycle run?)
  </div>
  <div class="answer">
We have hundreds of unit tests in the backend (xUnit) and end-to-end tests (Protractor). It's a current focus to improve our coverage, and extend the suite to include API / integration tests. We have a manual QA team who check releases, and who are learning how to code automated tests. The current cycle runs in a few minutes, and will run as part of CI / CD when it goes live.
  </div>
</div>
<div class="qa">
  <div class="question">
    How is code released / deployed? (How often? Who can do it? Do you have staging environment? Deployment circles?)
  </div>
  <div class="answer">
As I mentioned above, it's currently manual and painful. We release our legacy (production) product as and when we need to, based on bug fixes. We release our Next-Generation code daily, as an internal preview.
<p>When our CI / CD pipeline goes live, we'll be able to release whenever we want, and we'll be able to do less and less manual QA as we introduce more automation. (A manual QA cycle on the legacy product takes 1-2 days.) Anyone who contributes code and understands the implications will be welcome to deploy to production.</p>
  </div>
</div>
<div class="qa">
  <div class="question">
    What is an average day-in-the-life of someone on one of the engineering teams?
  </div>
  <div class="answer">
   Rock up. Help our self-organizing team deliver working software to our customers. Go home happy.
  </div>
</div>
<div class="qa">
  <div class="question">
    What makes your company a special place to be an engineer?
  </div>
  <div class="answer">
We don't just talk Agile principles, we apply them. We are realists, focused on the customer, yet we keep our standards high under the inevitable pressure of modern business life. We're ambitious but realistic. We don't expect perfection, it doesn't exist, but we are committed to continuous improvement.
  </div>
</div>
<div class="qa">
  <div class="question">
    What was a major problem you as an engineering organization have encountered in the last year and how did you solve it?
  </div>
  <div class="answer">
Development of our Next-Generation product (a ground-up rewrite) wasn't going according to plan. I'd say that implementing Agile principles has turned the project around. We understand our place and responsibility within the organization, and the rest of the company is more engaged with our activities and challenges.
  </div>
</div>
<div class="qa">
  <div class="question">
    Could you elaborate the steps you took to introduce Agile principles? What were the obstacles and how did you overcome them?
  </div>
  <div class="answer">
It's a natural progression, because Agile isn't a formula. If you assess the situation correctly, it's usually pretty clear where to go next. We internalized the basics by reading and discussing the Agile Manifesto and Principles. Israeli R&D tends to move fast, but it pays to take a balanced approach.
<p>By learning from scratch rather than trying to take a shortcut to a fictional Agile / Scrum utopia, we understand why we act in a certain way, rather than acting like robots. It's like learning to fish rather than being given a fish.</p>
  </div>
</div>
<div class="qa">
  <div class="question">
    Any disaster you could share with us?
  </div>
  <div class="answer">
It's hard to forget the 1992 MTV Video Music Awards. At the end of Nirvana's performance, Krist Novoselic threw his bass guitar into the air, failed to catch it, and it smacked him on the head. I've played a bit of bass, they're heavy, I didn't envy him.
  </div>
</div>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>R&amp;D at WeWork</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-07-08T08:00:01Z</updated>
    <pubDate>2018-07-08T08:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rnd-at-wework" />
    <id>https://code-maven.com/rnd-at-wework</id>
    <content type="html"><![CDATA[<p><a id="rnd-logo" href="https://www.wework.com/"><img src="/img/rnd/wework.png" alt="WeWork logo"></a></p>
<div class="rnd-author">
  <img class="rnd-author-img" src="/img/rnd/yonatan-bergman.png" alt="Yonatan Bergman">
  [Yonatan Bergman](https://www.linkedin.com/in/yonbergman/) Senior Director Of Engineering at [WeWork](https://www.wework.com/) leading the Tel Aviv, Israel office of WeWork.
Yonatan is an experienced software engineer and manager with an eye for design and a passion for building great products and teams. Focused on consistently improving and nurturing team culture, productivity, technical excellence, as well as empowering those around him. [GitHub](https://github.com/yonbergman) Twitter: [@yonbergman](https://twitter.com/yonbergman).
</div>
<div class="qa">
  <div class="question">
    What kind products / services does your company develop / maintain? (web based, on-site appliance, hardware, etc.)
  </div>
  <div class="answer">
    We build a whole array of products/api/services that help WeWork scale and provide a holistic experience for our members. The majority are cloud hosted web services/Interfaces, mobile applications and some hardware.
<pre><code>We build the software the creates the OS to run the company of the future. Everything from streamlining construction and real-estate deals, operating our sales and marketing flows. All the way to sensor networks that give you insights into space utilization,  a mobile app that behaves as a remote control to the building from meeting rooms, guest registration and a console that let's help community managers foster culture inside existing companies and locations. 
</code></pre>
  </div>
</div>
<div class="qa">
  <div class="question">
    Number of engineers: 
  </div>
  <div class="answer">
    Today we have about 180 engineers around the world, 60 of them are here in Tel Aviv
  </div>
</div>
<div class="qa">
  <div class="question">
    Are there any remote engineers? (If yes, how does that work out?)
  </div>
  <div class="answer">
    We don't have remote engineers or teams but we are dispersed across 5 R&D centers. New York, Tel Aviv, San Fransisco, Shanghai, and Singapore.
  </div>
</div>
<div class="qa">
  <div class="question">
    How much interaction is among the people in different locations vs. inside a single office?
  </div>
  <div class="answer">
It really depends on the group. We strive for all our first level teams (aka squads) to be fully co-located. Meaning that
everyone engineering, product, design all sit in the same physical location, in most cases even right next to each other. As
you go up our org chart the groups become more distributed.
This leads to a lot of interaction amongst the people in your squad that are in your office, for groups that share missions
across offices they have more need to collaborate via email, Slack and video conferences.
We also have guilds and other structures to increase interaction in one office outside of the squad structure.
  </div>
</div>
<div class="qa">
  <div class="question">
     What are quads and guilds?
  </div>
  <div class="answer">
    Squads are our first level team, smallest multi-discipline team. Usually 8-12 people including engineers, product managers and designers.
    Guilds are a-formal groups of interest around technical and non-technical topics like React, Databases or API design.
  </div>
</div>
<div class="qa">
  <div class="question">
    What are the most common tools that engineers use?
  </div>
  <div class="answer">
    Not sure how to answer this one ;)
<pre><code>We have over 30 teams across the world working on very different applications and in many different languages, I don't think we have something that we can call a common tool.
</code></pre>
  </div>
</div>
<div class="qa">
  <div class="question">
    Which languages do engineers code in?
  </div>
  <div class="answer">
    Because we build and maintain an eco-system of about a 100 services we have a lot of languages depending on the application and the use case.
    We have Ruby on Rails, Java/Kotlin, Go, Scala, Python, and NodeJS on the backend. We're predominantly doing React on the web but we do have some BackboneJS and Angular. Mobile is mostly native (Swift and Java). 
  </div>
</div>
<div class="qa">
  <div class="question">
    Which operating systems do you use?
  </div>
  <div class="answer">
    Most of our engineers develop on OSX and our services are deployed on multiple OSes.
  </div>
</div>
<div class="qa">
  <div class="question">
    Which databases do you use?
  </div>
  <div class="answer">
    Mostly relational databases like PostgreSQL, we do have Redis and Elasticsearch for some use cases and Redshift as our DW.
  </div>
</div>
<div class="qa">
  <div class="question">
    What is the system architecture? (Monolith, Microservices, Mix, etc…?)
  </div>
  <div class="answer">
    We have a few monoliths in our architecture but we're moving towards a world where it's mostly well organized services - some people would call this Microservices :)
  </div>
</div>
<div class="qa">
  <div class="question">
    What kind of cloud infrastructure do you use?
  </div>
  <div class="answer">
    Mix of cloud providers based on our needs.
  </div>
</div>
<div class="qa">
  <div class="question">
    What Agile practices do you employ? (Daily stand-up, Sprints, Retrospectives, ...)
  </div>
  <div class="answer">
    It mostly depends on the team to choose, but the vast majority do hold major practices of some variation of
    agile/scrum/kanban. Including daily stand-ups, weekly grooming sessions as part of sprints (we mostly adhere to 2 week
    sprints, but again depending on the team). As far as I know most of the teams do hold retros too.
  </div>
</div>
<div class="qa">
  <div class="question">
    What does DevOps mean in your company? (Do you have a dedicated developer experience/developer tools team?)
  </div>
  <div class="answer">
    DevOps is part of the responsibility of the squad, you develop the code, you deploy and monitor it too :)
    "You break it you fix it" mentality.
     We do have a dedicated foundations team that leads strategy, tooling and training in the world of Devops.
  </div>
</div>
<div class="qa">
  <div class="question">
    Is anyone on-call? Who? (Developers, DevOps people, ...?)
  </div>
  <div class="answer">
    Depends on the system and the team, but developers are on-call for their own systems.
  </div>
</div>
<div class="qa">
  <div class="question">
    What is the development process like? (The lifecycle of a piece of committed code, branching strategy)
  </div>
  <div class="answer">
     Every change into our master branch goes through dedicated feature/fix branches that get merged in after they get reviewed
using GitHub pull request feature. During that time the code goes through our CI which usually means testing it, linting it
and any other automation that we have set up for that system.
  </div>
</div>
<div class="qa">
  <div class="question">
    Do you do pair-programming?
  </div>
  <div class="answer">
    We support pair-programming including certain offices having dedicated pair-programming stations, but like most other places
    I don't think we actually do it that often.
  </div>
</div>
<div class="qa">
  <div class="question">
    Do you do code reviews? How often? What is code review like?
  </div>
  <div class="answer">
    We love code reviews, each piece of code that reaches production usually sees two other sets of eyes. We've been very strict
    about integrating tools like linters into our CI process to decrease the effect of bike-shedding during CRs. Everyone does
    CRs to everyone and it's absolutely crucial for us since we hold an inner-sourcing model where any team can contribute code
    to any system.
  </div>
</div>
<div class="qa">
  <div class="question">
    How is testing done? (Manual QA? What kind of tests are run? How long does a test cycle run?)
  </div>
  <div class="answer">
   We try to avoid manual QA as much as possible. We aim at the bottom of the testing pyramid with a majority for unit and regression testing and a bit ui testing where relevant. Testing cycles take from a few minutes to an hour depending on the project.
  </div>
</div>
<div class="qa">
  <div class="question">
    How is code released / deployed? (How often? Who can do it? Do you have staging environment? Deployment circles?)
  </div>
  <div class="answer">
    Code is deployed on a need to basis. Meaning mostly once or several times a day. We have a staging environment and for majority of projects we spin up an environment per pull request as well.
  </div>
</div>
<div class="qa">
  <div class="question">
    What is an average day-in-the-life of someone on one of the engineering teams?
  </div>
  <div class="answer">
    <ul>
      <li>Come in the morning for the daily standup, on the way there stop at the barista station and pick up your fav coffee.</li>
      <li>Start working on one of the tasks in the sprint, spend some time code reviewing or pairing on someone else tasks.</li>
      <li>Because it's WeWork we usually have some sort of community happy hour for the members of our building that we join.</li>
      <li>An optional guild meeting on some advance technical topic that you can decide to skip if you're too busy.</li>
      <li>Deploy your code from earlier today to production just in time to hop on a call with your colleagues in New York about that design review they're working on.</li>
      <li>Head out for the day 🌔</li>
    </ul>
  </div>
</div>
<div class="qa">
  <div class="question">
    What makes your company a special place to be an engineer?
  </div>
  <div class="answer">
    WeWork is special because on the one hand the company is so big and is doing a lot of things but on the other hand we’re not that many engineers. That means people get to work on a lot of different types of problems and systems in order to deliver value.
  </div>
</div>
<div class="qa">
  <div class="question">
    What was a major problem you as an engineering organization have encountered in the last year and how did you solve it?
  </div>
  <div class="answer">
   When we past a certain threshold of engineers (about a 100) we understood that the engagement model with teams like devops and QA doesn't scale. We shifted the dev platform group from a [service provider organization](/service-provider) to a [strategy and tooling org](/tooling-teams). This was a painful move for us because we haven't yet had the skills embedded in all our squads and we didn't have the self serve infrastructure already in place.
  </div>
</div>
<div class="qa">
  <div class="question">
    Any disaster you could share with us?
  </div>
  <div class="answer">
    About a year ago we onboarded our biggest enterprise client at the time, which included 10's of thousands of employees. Our system for adding new members wasn't equipped to handle that load and the set of services and events that propogated brought our system to a halt. That happened during the busiest day of the month when we onboard all the new members joining WeWork. We quickly scrambled to scale the relevant servers and clean the queues and after about an hour of troubleshooting the issue everything was back to normal. Since then we added [circuit breakers](/circuit-breaker) and reconfigured the onboarding flow sow that it can scale with the number of new users added to the system.
  </div>
</div>
<div class="qa">
  <div class="question">
    What else would you like to tell people interested to the work at WeWork?
  </div>
  <div class="answer">
    If you're looking to experience what it means to be at a true hyper growth company, where your team and group double in size every year, where new projects and business lines start every quarter and where you can have a major impact no matter who you are. If you're looking to join a company that has a net-positive effect on the world and the people in it and if you're looking to join a group of diverse people from different backgrounds, skillsets and experience that love working together - WeWork is the place for you.
<p>The <a href="http://engineering.wework.com/">engineering blog of WeWork</a> is an excellent place to get more insight.</p>
  </div>
</div>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>R&amp;D at $company?</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-07-08T07:30:01Z</updated>
    <pubDate>2018-07-08T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rnd" />
    <id>https://code-maven.com/rnd</id>
    <content type="html"><![CDATA[<p>As an employee you usually work at the same company for 2-4 years or even more.</p>
<p>That does not give you a lot of chances to learn how others, in other companies work.</p>
<p>As a trainer, consultant and coach I have several clients every year.
That already gives me a lot more opportunities to learn, but it is still only a handfull of companies a year.</p>
<p>In this series of blog posts I am going to interview Engineering leaders at various hi-tech companies.
This will provide some insight into how these R&amp;D teams work. With a focus on both the process and the human side of it.</p>
<h2 class="title is-4">Most recent interviews</h2>
<ul>
<li>
<p><a href="/rnd-at-wework">WeWork</a></p>
</li>
<li>
<p><a href="/rnd-at-graduway">Graduway</a></p>
</li>
<li>
<p><a href="/rnd-at-cellex">Cellex</a></p>
</li>
<li>
<p><a href="/rnd-the-black-list">The Black List</a></p>
</li>
</ul>
<p>Every interview starts with a set of standard questions and then we go into some of the more interesting parts and try to see more details.</p>
<p>If there are questions you think would be really interesting to ask, don't hesitate to let me know.
Even if an interview was already finished. I might still be able to ask the question and update the interview with
the additional QA.</p>
<p>For the inspiration visit the <a href="https://increment.com/development/what-its-like-to-be-a-developer-at/">What it is like to a developer at ...</a> article that covers Digital Ocean, Fastly, GitLab, Lyft, Rainforest, Sauce Labs and Slack.</p>
<p>I am interested in the life of all the people in the Enginnering department: Developers, QA engineers, DevOps engineers, IT, etc.
Anyone who is related to the creation of value to the customers.</p>
<p>I am also very interested in the practices and processes employed. After all that's what I help companies with.</p>
<p>I think these issues can be interesting to all the engineers around the world and hope that you too will learn from them.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Per project (per directory) private ssh keys for git</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-07-03T16:30:01Z</updated>
    <pubDate>2018-07-03T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/per-project-ssh-public-keys-git" />
    <id>https://code-maven.com/per-project-ssh-public-keys-git</id>
    <content type="html"><![CDATA[<p>I wanted to show how two people with two separate accounts on GitHub, Bitbucket, or GitLab can work in a cooperation.
For this I had to make sure that when I interact with the remote server I use it with the correct account.</p>
<p>In order to log in to the same server (e.g. GitHub) with two different accounts I use two browsers. For user A I use Firefox.
For user B I use Chrome.</p>
<p>For <code>push</code> and <code>pull</code> it was a bit trickier. I think I could have used <code>https</code> access, but that would mean for every interaction I have to type in my password. I wanted to avoid that. So I wanted to use ssh access.</p>
<p>So I will need a separate set of ssh-keypairs for each user and I'll need to set up some configuration that will always use the correct keypair.</p>
<p><code>ssh</code> allows the use of a configuration file located in <code>~/.ssh/config</code> that allows us to configure different keypairs (identity files) per host. This is how an entry in that file looks like:</p>
<pre><code>host github.com
   HostName github.com
   IdentityFile ~/.ssh/id_rsa
   User szabgab
</code></pre>
<p>This however does not help us as this is based on the target hostname and I'd like to access the same host, and even use the same remote username (git) but use two different Identity files.</p>
<h2 class="title is-4">The solution</h2>
<p>Generate new Identity files:</p>
<pre><code>mkdir id_a
ssh-keygen -f id_a/id_rsa -N ''
</code></pre>
<p>The <code>-N ''</code> will tell the command to use an empty passphrase. The <code>-f id_a/id_rsa</code> tells the command where to save the new Identity file. The Public key will be saved next to it with .pub extension.</p>
<p>We can then take the public key and upload it to our cloud-based Git server to the account of user &quot;A&quot;.</p>
<p>We do the same with user &quot;B&quot;.</p>
<p>The next command will configure git to use the ssh command passing it the path of the identity file of A.
Basically the first command will changes the file <code>~/.gitconfig</code> adding</p>
<pre><code>[core]
    sshCommand = &quot;ssh -i /full/path/to/id_a/id_rsa&quot;
</code></pre>
<p>The <code>clone</code> command will use this <code>ssh</code> and finally we remove the entry from the global configuration file.</p>
<pre><code>git config --global core.sshCommand &quot;ssh -i /full/path/to/id_a/id_rsa&quot;
git clone ...
git config --global --unset core.sshCommand
</code></pre>
<p>Configure each cloned directory to use its own identity file and its own user and email for
the identification of commits.</p>
<pre><code>cd project-dir
git config --local core.sshCommand &quot;ssh -i /full/path/to/id_a/id_rsa&quot;
git config --local user.name &quot;User A&quot;
git config --local user.email A@code-maven.com
</code></pre>
<p>This will change the <code>.git/config</code> file in the current directory.</p>
<h2 class="title is-4">Full steps</h2>
<p>Let's assume we have two Bitbucket users: Mary and Joe with usernames &quot;mary&quot; and &quot;joe&quot; respectively.
Mary has a private repository called  <code>https://bitbucket.org/mart/demo</code>.
She configures it to make it writable by Joe as well. (Done on the web interface of BitBucket.)</p>
<p>We create directory to use for this whole project:</p>
<pre><code>cd ~
mkdir demo
cd demo
</code></pre>
<p>We create directories for the identity files:</p>
<pre><code>mkdir mary
mkdir joe
</code></pre>
<p>We generate two Identity Files:</p>
<pre><code>ssh-keygen -f mary/id_rsa -N ''
ssh-keygen -f joe/id_rsa -N ''
</code></pre>
<p>We upload the content of <code>mary/id_rsa.pub</code> to the BitBucket account of Mary and the
content of <code>joe/id_rsa.pub</code> to the BitBucket account of Joe.</p>
<p>We clone the repository of Mary with the credentials of Mary to the local directory called &quot;demo_mary&quot;
but we also make sure to remove her credentials from the global configuration file.</p>
<pre><code>git config --global core.sshCommand &quot;ssh -i mary/id_rsa&quot;
git clone git@bitbucket.org:mary/demo.git demo_mary
git config --global --unset core.sshCommand
</code></pre>
<p>Then we configure this newly cloned repository to use the credentials of Mary:</p>
<pre><code>cd demo_mary
git config --local core.sshCommand &quot;ssh -i mary/id_rsa&quot;
git config --local user.name &quot;Mary&quot;
git config --local user.email mary@code-maven.com
</code></pre>
<p>Then we go back to the common directory and do the same for Joe:</p>
<p>We clone the repository of Mary using the credentials of Joe and then remove
those credentials from the global configuration file:</p>
<pre><code>cd ..
git config --global core.sshCommand &quot;ssh -i joe/id_rsa&quot;
git clone git@bitbucket.org:mary/demo.git demo_joe
git config --global --unset core.sshCommand
</code></pre>
<p>Then we configure this newly cloned repository to use the credentials of Joe:</p>
<pre><code>cd demo_joe
git config --local core.sshCommand &quot;ssh -i joe/id_rsa&quot;
git config --local user.name &quot;Joe&quot;
git config --local user.email joe@code-maven.com
</code></pre>
<h2 class="title is-4">The short solution</h2>
<pre><code>GIT_SSH_COMMAND=&quot;ssh -i /full/path/to/id_a/id_rsa&quot; git clone ...
cd repo_name
git config --local core.sshCommand &quot;ssh -i /full/path/to/id_a/id_rsa&quot;
git config --local user.name &quot;User A&quot;
git config --local user.email A@code-maven.com
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Strategy and Tooling teams</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-07-02T14:00:01Z</updated>
    <pubDate>2018-07-02T14:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/tooling-teams" />
    <id>https://code-maven.com/tooling-teams</id>
    <content type="html"><![CDATA[<p>Similar to the <a href="/service-provider">service provider</a> organization structure, the tooling teams are also organized by discipline, but in this case their focus is not to provide personnel to do the work. The define strategies and provide tools so the the individual development teams can handle the tasks themselves.</p>
<p>In this situation usually the development team is responsible for all the steps required to bring an idea to the client. They do the development work, they do the QA, the InfoSec, the deployment, and they handle the operations.</p>
<p>For this they usually have additional team members who are experts in one of these subjects, (e.g. QA or InfoSec expert)
who are part of the team either full time or in some cases part time.</p>
<p>In this case the job of the dedicated QA/InfoSec/DevOps teams is to define the strategy how to achieve high quality, security, and high level of operations. They also build tools so the teams can self-service. For example they build, or help building the infrastructure to run automated tests. The write down coding requirements to make the applications secure and then they also provide tools that can automatically check the applications if they are secure.</p>
<p>They work closely with the development teams, but the development teams don't depend on the availability of the tooling team members. The development team can move forward without waiting for their time-slot in the QA, InfoSec, DevOps teams.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Service Provider</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-07-02T13:00:01Z</updated>
    <pubDate>2018-07-02T13:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/service-provider" />
    <id>https://code-maven.com/service-provider</id>
    <content type="html"><![CDATA[<p>There are several ways to structure an Engineering organization. One of the traditional ways is to create Service Provides.
For example the QA department or team. The IT department. The Information Security (InfoSec) department.</p>
<p>These are similar to other functions of the organization: Marketing, Sales, HR, Legal, Finance etc.</p>
<p>These days some organizations also have dedicated DevOps teams.</p>
<p>Organization that is structured this way emphasize the collective expertise in one subject that belongs to one team.
Usually they see the people inside one team more interchangeable. They have a high level of expertise in their field,
but usually have limited understanding of other parts of the organiation.</p>
<p>The development team in such organization would only handle development of the product. Then it would usually hand over a version of the product to the QA team that would check it, open bug reports and return the task to you. You'd then go back-and-forth between the development team and the dedicated QA team.</p>
<p>Once QA is done, you'd go to the InfoSec team so they check the product for vulnaribilities. They would probably check the product both as a black box, but they might also look at the source code to look for security issues. Then you have a back-and-forth ping-pong with this team as well.</p>
<p>Once the InfoSec team gives it's green light, you'd go to to the IT Operations team, or these days you'd go to the DevOps team to ask them to deploy the product.</p>
<p>Each of these interactions is time consuming.
As you are not the only development team waiting for the various other team, in each interaction there are going to be queues.
There is going to be fighting for priority etc.
Each of these interactions is an opportunity for misunderstanding and for information loss.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Software Circuit Breaker</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-07-02T12:30:01Z</updated>
    <pubDate>2018-07-02T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/circuit-breaker" />
    <id>https://code-maven.com/circuit-breaker</id>
    <content type="html"><![CDATA[<p>A circuit breaker in software is proxy-like object that monitors the performance the remote resource.
If the remote resource stops answering or if the response time is beyond some threshold, the circuit breaker
will stop forwarding the request and it will return an error-code or raise an exception itself.</p>
<p>The idea is that it is better to fail fast then to fail slow.</p>
<p>It is also better to avoid further overloading the already overloaded remote system.</p>
<p>In electrical system it is acceptable to expect an external action to reset the circuit breaker.
In software however we might want to allow the circuit breaker to check if the protected resource
is already available and start letting requests through again.</p>
<p>For more details see <a href="https://martinfowler.com/bliki/CircuitBreaker.html">circuit breakers</a> as described by Martin Fowler
and see the <a href="https://en.wikipedia.org/wiki/Circuit_breaker_design_pattern">Circuit breaker design pattern</a> on Wikipedia.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Git Workflow for teams using a single remote repository</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-06-30T11:30:01Z</updated>
    <pubDate>2018-06-30T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/git-workflow-for-teams-with-single-remote-repo" />
    <id>https://code-maven.com/git-workflow-for-teams-with-single-remote-repo</id>
    <content type="html"><![CDATA[<p>Once you know what interesting <a href="/git-workflow-for-individuals">workflows are there for individuals</a> you can start
thinking about the workflow for your team. Let's see our options using a single remote repository.</p>
<h2 class="title is-4">Centralized workflow - single master</h2>
<p>In the centralized workflow we use a single repository on the server and a single branch called &quot;master&quot;. Everyone clones the
central git repository. Everyone makes local changes on the &quot;master&quot; branch.
When a developer wants to push out the changes to the server two things can happen. If the server was not updated since this developer cloned the repository or since she pushed to it the last time, then this new &quot;git push&quot; will work.</p>
<p>If however there are changes on the server that are not yet present in the local git repository of the developer then first she needs to bring them to her computer. This can be done using <code>git pull</code> that will result in a local merge, or it can be done using
<code>git pull --rebase</code> that will rebase the local change on top of the changes that come from the remote server.</p>
<p>In either case, after the <code>pull</code> the developer can now <code>push</code> oit her changes. (Assuming noone has updated the remote server since the <code>pull</code>.)</p>
<p>A huge advantage is that this workflow is very simple to learn, but we have to think about speed of progress and code stability.</p>
<p>We can have two approaches. We can demand &quot;master&quot; to be always in a releasable state or we can allow the developers to mess it up and then have &quot;code freeze&quot; before each release.</p>
<p>In the &quot;master is stable&quot; approach people have to be very careful about the changes they make as to not break &quot;master&quot;.
If the code in &quot;master&quot; gets broken (e.g. it does not compile, does not pass tests) that will impact the work of every developer and break the promise. This apprach means that at every time, even when we are in the middle of implementing a feature we need to be able to release the code. We might use <b>feature flags</b> to hide the not yet fully developed feature from the real users.</p>
<p>The &quot;allow masrer to be a mess&quot; approach is different. In this case every time we want to release a new version we would declare a &quot;code freeze&quot; in which only bug-fixes relevant to the upcoming release are allowed to be pushed to the central repository. Sometimes these &quot;code freezes&quot; take several weeks. During this time many of the developers are stuck. They cannot push new code to the central repository. So even if they make changes locally they cannot properly cooperate with other developers.</p>
<p>The latter approach usually creates a lot of downtime and a lot of frustration.</p>
<h2 class="title is-4">Single remote - feature branches</h2>
<p>In this workflow we still use a single remote server, but this time we use feature-branches to develop code.
We keep &quot;master&quot; always in a releasable state. For every feature, for every bug-fix we create a separate branch.
Unlike in the single developer mode however, here we will most likely push out the feature-branch to the central
repository to allow cooperation with others.</p>
<p>Start from the master branch:</p>
<pre><code>$ git checkout master
</code></pre>
<p>Create a feature branch locally and switch to it: (could have been one command <code>git checkout -b feature</code>)</p>
<pre><code>$ git branch feature
$ git checkout feature
</code></pre>
<p>Make some local changes:</p>
<pre><code>$ git add .
$ git commit -m &quot;message&quot;
</code></pre>
<p>Push out the branch and set up the local branch to be mapped to the remote branch.</p>
<pre><code>$ git push -u origin feature
</code></pre>
<p>Other developers can now start working on this branch. For this they need to do the following:</p>
<p>In a clean workspace switch to the &quot;master&quot; branch and pull everything from the remote server.</p>
<pre><code>$ git checkout master
$ git pull
</code></pre>
<p>Set up the local branch following the remote feature branch:</p>
<pre><code>$ git branch feature origin/feature
</code></pre>
<p>From this point on the &quot;feature&quot; branch can be used by both developers. They can simply &quot;push&quot; their local changes to
the remote branch  and &quot;pull&quot; from the remote server the changes done by the other developers. If for the <code>pull</code>
command we also use the <code>--rebase</code> flag then the history on this branch will be a nice straight line just as the
individual developer ggot when she used <code>rebase</code> to the <code>master</code> branch.</p>
<p>However, following the <code>master</code> branch will be trickier. If we rebase our feature branch onto the master branch we
might do so while there are changes in our feature branch on the remote server or at other developers and then this will
totally mess up our history. So don't do that. Instead, have short-lived feature branches.</p>
<p><img src="/img/Git-Logo-2Color.png" alt="" /></p>
<linkto file="examples/git/two-dev-master-merge.sh">
<linkto file="examples/git/two-dev-master-rebase.sh">
<linkto file="examples/git/two-dev-feature-merge.sh">
<linkto file="examples/git/two-dev-feature-rebase.sh">
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>JavaScript and jQuery on GitHub pages</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-06-19T17:30:01Z</updated>
    <pubDate>2018-06-19T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/javascript-on-github-pages" />
    <id>https://code-maven.com/javascript-on-github-pages</id>
    <content type="html"><![CDATA[<p>If you have just <a href="/getting-started-with-github-pages">started with GitHub pages</a> you might be wondering how can you serve dynamic content. Well, you cannot really as the pages are static.
However this should not stop you from writing in JavaScript and ending up with a <b>Single Page Application</b>.</p>
<p>The first step in that direction is to see how to add JavaScript and jQuery to the pages.</p>
<p>Actually, after we went through some experimental steps it is quite straight forward. After all we can embed any HTML in our Markdown files so we can also embed <b>script</b>
tags. If this is enough for you, you can now go ahead and start adding JavaScript code to your pages.</p>
<h2 class="title is-4">Step-by-step guide</h2>
<p>If you are less of a JavaScript maven, then you might want to follow use step-by-step.</p>
<h3 class="title is-5">Embedded JavaScript</h3>
<p>In the first example we create a Markdown file called <code>js.md</code> In that Markdown file we put an HTML <code>div</code> element with an id &quot;text&quot;.
Later in that file we add a <code>script</code> tag and inside we write some simple JavaScript code. This code will locate the element that has the id &quot;text&quot;, or <code>div</code>
element, and inside the element it will put the text that appears on the right-hand side of the assignment.</p>
<p>The main thing you need to remember here is that the JavaScript code must come at the end so by the time it is executed the DOM is ready. Otherwise the JavaScript code will not find the HTML element.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/github/js.md">examples/github/js.md</a></strong></p>
<pre><code class="language-markdown">
&lt;div id=&quot;text&quot;&gt;&lt;/div&gt;

&lt;script&gt;
document.getElementById(&quot;text&quot;).innerHTML = &quot;Text added by JavaScript code&quot;;
&lt;/script&gt;


</code></pre>
<h3 class="title is-5">jQuery loaded from external file</h3>
<p>Our next step is to use <a href="http://jquery.com/">jQuery</a> instead of vanilla JavaScript.
For this we only need to load jQuery from its CDN.
If we are already loading an external JavaScript file, I though we can also move our code to an external file.
So I created the <code>demo.js</code> file loaded it using another <code>script</code> tag.</p>
<p>This time we can put the <code>script</code> tags anywhere we like as the jQuery callback function will be only executed when the DOM is ready.
The only limitation is that we need to load our code <b>after</b> we have loaded jQuery itself.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/github/jquery.md">examples/github/jquery.md</a></strong></p>
<pre><code class="language-markdown">&lt;script src=&quot;https://code.jquery.com/jquery-3.2.1.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/demo.js&quot;&gt;&lt;/script&gt;

&lt;div id=&quot;text&quot;&gt;&lt;/div&gt;



</code></pre>
<p>In our jQuery code we have an anonymous callback function that will be called when the HTML was loaded and the DOM is ready. That's what <code>$().ready</code> does.
Inside the function we use the <code>$(&quot;#text&quot;)</code> expression to locate the element with id &quot;text&quot; and then we use the <code>html</code> method to set the content of the element.
(It is the same as innerHTML in vanilla JavaScript.)</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/github/demo.js">examples/github/demo.js</a></strong></p>
<pre><code class="language-js">$().ready(function() {
   $(&quot;#text&quot;).html(&quot;Text added by jQuery code.&quot;);
});

</code></pre>
<h3 class="title is-5">Loading JSON data from server</h3>
<p>Finally, we would like to get some data from the server. As we cannot run anything on the server we cannot get dynamic data,
but we can store the data in JSON files and load them using the Ajax methods provided by jQuery.</p>
<p>In this example the Markup file is effectively the same as in our previous examples.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/github/json.md">examples/github/json.md</a></strong></p>
<pre><code class="language-markdown">&lt;script src=&quot;https://code.jquery.com/jquery-3.2.1.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/json.js&quot;&gt;&lt;/script&gt;

&lt;div id=&quot;text&quot;&gt;&lt;/div&gt;



</code></pre>
<p>In the jQuery code we use the <code>getJSON</code> method to fetch the <code>data.json</code> file from the server.
This means, first the HTML file that was generated from the Markdown file will be loaded. Then the browser will load jQuery followed by our code.
Then, once everything is ready, our code runs and loads the JSON file from the server.</p>
<p>The first parameter of <code>getJSON</code> is the URL of the JSON file we would like to load. The second parameter is an anonymous callback function that will be executed when we get the response from the server. Then the jQuery will call our anonymous function and it will pass the content of the JSON file after it was converted to a JavaScript object.</p>
<p><code>console.log(data);</code> was only added for debugging.</p>
<p>In the last JQuery code, in <code>$(&quot;#text&quot;).html(data[&quot;text&quot;]);</code> the first part <code>$(&quot;#text&quot;)</code> will locate the element with the id &quot;text&quot;.
The <code>html</code> method will set the content of the element to the value we pass to it which in our case is <code>data[&quot;text&quot;]</code>, the value of the &quot;text&quot; key that arrived from the JSON file.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/github/json.js">examples/github/json.js</a></strong></p>
<pre><code class="language-js">$().ready(function(){
    $.getJSON( &quot;/data.json&quot;, function( data ) {
    console.log(data);
    $(&quot;#text&quot;).html(data[&quot;text&quot;]);
  });
});

</code></pre>
<p>This is the <code>data.json</code></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/github/data.json">examples/github/data.json</a></strong></p>
<pre><code class="language-json">{
   &quot;text&quot; : &quot;Text supplied in the JSON file&quot;
}

</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>Once you tried it and made it work, it seems to be quite straight forward to embed or include JavaScript and jQuery code.
We now need to turn to more complex tasks.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Better Predicting Wine Cultivar with Feature Selection</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-28T23:30:01Z</updated>
    <pubDate>2018-04-28T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/predicting-wine-cultivar" />
    <id>https://code-maven.com/predicting-wine-cultivar</id>
    <content type="html"><![CDATA[<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<style type="text/css">
    /*!
*
* Twitter Bootstrap
*
*/
/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
[hidden],
template {
  display: none;
}
a {
  background-color: transparent;
}
a:active,
a:hover {
  outline: 0;
}
abbr[title] {
  border-bottom: 1px dotted;
}
b,
strong {
  font-weight: bold;
}
dfn {
  font-style: italic;
}
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
mark {
  background: #ff0;
  color: #000;
}
small {
  font-size: 80%;
}
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  top: -0.5em;
}
sub {
  bottom: -0.25em;
}
img {
  border: 0;
}
svg:not(:root) {
  overflow: hidden;
}
figure {
  margin: 1em 40px;
}
hr {
  box-sizing: content-box;
  height: 0;
}
pre {
  overflow: auto;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}
button {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  cursor: pointer;
}
button[disabled],
html input[disabled] {
  cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
input {
  line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: textfield;
  box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
legend {
  border: 0;
  padding: 0;
}
textarea {
  overflow: auto;
}
optgroup {
  font-weight: bold;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,
th {
  padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    color: #000 !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}
@font-face {
  font-family: 'Glyphicons Halflings';
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
  position: relative;
  top: 1px;
  display: inline-block;
  font-family: 'Glyphicons Halflings';
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
  content: "\002a";
}
.glyphicon-plus:before {
  content: "\002b";
}
.glyphicon-euro:before,
.glyphicon-eur:before {
  content: "\20ac";
}
.glyphicon-minus:before {
  content: "\2212";
}
.glyphicon-cloud:before {
  content: "\2601";
}
.glyphicon-envelope:before {
  content: "\2709";
}
.glyphicon-pencil:before {
  content: "\270f";
}
.glyphicon-glass:before {
  content: "\e001";
}
.glyphicon-music:before {
  content: "\e002";
}
.glyphicon-search:before {
  content: "\e003";
}
.glyphicon-heart:before {
  content: "\e005";
}
.glyphicon-star:before {
  content: "\e006";
}
.glyphicon-star-empty:before {
  content: "\e007";
}
.glyphicon-user:before {
  content: "\e008";
}
.glyphicon-film:before {
  content: "\e009";
}
.glyphicon-th-large:before {
  content: "\e010";
}
.glyphicon-th:before {
  content: "\e011";
}
.glyphicon-th-list:before {
  content: "\e012";
}
.glyphicon-ok:before {
  content: "\e013";
}
.glyphicon-remove:before {
  content: "\e014";
}
.glyphicon-zoom-in:before {
  content: "\e015";
}
.glyphicon-zoom-out:before {
  content: "\e016";
}
.glyphicon-off:before {
  content: "\e017";
}
.glyphicon-signal:before {
  content: "\e018";
}
.glyphicon-cog:before {
  content: "\e019";
}
.glyphicon-trash:before {
  content: "\e020";
}
.glyphicon-home:before {
  content: "\e021";
}
.glyphicon-file:before {
  content: "\e022";
}
.glyphicon-time:before {
  content: "\e023";
}
.glyphicon-road:before {
  content: "\e024";
}
.glyphicon-download-alt:before {
  content: "\e025";
}
.glyphicon-download:before {
  content: "\e026";
}
.glyphicon-upload:before {
  content: "\e027";
}
.glyphicon-inbox:before {
  content: "\e028";
}
.glyphicon-play-circle:before {
  content: "\e029";
}
.glyphicon-repeat:before {
  content: "\e030";
}
.glyphicon-refresh:before {
  content: "\e031";
}
.glyphicon-list-alt:before {
  content: "\e032";
}
.glyphicon-lock:before {
  content: "\e033";
}
.glyphicon-flag:before {
  content: "\e034";
}
.glyphicon-headphones:before {
  content: "\e035";
}
.glyphicon-volume-off:before {
  content: "\e036";
}
.glyphicon-volume-down:before {
  content: "\e037";
}
.glyphicon-volume-up:before {
  content: "\e038";
}
.glyphicon-qrcode:before {
  content: "\e039";
}
.glyphicon-barcode:before {
  content: "\e040";
}
.glyphicon-tag:before {
  content: "\e041";
}
.glyphicon-tags:before {
  content: "\e042";
}
.glyphicon-book:before {
  content: "\e043";
}
.glyphicon-bookmark:before {
  content: "\e044";
}
.glyphicon-print:before {
  content: "\e045";
}
.glyphicon-camera:before {
  content: "\e046";
}
.glyphicon-font:before {
  content: "\e047";
}
.glyphicon-bold:before {
  content: "\e048";
}
.glyphicon-italic:before {
  content: "\e049";
}
.glyphicon-text-height:before {
  content: "\e050";
}
.glyphicon-text-width:before {
  content: "\e051";
}
.glyphicon-align-left:before {
  content: "\e052";
}
.glyphicon-align-center:before {
  content: "\e053";
}
.glyphicon-align-right:before {
  content: "\e054";
}
.glyphicon-align-justify:before {
  content: "\e055";
}
.glyphicon-list:before {
  content: "\e056";
}
.glyphicon-indent-left:before {
  content: "\e057";
}
.glyphicon-indent-right:before {
  content: "\e058";
}
.glyphicon-facetime-video:before {
  content: "\e059";
}
.glyphicon-picture:before {
  content: "\e060";
}
.glyphicon-map-marker:before {
  content: "\e062";
}
.glyphicon-adjust:before {
  content: "\e063";
}
.glyphicon-tint:before {
  content: "\e064";
}
.glyphicon-edit:before {
  content: "\e065";
}
.glyphicon-share:before {
  content: "\e066";
}
.glyphicon-check:before {
  content: "\e067";
}
.glyphicon-move:before {
  content: "\e068";
}
.glyphicon-step-backward:before {
  content: "\e069";
}
.glyphicon-fast-backward:before {
  content: "\e070";
}
.glyphicon-backward:before {
  content: "\e071";
}
.glyphicon-play:before {
  content: "\e072";
}
.glyphicon-pause:before {
  content: "\e073";
}
.glyphicon-stop:before {
  content: "\e074";
}
.glyphicon-forward:before {
  content: "\e075";
}
.glyphicon-fast-forward:before {
  content: "\e076";
}
.glyphicon-step-forward:before {
  content: "\e077";
}
.glyphicon-eject:before {
  content: "\e078";
}
.glyphicon-chevron-left:before {
  content: "\e079";
}
.glyphicon-chevron-right:before {
  content: "\e080";
}
.glyphicon-plus-sign:before {
  content: "\e081";
}
.glyphicon-minus-sign:before {
  content: "\e082";
}
.glyphicon-remove-sign:before {
  content: "\e083";
}
.glyphicon-ok-sign:before {
  content: "\e084";
}
.glyphicon-question-sign:before {
  content: "\e085";
}
.glyphicon-info-sign:before {
  content: "\e086";
}
.glyphicon-screenshot:before {
  content: "\e087";
}
.glyphicon-remove-circle:before {
  content: "\e088";
}
.glyphicon-ok-circle:before {
  content: "\e089";
}
.glyphicon-ban-circle:before {
  content: "\e090";
}
.glyphicon-arrow-left:before {
  content: "\e091";
}
.glyphicon-arrow-right:before {
  content: "\e092";
}
.glyphicon-arrow-up:before {
  content: "\e093";
}
.glyphicon-arrow-down:before {
  content: "\e094";
}
.glyphicon-share-alt:before {
  content: "\e095";
}
.glyphicon-resize-full:before {
  content: "\e096";
}
.glyphicon-resize-small:before {
  content: "\e097";
}
.glyphicon-exclamation-sign:before {
  content: "\e101";
}
.glyphicon-gift:before {
  content: "\e102";
}
.glyphicon-leaf:before {
  content: "\e103";
}
.glyphicon-fire:before {
  content: "\e104";
}
.glyphicon-eye-open:before {
  content: "\e105";
}
.glyphicon-eye-close:before {
  content: "\e106";
}
.glyphicon-warning-sign:before {
  content: "\e107";
}
.glyphicon-plane:before {
  content: "\e108";
}
.glyphicon-calendar:before {
  content: "\e109";
}
.glyphicon-random:before {
  content: "\e110";
}
.glyphicon-comment:before {
  content: "\e111";
}
.glyphicon-magnet:before {
  content: "\e112";
}
.glyphicon-chevron-up:before {
  content: "\e113";
}
.glyphicon-chevron-down:before {
  content: "\e114";
}
.glyphicon-retweet:before {
  content: "\e115";
}
.glyphicon-shopping-cart:before {
  content: "\e116";
}
.glyphicon-folder-close:before {
  content: "\e117";
}
.glyphicon-folder-open:before {
  content: "\e118";
}
.glyphicon-resize-vertical:before {
  content: "\e119";
}
.glyphicon-resize-horizontal:before {
  content: "\e120";
}
.glyphicon-hdd:before {
  content: "\e121";
}
.glyphicon-bullhorn:before {
  content: "\e122";
}
.glyphicon-bell:before {
  content: "\e123";
}
.glyphicon-certificate:before {
  content: "\e124";
}
.glyphicon-thumbs-up:before {
  content: "\e125";
}
.glyphicon-thumbs-down:before {
  content: "\e126";
}
.glyphicon-hand-right:before {
  content: "\e127";
}
.glyphicon-hand-left:before {
  content: "\e128";
}
.glyphicon-hand-up:before {
  content: "\e129";
}
.glyphicon-hand-down:before {
  content: "\e130";
}
.glyphicon-circle-arrow-right:before {
  content: "\e131";
}
.glyphicon-circle-arrow-left:before {
  content: "\e132";
}
.glyphicon-circle-arrow-up:before {
  content: "\e133";
}
.glyphicon-circle-arrow-down:before {
  content: "\e134";
}
.glyphicon-globe:before {
  content: "\e135";
}
.glyphicon-wrench:before {
  content: "\e136";
}
.glyphicon-tasks:before {
  content: "\e137";
}
.glyphicon-filter:before {
  content: "\e138";
}
.glyphicon-briefcase:before {
  content: "\e139";
}
.glyphicon-fullscreen:before {
  content: "\e140";
}
.glyphicon-dashboard:before {
  content: "\e141";
}
.glyphicon-paperclip:before {
  content: "\e142";
}
.glyphicon-heart-empty:before {
  content: "\e143";
}
.glyphicon-link:before {
  content: "\e144";
}
.glyphicon-phone:before {
  content: "\e145";
}
.glyphicon-pushpin:before {
  content: "\e146";
}
.glyphicon-usd:before {
  content: "\e148";
}
.glyphicon-gbp:before {
  content: "\e149";
}
.glyphicon-sort:before {
  content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
  content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
  content: "\e152";
}
.glyphicon-sort-by-order:before {
  content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
  content: "\e154";
}
.glyphicon-sort-by-attributes:before {
  content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
  content: "\e156";
}
.glyphicon-unchecked:before {
  content: "\e157";
}
.glyphicon-expand:before {
  content: "\e158";
}
.glyphicon-collapse-down:before {
  content: "\e159";
}
.glyphicon-collapse-up:before {
  content: "\e160";
}
.glyphicon-log-in:before {
  content: "\e161";
}
.glyphicon-flash:before {
  content: "\e162";
}
.glyphicon-log-out:before {
  content: "\e163";
}
.glyphicon-new-window:before {
  content: "\e164";
}
.glyphicon-record:before {
  content: "\e165";
}
.glyphicon-save:before {
  content: "\e166";
}
.glyphicon-open:before {
  content: "\e167";
}
.glyphicon-saved:before {
  content: "\e168";
}
.glyphicon-import:before {
  content: "\e169";
}
.glyphicon-export:before {
  content: "\e170";
}
.glyphicon-send:before {
  content: "\e171";
}
.glyphicon-floppy-disk:before {
  content: "\e172";
}
.glyphicon-floppy-saved:before {
  content: "\e173";
}
.glyphicon-floppy-remove:before {
  content: "\e174";
}
.glyphicon-floppy-save:before {
  content: "\e175";
}
.glyphicon-floppy-open:before {
  content: "\e176";
}
.glyphicon-credit-card:before {
  content: "\e177";
}
.glyphicon-transfer:before {
  content: "\e178";
}
.glyphicon-cutlery:before {
  content: "\e179";
}
.glyphicon-header:before {
  content: "\e180";
}
.glyphicon-compressed:before {
  content: "\e181";
}
.glyphicon-earphone:before {
  content: "\e182";
}
.glyphicon-phone-alt:before {
  content: "\e183";
}
.glyphicon-tower:before {
  content: "\e184";
}
.glyphicon-stats:before {
  content: "\e185";
}
.glyphicon-sd-video:before {
  content: "\e186";
}
.glyphicon-hd-video:before {
  content: "\e187";
}
.glyphicon-subtitles:before {
  content: "\e188";
}
.glyphicon-sound-stereo:before {
  content: "\e189";
}
.glyphicon-sound-dolby:before {
  content: "\e190";
}
.glyphicon-sound-5-1:before {
  content: "\e191";
}
.glyphicon-sound-6-1:before {
  content: "\e192";
}
.glyphicon-sound-7-1:before {
  content: "\e193";
}
.glyphicon-copyright-mark:before {
  content: "\e194";
}
.glyphicon-registration-mark:before {
  content: "\e195";
}
.glyphicon-cloud-download:before {
  content: "\e197";
}
.glyphicon-cloud-upload:before {
  content: "\e198";
}
.glyphicon-tree-conifer:before {
  content: "\e199";
}
.glyphicon-tree-deciduous:before {
  content: "\e200";
}
.glyphicon-cd:before {
  content: "\e201";
}
.glyphicon-save-file:before {
  content: "\e202";
}
.glyphicon-open-file:before {
  content: "\e203";
}
.glyphicon-level-up:before {
  content: "\e204";
}
.glyphicon-copy:before {
  content: "\e205";
}
.glyphicon-paste:before {
  content: "\e206";
}
.glyphicon-alert:before {
  content: "\e209";
}
.glyphicon-equalizer:before {
  content: "\e210";
}
.glyphicon-king:before {
  content: "\e211";
}
.glyphicon-queen:before {
  content: "\e212";
}
.glyphicon-pawn:before {
  content: "\e213";
}
.glyphicon-bishop:before {
  content: "\e214";
}
.glyphicon-knight:before {
  content: "\e215";
}
.glyphicon-baby-formula:before {
  content: "\e216";
}
.glyphicon-tent:before {
  content: "\26fa";
}
.glyphicon-blackboard:before {
  content: "\e218";
}
.glyphicon-bed:before {
  content: "\e219";
}
.glyphicon-apple:before {
  content: "\f8ff";
}
.glyphicon-erase:before {
  content: "\e221";
}
.glyphicon-hourglass:before {
  content: "\231b";
}
.glyphicon-lamp:before {
  content: "\e223";
}
.glyphicon-duplicate:before {
  content: "\e224";
}
.glyphicon-piggy-bank:before {
  content: "\e225";
}
.glyphicon-scissors:before {
  content: "\e226";
}
.glyphicon-bitcoin:before {
  content: "\e227";
}
.glyphicon-btc:before {
  content: "\e227";
}
.glyphicon-xbt:before {
  content: "\e227";
}
.glyphicon-yen:before {
  content: "\00a5";
}
.glyphicon-jpy:before {
  content: "\00a5";
}
.glyphicon-ruble:before {
  content: "\20bd";
}
.glyphicon-rub:before {
  content: "\20bd";
}
.glyphicon-scale:before {
  content: "\e230";
}
.glyphicon-ice-lolly:before {
  content: "\e231";
}
.glyphicon-ice-lolly-tasted:before {
  content: "\e232";
}
.glyphicon-education:before {
  content: "\e233";
}
.glyphicon-option-horizontal:before {
  content: "\e234";
}
.glyphicon-option-vertical:before {
  content: "\e235";
}
.glyphicon-menu-hamburger:before {
  content: "\e236";
}
.glyphicon-modal-window:before {
  content: "\e237";
}
.glyphicon-oil:before {
  content: "\e238";
}
.glyphicon-grain:before {
  content: "\e239";
}
.glyphicon-sunglasses:before {
  content: "\e240";
}
.glyphicon-text-size:before {
  content: "\e241";
}
.glyphicon-text-color:before {
  content: "\e242";
}
.glyphicon-text-background:before {
  content: "\e243";
}
.glyphicon-object-align-top:before {
  content: "\e244";
}
.glyphicon-object-align-bottom:before {
  content: "\e245";
}
.glyphicon-object-align-horizontal:before {
  content: "\e246";
}
.glyphicon-object-align-left:before {
  content: "\e247";
}
.glyphicon-object-align-vertical:before {
  content: "\e248";
}
.glyphicon-object-align-right:before {
  content: "\e249";
}
.glyphicon-triangle-right:before {
  content: "\e250";
}
.glyphicon-triangle-left:before {
  content: "\e251";
}
.glyphicon-triangle-bottom:before {
  content: "\e252";
}
.glyphicon-triangle-top:before {
  content: "\e253";
}
.glyphicon-console:before {
  content: "\e254";
}
.glyphicon-superscript:before {
  content: "\e255";
}
.glyphicon-subscript:before {
  content: "\e256";
}
.glyphicon-menu-left:before {
  content: "\e257";
}
.glyphicon-menu-right:before {
  content: "\e258";
}
.glyphicon-menu-down:before {
  content: "\e259";
}
.glyphicon-menu-up:before {
  content: "\e260";
}
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
html {
  font-size: 10px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 13px;
  line-height: 1.42857143;
  color: #000;
  background-color: #fff;
}
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
a {
  color: #337ab7;
  text-decoration: none;
}
a:hover,
a:focus {
  color: #23527c;
  text-decoration: underline;
}
a:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
figure {
  margin: 0;
}
img {
  vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  display: block;
  max-width: 100%;
  height: auto;
}
.img-rounded {
  border-radius: 3px;
}
.img-thumbnail {
  padding: 4px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: all 0.2s ease-in-out;
  -o-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: inline-block;
  max-width: 100%;
  height: auto;
}
.img-circle {
  border-radius: 50%;
}
hr {
  margin-top: 18px;
  margin-bottom: 18px;
  border: 0;
  border-top: 1px solid #eeeeee;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
[role="button"] {
  cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  font-family: inherit;
  font-weight: 500;
  line-height: 1.1;
  color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
  font-weight: normal;
  line-height: 1;
  color: #777777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
  margin-top: 18px;
  margin-bottom: 9px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
  font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  margin-top: 9px;
  margin-bottom: 9px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
  font-size: 75%;
}
h1,
.h1 {
  font-size: 33px;
}
h2,
.h2 {
  font-size: 27px;
}
h3,
.h3 {
  font-size: 23px;
}
h4,
.h4 {
  font-size: 17px;
}
h5,
.h5 {
  font-size: 13px;
}
h6,
.h6 {
  font-size: 12px;
}
p {
  margin: 0 0 9px;
}
.lead {
  margin-bottom: 18px;
  font-size: 14px;
  font-weight: 300;
  line-height: 1.4;
}
@media (min-width: 768px) {
  .lead {
    font-size: 19.5px;
  }
}
small,
.small {
  font-size: 92%;
}
mark,
.mark {
  background-color: #fcf8e3;
  padding: .2em;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-justify {
  text-align: justify;
}
.text-nowrap {
  white-space: nowrap;
}
.text-lowercase {
  text-transform: lowercase;
}
.text-uppercase {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-muted {
  color: #777777;
}
.text-primary {
  color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
  color: #286090;
}
.text-success {
  color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
  color: #2b542c;
}
.text-info {
  color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
  color: #245269;
}
.text-warning {
  color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
  color: #66512c;
}
.text-danger {
  color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
  color: #843534;
}
.bg-primary {
  color: #fff;
  background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
  background-color: #286090;
}
.bg-success {
  background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
  background-color: #c1e2b3;
}
.bg-info {
  background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
  background-color: #afd9ee;
}
.bg-warning {
  background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
  background-color: #f7ecb5;
}
.bg-danger {
  background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
  background-color: #e4b9b9;
}
.page-header {
  padding-bottom: 8px;
  margin: 36px 0 18px;
  border-bottom: 1px solid #eeeeee;
}
ul,
ol {
  margin-top: 0;
  margin-bottom: 9px;
}
ul ul,
ol ul,
ul ol,
ol ol {
  margin-bottom: 0;
}
.list-unstyled {
  padding-left: 0;
  list-style: none;
}
.list-inline {
  padding-left: 0;
  list-style: none;
  margin-left: -5px;
}
.list-inline > li {
  display: inline-block;
  padding-left: 5px;
  padding-right: 5px;
}
dl {
  margin-top: 0;
  margin-bottom: 18px;
}
dt,
dd {
  line-height: 1.42857143;
}
dt {
  font-weight: bold;
}
dd {
  margin-left: 0;
}
@media (min-width: 541px) {
  .dl-horizontal dt {
    float: left;
    width: 160px;
    clear: left;
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .dl-horizontal dd {
    margin-left: 180px;
  }
}
abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #777777;
}
.initialism {
  font-size: 90%;
  text-transform: uppercase;
}
blockquote {
  padding: 9px 18px;
  margin: 0 0 18px;
  font-size: inherit;
  border-left: 5px solid #eeeeee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
  margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
  display: block;
  font-size: 80%;
  line-height: 1.42857143;
  color: #777777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
  content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #eeeeee;
  border-left: 0;
  text-align: right;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
  content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
  content: '\00A0 \2014';
}
address {
  margin-bottom: 18px;
  font-style: normal;
  line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
  font-family: monospace;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  background-color: #f9f2f4;
  border-radius: 2px;
}
kbd {
  padding: 2px 4px;
  font-size: 90%;
  color: #888;
  background-color: transparent;
  border-radius: 1px;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
  padding: 0;
  font-size: 100%;
  font-weight: bold;
  box-shadow: none;
}
pre {
  display: block;
  padding: 8.5px;
  margin: 0 0 9px;
  font-size: 12px;
  line-height: 1.42857143;
  word-break: break-all;
  word-wrap: break-word;
  color: #333333;
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border-radius: 2px;
}
pre code {
  padding: 0;
  font-size: inherit;
  color: inherit;
  white-space: pre-wrap;
  background-color: transparent;
  border-radius: 0;
}
.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}
.container {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
@media (min-width: 768px) {
  .container {
    width: 768px;
  }
}
@media (min-width: 992px) {
  .container {
    width: 940px;
  }
}
@media (min-width: 1200px) {
  .container {
    width: 1140px;
  }
}
.container-fluid {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
.row {
  margin-left: 0px;
  margin-right: 0px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-left: 0px;
  padding-right: 0px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
  float: left;
}
.col-xs-12 {
  width: 100%;
}
.col-xs-11 {
  width: 91.66666667%;
}
.col-xs-10 {
  width: 83.33333333%;
}
.col-xs-9 {
  width: 75%;
}
.col-xs-8 {
  width: 66.66666667%;
}
.col-xs-7 {
  width: 58.33333333%;
}
.col-xs-6 {
  width: 50%;
}
.col-xs-5 {
  width: 41.66666667%;
}
.col-xs-4 {
  width: 33.33333333%;
}
.col-xs-3 {
  width: 25%;
}
.col-xs-2 {
  width: 16.66666667%;
}
.col-xs-1 {
  width: 8.33333333%;
}
.col-xs-pull-12 {
  right: 100%;
}
.col-xs-pull-11 {
  right: 91.66666667%;
}
.col-xs-pull-10 {
  right: 83.33333333%;
}
.col-xs-pull-9 {
  right: 75%;
}
.col-xs-pull-8 {
  right: 66.66666667%;
}
.col-xs-pull-7 {
  right: 58.33333333%;
}
.col-xs-pull-6 {
  right: 50%;
}
.col-xs-pull-5 {
  right: 41.66666667%;
}
.col-xs-pull-4 {
  right: 33.33333333%;
}
.col-xs-pull-3 {
  right: 25%;
}
.col-xs-pull-2 {
  right: 16.66666667%;
}
.col-xs-pull-1 {
  right: 8.33333333%;
}
.col-xs-pull-0 {
  right: auto;
}
.col-xs-push-12 {
  left: 100%;
}
.col-xs-push-11 {
  left: 91.66666667%;
}
.col-xs-push-10 {
  left: 83.33333333%;
}
.col-xs-push-9 {
  left: 75%;
}
.col-xs-push-8 {
  left: 66.66666667%;
}
.col-xs-push-7 {
  left: 58.33333333%;
}
.col-xs-push-6 {
  left: 50%;
}
.col-xs-push-5 {
  left: 41.66666667%;
}
.col-xs-push-4 {
  left: 33.33333333%;
}
.col-xs-push-3 {
  left: 25%;
}
.col-xs-push-2 {
  left: 16.66666667%;
}
.col-xs-push-1 {
  left: 8.33333333%;
}
.col-xs-push-0 {
  left: auto;
}
.col-xs-offset-12 {
  margin-left: 100%;
}
.col-xs-offset-11 {
  margin-left: 91.66666667%;
}
.col-xs-offset-10 {
  margin-left: 83.33333333%;
}
.col-xs-offset-9 {
  margin-left: 75%;
}
.col-xs-offset-8 {
  margin-left: 66.66666667%;
}
.col-xs-offset-7 {
  margin-left: 58.33333333%;
}
.col-xs-offset-6 {
  margin-left: 50%;
}
.col-xs-offset-5 {
  margin-left: 41.66666667%;
}
.col-xs-offset-4 {
  margin-left: 33.33333333%;
}
.col-xs-offset-3 {
  margin-left: 25%;
}
.col-xs-offset-2 {
  margin-left: 16.66666667%;
}
.col-xs-offset-1 {
  margin-left: 8.33333333%;
}
.col-xs-offset-0 {
  margin-left: 0%;
}
@media (min-width: 768px) {
  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
    float: left;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-11 {
    width: 91.66666667%;
  }
  .col-sm-10 {
    width: 83.33333333%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-8 {
    width: 66.66666667%;
  }
  .col-sm-7 {
    width: 58.33333333%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-5 {
    width: 41.66666667%;
  }
  .col-sm-4 {
    width: 33.33333333%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-2 {
    width: 16.66666667%;
  }
  .col-sm-1 {
    width: 8.33333333%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-pull-11 {
    right: 91.66666667%;
  }
  .col-sm-pull-10 {
    right: 83.33333333%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-8 {
    right: 66.66666667%;
  }
  .col-sm-pull-7 {
    right: 58.33333333%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-5 {
    right: 41.66666667%;
  }
  .col-sm-pull-4 {
    right: 33.33333333%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-2 {
    right: 16.66666667%;
  }
  .col-sm-pull-1 {
    right: 8.33333333%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-push-11 {
    left: 91.66666667%;
  }
  .col-sm-push-10 {
    left: 83.33333333%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-8 {
    left: 66.66666667%;
  }
  .col-sm-push-7 {
    left: 58.33333333%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-5 {
    left: 41.66666667%;
  }
  .col-sm-push-4 {
    left: 33.33333333%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-2 {
    left: 16.66666667%;
  }
  .col-sm-push-1 {
    left: 8.33333333%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-sm-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 992px) {
  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
    float: left;
  }
  .col-md-12 {
    width: 100%;
  }
  .col-md-11 {
    width: 91.66666667%;
  }
  .col-md-10 {
    width: 83.33333333%;
  }
  .col-md-9 {
    width: 75%;
  }
  .col-md-8 {
    width: 66.66666667%;
  }
  .col-md-7 {
    width: 58.33333333%;
  }
  .col-md-6 {
    width: 50%;
  }
  .col-md-5 {
    width: 41.66666667%;
  }
  .col-md-4 {
    width: 33.33333333%;
  }
  .col-md-3 {
    width: 25%;
  }
  .col-md-2 {
    width: 16.66666667%;
  }
  .col-md-1 {
    width: 8.33333333%;
  }
  .col-md-pull-12 {
    right: 100%;
  }
  .col-md-pull-11 {
    right: 91.66666667%;
  }
  .col-md-pull-10 {
    right: 83.33333333%;
  }
  .col-md-pull-9 {
    right: 75%;
  }
  .col-md-pull-8 {
    right: 66.66666667%;
  }
  .col-md-pull-7 {
    right: 58.33333333%;
  }
  .col-md-pull-6 {
    right: 50%;
  }
  .col-md-pull-5 {
    right: 41.66666667%;
  }
  .col-md-pull-4 {
    right: 33.33333333%;
  }
  .col-md-pull-3 {
    right: 25%;
  }
  .col-md-pull-2 {
    right: 16.66666667%;
  }
  .col-md-pull-1 {
    right: 8.33333333%;
  }
  .col-md-pull-0 {
    right: auto;
  }
  .col-md-push-12 {
    left: 100%;
  }
  .col-md-push-11 {
    left: 91.66666667%;
  }
  .col-md-push-10 {
    left: 83.33333333%;
  }
  .col-md-push-9 {
    left: 75%;
  }
  .col-md-push-8 {
    left: 66.66666667%;
  }
  .col-md-push-7 {
    left: 58.33333333%;
  }
  .col-md-push-6 {
    left: 50%;
  }
  .col-md-push-5 {
    left: 41.66666667%;
  }
  .col-md-push-4 {
    left: 33.33333333%;
  }
  .col-md-push-3 {
    left: 25%;
  }
  .col-md-push-2 {
    left: 16.66666667%;
  }
  .col-md-push-1 {
    left: 8.33333333%;
  }
  .col-md-push-0 {
    left: auto;
  }
  .col-md-offset-12 {
    margin-left: 100%;
  }
  .col-md-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-md-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-md-offset-9 {
    margin-left: 75%;
  }
  .col-md-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-md-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-md-offset-6 {
    margin-left: 50%;
  }
  .col-md-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-md-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-md-offset-3 {
    margin-left: 25%;
  }
  .col-md-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-md-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-md-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 1200px) {
  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
    float: left;
  }
  .col-lg-12 {
    width: 100%;
  }
  .col-lg-11 {
    width: 91.66666667%;
  }
  .col-lg-10 {
    width: 83.33333333%;
  }
  .col-lg-9 {
    width: 75%;
  }
  .col-lg-8 {
    width: 66.66666667%;
  }
  .col-lg-7 {
    width: 58.33333333%;
  }
  .col-lg-6 {
    width: 50%;
  }
  .col-lg-5 {
    width: 41.66666667%;
  }
  .col-lg-4 {
    width: 33.33333333%;
  }
  .col-lg-3 {
    width: 25%;
  }
  .col-lg-2 {
    width: 16.66666667%;
  }
  .col-lg-1 {
    width: 8.33333333%;
  }
  .col-lg-pull-12 {
    right: 100%;
  }
  .col-lg-pull-11 {
    right: 91.66666667%;
  }
  .col-lg-pull-10 {
    right: 83.33333333%;
  }
  .col-lg-pull-9 {
    right: 75%;
  }
  .col-lg-pull-8 {
    right: 66.66666667%;
  }
  .col-lg-pull-7 {
    right: 58.33333333%;
  }
  .col-lg-pull-6 {
    right: 50%;
  }
  .col-lg-pull-5 {
    right: 41.66666667%;
  }
  .col-lg-pull-4 {
    right: 33.33333333%;
  }
  .col-lg-pull-3 {
    right: 25%;
  }
  .col-lg-pull-2 {
    right: 16.66666667%;
  }
  .col-lg-pull-1 {
    right: 8.33333333%;
  }
  .col-lg-pull-0 {
    right: auto;
  }
  .col-lg-push-12 {
    left: 100%;
  }
  .col-lg-push-11 {
    left: 91.66666667%;
  }
  .col-lg-push-10 {
    left: 83.33333333%;
  }
  .col-lg-push-9 {
    left: 75%;
  }
  .col-lg-push-8 {
    left: 66.66666667%;
  }
  .col-lg-push-7 {
    left: 58.33333333%;
  }
  .col-lg-push-6 {
    left: 50%;
  }
  .col-lg-push-5 {
    left: 41.66666667%;
  }
  .col-lg-push-4 {
    left: 33.33333333%;
  }
  .col-lg-push-3 {
    left: 25%;
  }
  .col-lg-push-2 {
    left: 16.66666667%;
  }
  .col-lg-push-1 {
    left: 8.33333333%;
  }
  .col-lg-push-0 {
    left: auto;
  }
  .col-lg-offset-12 {
    margin-left: 100%;
  }
  .col-lg-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-lg-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-lg-offset-9 {
    margin-left: 75%;
  }
  .col-lg-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-lg-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-lg-offset-6 {
    margin-left: 50%;
  }
  .col-lg-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-lg-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-lg-offset-3 {
    margin-left: 25%;
  }
  .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-lg-offset-0 {
    margin-left: 0%;
  }
}
table {
  background-color: transparent;
}
caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #777777;
  text-align: left;
}
th {
  text-align: left;
}
.table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 18px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ddd;
}
.table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
  border-top: 0;
}
.table > tbody + tbody {
  border-top: 2px solid #ddd;
}
.table .table {
  background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
  padding: 5px;
}
.table-bordered {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
  border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
  background-color: #f5f5f5;
}
table col[class*="col-"] {
  position: static;
  float: none;
  display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
  position: static;
  float: none;
  display: table-cell;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
  background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
  background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
  background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
  background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
  background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
  background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
  background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
  background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
  background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
  background-color: #ebcccc;
}
.table-responsive {
  overflow-x: auto;
  min-height: 0.01%;
}
@media screen and (max-width: 767px) {
  .table-responsive {
    width: 100%;
    margin-bottom: 13.5px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ddd;
  }
  .table-responsive > .table {
    margin-bottom: 0;
  }
  .table-responsive > .table > thead > tr > th,
  .table-responsive > .table > tbody > tr > th,
  .table-responsive > .table > tfoot > tr > th,
  .table-responsive > .table > thead > tr > td,
  .table-responsive > .table > tbody > tr > td,
  .table-responsive > .table > tfoot > tr > td {
    white-space: nowrap;
  }
  .table-responsive > .table-bordered {
    border: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:first-child,
  .table-responsive > .table-bordered > tbody > tr > th:first-child,
  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  .table-responsive > .table-bordered > thead > tr > td:first-child,
  .table-responsive > .table-bordered > tbody > tr > td:first-child,
  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
    border-left: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:last-child,
  .table-responsive > .table-bordered > tbody > tr > th:last-child,
  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  .table-responsive > .table-bordered > thead > tr > td:last-child,
  .table-responsive > .table-bordered > tbody > tr > td:last-child,
  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
    border-right: 0;
  }
  .table-responsive > .table-bordered > tbody > tr:last-child > th,
  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
  .table-responsive > .table-bordered > tbody > tr:last-child > td,
  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
    border-bottom: 0;
  }
}
fieldset {
  padding: 0;
  margin: 0;
  border: 0;
  min-width: 0;
}
legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 18px;
  font-size: 19.5px;
  line-height: inherit;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}
label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
input[type="search"] {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
input[type="file"] {
  display: block;
}
input[type="range"] {
  display: block;
  width: 100%;
}
select[multiple],
select[size] {
  height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
output {
  display: block;
  padding-top: 7px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
}
.form-control {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.form-control:-ms-input-placeholder {
  color: #999;
}
.form-control::-webkit-input-placeholder {
  color: #999;
}
.form-control::-ms-expand {
  border: 0;
  background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
  background-color: #eeeeee;
  opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
  cursor: not-allowed;
}
textarea.form-control {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  input[type="date"].form-control,
  input[type="time"].form-control,
  input[type="datetime-local"].form-control,
  input[type="month"].form-control {
    line-height: 32px;
  }
  input[type="date"].input-sm,
  input[type="time"].input-sm,
  input[type="datetime-local"].input-sm,
  input[type="month"].input-sm,
  .input-group-sm input[type="date"],
  .input-group-sm input[type="time"],
  .input-group-sm input[type="datetime-local"],
  .input-group-sm input[type="month"] {
    line-height: 30px;
  }
  input[type="date"].input-lg,
  input[type="time"].input-lg,
  input[type="datetime-local"].input-lg,
  input[type="month"].input-lg,
  .input-group-lg input[type="date"],
  .input-group-lg input[type="time"],
  .input-group-lg input[type="datetime-local"],
  .input-group-lg input[type="month"] {
    line-height: 45px;
  }
}
.form-group {
  margin-bottom: 15px;
}
.radio,
.checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
.radio label,
.checkbox label {
  min-height: 18px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-left: -20px;
  margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
  margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  vertical-align: middle;
  font-weight: normal;
  cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"].disabled,
input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"] {
  cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
  cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
  cursor: not-allowed;
}
.form-control-static {
  padding-top: 7px;
  padding-bottom: 7px;
  margin-bottom: 0;
  min-height: 31px;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
  padding-left: 0;
  padding-right: 0;
}
.input-sm {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-sm {
  height: 30px;
  line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
  height: auto;
}
.form-group-sm .form-control {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.form-group-sm select.form-control {
  height: 30px;
  line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
  height: auto;
}
.form-group-sm .form-control-static {
  height: 30px;
  min-height: 30px;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.input-lg {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-lg {
  height: 45px;
  line-height: 45px;
}
textarea.input-lg,
select[multiple].input-lg {
  height: auto;
}
.form-group-lg .form-control {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.form-group-lg select.form-control {
  height: 45px;
  line-height: 45px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
  height: auto;
}
.form-group-lg .form-control-static {
  height: 45px;
  min-height: 35px;
  padding: 11px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.has-feedback {
  position: relative;
}
.has-feedback .form-control {
  padding-right: 40px;
}
.form-control-feedback {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: block;
  width: 32px;
  height: 32px;
  line-height: 32px;
  text-align: center;
  pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
  width: 45px;
  height: 45px;
  line-height: 45px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
  width: 30px;
  height: 30px;
  line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
  color: #3c763d;
}
.has-success .form-control {
  border-color: #3c763d;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
  border-color: #2b542c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
  color: #3c763d;
  border-color: #3c763d;
  background-color: #dff0d8;
}
.has-success .form-control-feedback {
  color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
  color: #8a6d3b;
}
.has-warning .form-control {
  border-color: #8a6d3b;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
  border-color: #66512c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
  color: #8a6d3b;
  border-color: #8a6d3b;
  background-color: #fcf8e3;
}
.has-warning .form-control-feedback {
  color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
  color: #a94442;
}
.has-error .form-control {
  border-color: #a94442;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
  border-color: #843534;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
  color: #a94442;
  border-color: #a94442;
  background-color: #f2dede;
}
.has-error .form-control-feedback {
  color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
  top: 23px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
.help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #404040;
}
@media (min-width: 768px) {
  .form-inline .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .form-inline .form-control-static {
    display: inline-block;
  }
  .form-inline .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .form-inline .input-group .input-group-addon,
  .form-inline .input-group .input-group-btn,
  .form-inline .input-group .form-control {
    width: auto;
  }
  .form-inline .input-group > .form-control {
    width: 100%;
  }
  .form-inline .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio,
  .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio label,
  .form-inline .checkbox label {
    padding-left: 0;
  }
  .form-inline .radio input[type="radio"],
  .form-inline .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
  min-height: 25px;
}
.form-horizontal .form-group {
  margin-left: 0px;
  margin-right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .control-label {
    text-align: right;
    margin-bottom: 0;
    padding-top: 7px;
  }
}
.form-horizontal .has-feedback .form-control-feedback {
  right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .form-group-lg .control-label {
    padding-top: 11px;
    font-size: 17px;
  }
}
@media (min-width: 768px) {
  .form-horizontal .form-group-sm .control-label {
    padding-top: 6px;
    font-size: 12px;
  }
}
.btn {
  display: inline-block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  touch-action: manipulation;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  white-space: nowrap;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  border-radius: 2px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
  color: #333;
  text-decoration: none;
}
.btn:active,
.btn.active {
  outline: 0;
  background-image: none;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  cursor: not-allowed;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
  box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
  pointer-events: none;
}
.btn-default {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.btn-default:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open > .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open > .dropdown-toggle.btn-default.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
  background-color: #fff;
  border-color: #ccc;
}
.btn-default .badge {
  color: #fff;
  background-color: #333;
}
.btn-primary {
  color: #fff;
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
  color: #fff;
  background-color: #286090;
  border-color: #122b40;
}
.btn-primary:hover {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open > .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open > .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open > .dropdown-toggle.btn-primary.focus {
  color: #fff;
  background-color: #204d74;
  border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary .badge {
  color: #337ab7;
  background-color: #fff;
}
.btn-success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.btn-success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open > .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open > .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open > .dropdown-toggle.btn-success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.btn-info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.btn-info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open > .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open > .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open > .dropdown-toggle.btn-info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.btn-warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning:focus,
.btn-warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.btn-warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active:hover,
.btn-warning.active:hover,
.open > .dropdown-toggle.btn-warning:hover,
.btn-warning:active:focus,
.btn-warning.active:focus,
.open > .dropdown-toggle.btn-warning:focus,
.btn-warning:active.focus,
.btn-warning.active.focus,
.open > .dropdown-toggle.btn-warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.btn-danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger:focus,
.btn-danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.btn-danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active:hover,
.btn-danger.active:hover,
.open > .dropdown-toggle.btn-danger:hover,
.btn-danger:active:focus,
.btn-danger.active:focus,
.open > .dropdown-toggle.btn-danger:focus,
.btn-danger:active.focus,
.btn-danger.active.focus,
.open > .dropdown-toggle.btn-danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger .badge {
  color: #d9534f;
  background-color: #fff;
}
.btn-link {
  color: #337ab7;
  font-weight: normal;
  border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
  background-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
  border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
  color: #23527c;
  text-decoration: underline;
  background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
  color: #777777;
  text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.btn-sm,
.btn-group-sm > .btn {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-xs,
.btn-group-xs > .btn {
  padding: 1px 5px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-block {
  display: block;
  width: 100%;
}
.btn-block + .btn-block {
  margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
  width: 100%;
}
.fade {
  opacity: 0;
  -webkit-transition: opacity 0.15s linear;
  -o-transition: opacity 0.15s linear;
  transition: opacity 0.15s linear;
}
.fade.in {
  opacity: 1;
}
.collapse {
  display: none;
}
.collapse.in {
  display: block;
}
tr.collapse.in {
  display: table-row;
}
tbody.collapse.in {
  display: table-row-group;
}
.collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -webkit-transition-duration: 0.35s;
  transition-duration: 0.35s;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}
.caret {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 2px;
  vertical-align: middle;
  border-top: 4px dashed;
  border-top: 4px solid \9;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}
.dropup,
.dropdown {
  position: relative;
}
.dropdown-toggle:focus {
  outline: 0;
}
.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  font-size: 13px;
  text-align: left;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.15);
  border-radius: 2px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  background-clip: padding-box;
}
.dropdown-menu.pull-right {
  right: 0;
  left: auto;
}
.dropdown-menu .divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.dropdown-menu > li > a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 1.42857143;
  color: #333333;
  white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  text-decoration: none;
  color: #262626;
  background-color: #f5f5f5;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
  color: #fff;
  text-decoration: none;
  outline: 0;
  background-color: #337ab7;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  color: #777777;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  text-decoration: none;
  background-color: transparent;
  background-image: none;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  cursor: not-allowed;
}
.open > .dropdown-menu {
  display: block;
}
.open > a {
  outline: 0;
}
.dropdown-menu-right {
  left: auto;
  right: 0;
}
.dropdown-menu-left {
  left: 0;
  right: auto;
}
.dropdown-header {
  display: block;
  padding: 3px 20px;
  font-size: 12px;
  line-height: 1.42857143;
  color: #777777;
  white-space: nowrap;
}
.dropdown-backdrop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  z-index: 990;
}
.pull-right > .dropdown-menu {
  right: 0;
  left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
  border-top: 0;
  border-bottom: 4px dashed;
  border-bottom: 4px solid \9;
  content: "";
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
  top: auto;
  bottom: 100%;
  margin-bottom: 2px;
}
@media (min-width: 541px) {
  .navbar-right .dropdown-menu {
    left: auto;
    right: 0;
  }
  .navbar-right .dropdown-menu-left {
    left: 0;
    right: auto;
  }
}
.btn-group,
.btn-group-vertical {
  position: relative;
  display: inline-block;
  vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
  position: relative;
  float: left;
}
.btn-group > .btn:hover,
.btn-group-vertical > .btn:hover,
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus,
.btn-group > .btn:active,
.btn-group-vertical > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn.active {
  z-index: 2;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
  margin-left: -1px;
}
.btn-toolbar {
  margin-left: -5px;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
  float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
  margin-left: 5px;
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: 0;
}
.btn-group > .btn:first-child {
  margin-left: 0;
}
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group > .btn-group {
  float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
  outline: 0;
}
.btn-group > .btn + .dropdown-toggle {
  padding-left: 8px;
  padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
  padding-left: 12px;
  padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn .caret {
  margin-left: 0;
}
.btn-lg .caret {
  border-width: 5px 5px 0;
  border-bottom-width: 0;
}
.dropup .btn-lg .caret {
  border-width: 0 5px 5px;
}
.btn-group-vertical > .btn,
.btn-group-vertical > .btn-group,
.btn-group-vertical > .btn-group > .btn {
  display: block;
  float: none;
  width: 100%;
  max-width: 100%;
}
.btn-group-vertical > .btn-group > .btn {
  float: none;
}
.btn-group-vertical > .btn + .btn,
.btn-group-vertical > .btn + .btn-group,
.btn-group-vertical > .btn-group + .btn,
.btn-group-vertical > .btn-group + .btn-group {
  margin-top: -1px;
  margin-left: 0;
}
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.btn-group-vertical > .btn:first-child:not(:last-child) {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:last-child:not(:first-child) {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.btn-group-justified {
  display: table;
  width: 100%;
  table-layout: fixed;
  border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
  float: none;
  display: table-cell;
  width: 1%;
}
.btn-group-justified > .btn-group .btn {
  width: 100%;
}
.btn-group-justified > .btn-group .dropdown-menu {
  left: auto;
}
[data-toggle="buttons"] > .btn input[type="radio"],
[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
[data-toggle="buttons"] > .btn input[type="checkbox"],
[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
  pointer-events: none;
}
.input-group {
  position: relative;
  display: table;
  border-collapse: separate;
}
.input-group[class*="col-"] {
  float: none;
  padding-left: 0;
  padding-right: 0;
}
.input-group .form-control {
  position: relative;
  z-index: 2;
  float: left;
  width: 100%;
  margin-bottom: 0;
}
.input-group .form-control:focus {
  z-index: 3;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  line-height: 45px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
  height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  line-height: 30px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
  height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
  display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.input-group-addon,
.input-group-btn {
  width: 1%;
  white-space: nowrap;
  vertical-align: middle;
}
.input-group-addon {
  padding: 6px 12px;
  font-size: 13px;
  font-weight: normal;
  line-height: 1;
  color: #555555;
  text-align: center;
  background-color: #eeeeee;
  border: 1px solid #ccc;
  border-radius: 2px;
}
.input-group-addon.input-sm {
  padding: 5px 10px;
  font-size: 12px;
  border-radius: 1px;
}
.input-group-addon.input-lg {
  padding: 10px 16px;
  font-size: 17px;
  border-radius: 3px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
  margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.input-group-addon:first-child {
  border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.input-group-addon:last-child {
  border-left: 0;
}
.input-group-btn {
  position: relative;
  font-size: 0;
  white-space: nowrap;
}
.input-group-btn > .btn {
  position: relative;
}
.input-group-btn > .btn + .btn {
  margin-left: -1px;
}
.input-group-btn > .btn:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
  z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
  margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
  z-index: 2;
  margin-left: -1px;
}
.nav {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
.nav > li {
  position: relative;
  display: block;
}
.nav > li > a {
  position: relative;
  display: block;
  padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.nav > li.disabled > a {
  color: #777777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
  color: #777777;
  text-decoration: none;
  background-color: transparent;
  cursor: not-allowed;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #eeeeee;
  border-color: #337ab7;
}
.nav .nav-divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.nav > li > a > img {
  max-width: none;
}
.nav-tabs {
  border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
  float: left;
  margin-bottom: -1px;
}
.nav-tabs > li > a {
  margin-right: 2px;
  line-height: 1.42857143;
  border: 1px solid transparent;
  border-radius: 2px 2px 0 0;
}
.nav-tabs > li > a:hover {
  border-color: #eeeeee #eeeeee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
  color: #555555;
  background-color: #fff;
  border: 1px solid #ddd;
  border-bottom-color: transparent;
  cursor: default;
}
.nav-tabs.nav-justified {
  width: 100%;
  border-bottom: 0;
}
.nav-tabs.nav-justified > li {
  float: none;
}
.nav-tabs.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-tabs.nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs.nav-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs.nav-justified > .active > a,
  .nav-tabs.nav-justified > .active > a:hover,
  .nav-tabs.nav-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.nav-pills > li {
  float: left;
}
.nav-pills > li > a {
  border-radius: 2px;
}
.nav-pills > li + li {
  margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
  color: #fff;
  background-color: #337ab7;
}
.nav-stacked > li {
  float: none;
}
.nav-stacked > li + li {
  margin-top: 2px;
  margin-left: 0;
}
.nav-justified {
  width: 100%;
}
.nav-justified > li {
  float: none;
}
.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs-justified {
  border-bottom: 0;
}
.nav-tabs-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs-justified > .active > a,
  .nav-tabs-justified > .active > a:hover,
  .nav-tabs-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.tab-content > .tab-pane {
  display: none;
}
.tab-content > .active {
  display: block;
}
.nav-tabs .dropdown-menu {
  margin-top: -1px;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar {
  position: relative;
  min-height: 30px;
  margin-bottom: 18px;
  border: 1px solid transparent;
}
@media (min-width: 541px) {
  .navbar {
    border-radius: 2px;
  }
}
@media (min-width: 541px) {
  .navbar-header {
    float: left;
  }
}
.navbar-collapse {
  overflow-x: visible;
  padding-right: 0px;
  padding-left: 0px;
  border-top: 1px solid transparent;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  -webkit-overflow-scrolling: touch;
}
.navbar-collapse.in {
  overflow-y: auto;
}
@media (min-width: 541px) {
  .navbar-collapse {
    width: auto;
    border-top: 0;
    box-shadow: none;
  }
  .navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
  }
  .navbar-collapse.in {
    overflow-y: visible;
  }
  .navbar-fixed-top .navbar-collapse,
  .navbar-static-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    padding-left: 0;
    padding-right: 0;
  }
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
  max-height: 340px;
}
@media (max-device-width: 540px) and (orientation: landscape) {
  .navbar-fixed-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    max-height: 200px;
  }
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
  margin-right: 0px;
  margin-left: 0px;
}
@media (min-width: 541px) {
  .container > .navbar-header,
  .container-fluid > .navbar-header,
  .container > .navbar-collapse,
  .container-fluid > .navbar-collapse {
    margin-right: 0;
    margin-left: 0;
  }
}
.navbar-static-top {
  z-index: 1000;
  border-width: 0 0 1px;
}
@media (min-width: 541px) {
  .navbar-static-top {
    border-radius: 0;
  }
}
.navbar-fixed-top,
.navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
}
@media (min-width: 541px) {
  .navbar-fixed-top,
  .navbar-fixed-bottom {
    border-radius: 0;
  }
}
.navbar-fixed-top {
  top: 0;
  border-width: 0 0 1px;
}
.navbar-fixed-bottom {
  bottom: 0;
  margin-bottom: 0;
  border-width: 1px 0 0;
}
.navbar-brand {
  float: left;
  padding: 6px 0px;
  font-size: 17px;
  line-height: 18px;
  height: 30px;
}
.navbar-brand:hover,
.navbar-brand:focus {
  text-decoration: none;
}
.navbar-brand > img {
  display: block;
}
@media (min-width: 541px) {
  .navbar > .container .navbar-brand,
  .navbar > .container-fluid .navbar-brand {
    margin-left: 0px;
  }
}
.navbar-toggle {
  position: relative;
  float: right;
  margin-right: 0px;
  padding: 9px 10px;
  margin-top: -2px;
  margin-bottom: -2px;
  background-color: transparent;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 2px;
}
.navbar-toggle:focus {
  outline: 0;
}
.navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
@media (min-width: 541px) {
  .navbar-toggle {
    display: none;
  }
}
.navbar-nav {
  margin: 3px 0px;
}
.navbar-nav > li > a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 18px;
}
@media (max-width: 540px) {
  .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    box-shadow: none;
  }
  .navbar-nav .open .dropdown-menu > li > a,
  .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  .navbar-nav .open .dropdown-menu > li > a {
    line-height: 18px;
  }
  .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-nav .open .dropdown-menu > li > a:focus {
    background-image: none;
  }
}
@media (min-width: 541px) {
  .navbar-nav {
    float: left;
    margin: 0;
  }
  .navbar-nav > li {
    float: left;
  }
  .navbar-nav > li > a {
    padding-top: 6px;
    padding-bottom: 6px;
  }
}
.navbar-form {
  margin-left: 0px;
  margin-right: 0px;
  padding: 10px 0px;
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  margin-top: -1px;
  margin-bottom: -1px;
}
@media (min-width: 768px) {
  .navbar-form .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .navbar-form .form-control-static {
    display: inline-block;
  }
  .navbar-form .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .navbar-form .input-group .input-group-addon,
  .navbar-form .input-group .input-group-btn,
  .navbar-form .input-group .form-control {
    width: auto;
  }
  .navbar-form .input-group > .form-control {
    width: 100%;
  }
  .navbar-form .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio,
  .navbar-form .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio label,
  .navbar-form .checkbox label {
    padding-left: 0;
  }
  .navbar-form .radio input[type="radio"],
  .navbar-form .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .navbar-form .has-feedback .form-control-feedback {
    top: 0;
  }
}
@media (max-width: 540px) {
  .navbar-form .form-group {
    margin-bottom: 5px;
  }
  .navbar-form .form-group:last-child {
    margin-bottom: 0;
  }
}
@media (min-width: 541px) {
  .navbar-form {
    width: auto;
    border: 0;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
}
.navbar-nav > li > .dropdown-menu {
  margin-top: 0;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  margin-bottom: 0;
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.navbar-btn {
  margin-top: -1px;
  margin-bottom: -1px;
}
.navbar-btn.btn-sm {
  margin-top: 0px;
  margin-bottom: 0px;
}
.navbar-btn.btn-xs {
  margin-top: 4px;
  margin-bottom: 4px;
}
.navbar-text {
  margin-top: 6px;
  margin-bottom: 6px;
}
@media (min-width: 541px) {
  .navbar-text {
    float: left;
    margin-left: 0px;
    margin-right: 0px;
  }
}
@media (min-width: 541px) {
  .navbar-left {
    float: left !important;
    float: left;
  }
  .navbar-right {
    float: right !important;
    float: right;
    margin-right: 0px;
  }
  .navbar-right ~ .navbar-right {
    margin-right: 0;
  }
}
.navbar-default {
  background-color: #f8f8f8;
  border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
  color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
  color: #5e5e5e;
  background-color: transparent;
}
.navbar-default .navbar-text {
  color: #777;
}
.navbar-default .navbar-nav > li > a {
  color: #777;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
  color: #333;
  background-color: transparent;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
  color: #555;
  background-color: #e7e7e7;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
  color: #ccc;
  background-color: transparent;
}
.navbar-default .navbar-toggle {
  border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
  background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
  background-color: #888;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
  border-color: #e7e7e7;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
  background-color: #e7e7e7;
  color: #555;
}
@media (max-width: 540px) {
  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
    color: #777;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #333;
    background-color: transparent;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #555;
    background-color: #e7e7e7;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #ccc;
    background-color: transparent;
  }
}
.navbar-default .navbar-link {
  color: #777;
}
.navbar-default .navbar-link:hover {
  color: #333;
}
.navbar-default .btn-link {
  color: #777;
}
.navbar-default .btn-link:hover,
.navbar-default .btn-link:focus {
  color: #333;
}
.navbar-default .btn-link[disabled]:hover,
fieldset[disabled] .navbar-default .btn-link:hover,
.navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:focus {
  color: #ccc;
}
.navbar-inverse {
  background-color: #222;
  border-color: #080808;
}
.navbar-inverse .navbar-brand {
  color: #9d9d9d;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-text {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
  color: #fff;
  background-color: #080808;
}
.navbar-inverse .navbar-nav > .disabled > a,
.navbar-inverse .navbar-nav > .disabled > a:hover,
.navbar-inverse .navbar-nav > .disabled > a:focus {
  color: #444;
  background-color: transparent;
}
.navbar-inverse .navbar-toggle {
  border-color: #333;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
  background-color: #333;
}
.navbar-inverse .navbar-toggle .icon-bar {
  background-color: #fff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
  border-color: #101010;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
  background-color: #080808;
  color: #fff;
}
@media (max-width: 540px) {
  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
    border-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
    color: #9d9d9d;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #fff;
    background-color: transparent;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #fff;
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #444;
    background-color: transparent;
  }
}
.navbar-inverse .navbar-link {
  color: #9d9d9d;
}
.navbar-inverse .navbar-link:hover {
  color: #fff;
}
.navbar-inverse .btn-link {
  color: #9d9d9d;
}
.navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link:focus {
  color: #fff;
}
.navbar-inverse .btn-link[disabled]:hover,
fieldset[disabled] .navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:focus {
  color: #444;
}
.breadcrumb {
  padding: 8px 15px;
  margin-bottom: 18px;
  list-style: none;
  background-color: #f5f5f5;
  border-radius: 2px;
}
.breadcrumb > li {
  display: inline-block;
}
.breadcrumb > li + li:before {
  content: "/\00a0";
  padding: 0 5px;
  color: #5e5e5e;
}
.breadcrumb > .active {
  color: #777777;
}
.pagination {
  display: inline-block;
  padding-left: 0;
  margin: 18px 0;
  border-radius: 2px;
}
.pagination > li {
  display: inline;
}
.pagination > li > a,
.pagination > li > span {
  position: relative;
  float: left;
  padding: 6px 12px;
  line-height: 1.42857143;
  text-decoration: none;
  color: #337ab7;
  background-color: #fff;
  border: 1px solid #ddd;
  margin-left: -1px;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
  margin-left: 0;
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
  border-bottom-right-radius: 2px;
  border-top-right-radius: 2px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
  z-index: 2;
  color: #23527c;
  background-color: #eeeeee;
  border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
  z-index: 3;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
  cursor: default;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
  color: #777777;
  background-color: #fff;
  border-color: #ddd;
  cursor: not-allowed;
}
.pagination-lg > li > a,
.pagination-lg > li > span {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
  border-bottom-left-radius: 3px;
  border-top-left-radius: 3px;
}
.pagination-lg > li:last-child > a,
.pagination-lg > li:last-child > span {
  border-bottom-right-radius: 3px;
  border-top-right-radius: 3px;
}
.pagination-sm > li > a,
.pagination-sm > li > span {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
  border-bottom-left-radius: 1px;
  border-top-left-radius: 1px;
}
.pagination-sm > li:last-child > a,
.pagination-sm > li:last-child > span {
  border-bottom-right-radius: 1px;
  border-top-right-radius: 1px;
}
.pager {
  padding-left: 0;
  margin: 18px 0;
  list-style: none;
  text-align: center;
}
.pager li {
  display: inline;
}
.pager li > a,
.pager li > span {
  display: inline-block;
  padding: 5px 14px;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 15px;
}
.pager li > a:hover,
.pager li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.pager .next > a,
.pager .next > span {
  float: right;
}
.pager .previous > a,
.pager .previous > span {
  float: left;
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
  color: #777777;
  background-color: #fff;
  cursor: not-allowed;
}
.label {
  display: inline;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
}
a.label:hover,
a.label:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.label:empty {
  display: none;
}
.btn .label {
  position: relative;
  top: -1px;
}
.label-default {
  background-color: #777777;
}
.label-default[href]:hover,
.label-default[href]:focus {
  background-color: #5e5e5e;
}
.label-primary {
  background-color: #337ab7;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
  background-color: #286090;
}
.label-success {
  background-color: #5cb85c;
}
.label-success[href]:hover,
.label-success[href]:focus {
  background-color: #449d44;
}
.label-info {
  background-color: #5bc0de;
}
.label-info[href]:hover,
.label-info[href]:focus {
  background-color: #31b0d5;
}
.label-warning {
  background-color: #f0ad4e;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
  background-color: #ec971f;
}
.label-danger {
  background-color: #d9534f;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
  background-color: #c9302c;
}
.badge {
  display: inline-block;
  min-width: 10px;
  padding: 3px 7px;
  font-size: 12px;
  font-weight: bold;
  color: #fff;
  line-height: 1;
  vertical-align: middle;
  white-space: nowrap;
  text-align: center;
  background-color: #777777;
  border-radius: 10px;
}
.badge:empty {
  display: none;
}
.btn .badge {
  position: relative;
  top: -1px;
}
.btn-xs .badge,
.btn-group-xs > .btn .badge {
  top: 0;
  padding: 1px 5px;
}
a.badge:hover,
a.badge:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
  color: #337ab7;
  background-color: #fff;
}
.list-group-item > .badge {
  float: right;
}
.list-group-item > .badge + .badge {
  margin-right: 5px;
}
.nav-pills > li > a > .badge {
  margin-left: 3px;
}
.jumbotron {
  padding-top: 30px;
  padding-bottom: 30px;
  margin-bottom: 30px;
  color: inherit;
  background-color: #eeeeee;
}
.jumbotron h1,
.jumbotron .h1 {
  color: inherit;
}
.jumbotron p {
  margin-bottom: 15px;
  font-size: 20px;
  font-weight: 200;
}
.jumbotron > hr {
  border-top-color: #d5d5d5;
}
.container .jumbotron,
.container-fluid .jumbotron {
  border-radius: 3px;
  padding-left: 0px;
  padding-right: 0px;
}
.jumbotron .container {
  max-width: 100%;
}
@media screen and (min-width: 768px) {
  .jumbotron {
    padding-top: 48px;
    padding-bottom: 48px;
  }
  .container .jumbotron,
  .container-fluid .jumbotron {
    padding-left: 60px;
    padding-right: 60px;
  }
  .jumbotron h1,
  .jumbotron .h1 {
    font-size: 59px;
  }
}
.thumbnail {
  display: block;
  padding: 4px;
  margin-bottom: 18px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: border 0.2s ease-in-out;
  -o-transition: border 0.2s ease-in-out;
  transition: border 0.2s ease-in-out;
}
.thumbnail > img,
.thumbnail a > img {
  margin-left: auto;
  margin-right: auto;
}
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
  border-color: #337ab7;
}
.thumbnail .caption {
  padding: 9px;
  color: #000;
}
.alert {
  padding: 15px;
  margin-bottom: 18px;
  border: 1px solid transparent;
  border-radius: 2px;
}
.alert h4 {
  margin-top: 0;
  color: inherit;
}
.alert .alert-link {
  font-weight: bold;
}
.alert > p,
.alert > ul {
  margin-bottom: 0;
}
.alert > p + p {
  margin-top: 5px;
}
.alert-dismissable,
.alert-dismissible {
  padding-right: 35px;
}
.alert-dismissable .close,
.alert-dismissible .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
.alert-success {
  background-color: #dff0d8;
  border-color: #d6e9c6;
  color: #3c763d;
}
.alert-success hr {
  border-top-color: #c9e2b3;
}
.alert-success .alert-link {
  color: #2b542c;
}
.alert-info {
  background-color: #d9edf7;
  border-color: #bce8f1;
  color: #31708f;
}
.alert-info hr {
  border-top-color: #a6e1ec;
}
.alert-info .alert-link {
  color: #245269;
}
.alert-warning {
  background-color: #fcf8e3;
  border-color: #faebcc;
  color: #8a6d3b;
}
.alert-warning hr {
  border-top-color: #f7e1b5;
}
.alert-warning .alert-link {
  color: #66512c;
}
.alert-danger {
  background-color: #f2dede;
  border-color: #ebccd1;
  color: #a94442;
}
.alert-danger hr {
  border-top-color: #e4b9c0;
}
.alert-danger .alert-link {
  color: #843534;
}
@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
.progress {
  overflow: hidden;
  height: 18px;
  margin-bottom: 18px;
  background-color: #f5f5f5;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar {
  float: left;
  width: 0%;
  height: 100%;
  font-size: 12px;
  line-height: 18px;
  color: #fff;
  text-align: center;
  background-color: #337ab7;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  -webkit-transition: width 0.6s ease;
  -o-transition: width 0.6s ease;
  transition: width 0.6s ease;
}
.progress-striped .progress-bar,
.progress-bar-striped {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
  -webkit-animation: progress-bar-stripes 2s linear infinite;
  -o-animation: progress-bar-stripes 2s linear infinite;
  animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
  background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
  background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
  background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
  background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.media {
  margin-top: 15px;
}
.media:first-child {
  margin-top: 0;
}
.media,
.media-body {
  zoom: 1;
  overflow: hidden;
}
.media-body {
  width: 10000px;
}
.media-object {
  display: block;
}
.media-object.img-thumbnail {
  max-width: none;
}
.media-right,
.media > .pull-right {
  padding-left: 10px;
}
.media-left,
.media > .pull-left {
  padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
  display: table-cell;
  vertical-align: top;
}
.media-middle {
  vertical-align: middle;
}
.media-bottom {
  vertical-align: bottom;
}
.media-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.media-list {
  padding-left: 0;
  list-style: none;
}
.list-group {
  margin-bottom: 20px;
  padding-left: 0;
}
.list-group-item {
  position: relative;
  display: block;
  padding: 10px 15px;
  margin-bottom: -1px;
  background-color: #fff;
  border: 1px solid #ddd;
}
.list-group-item:first-child {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
}
.list-group-item:last-child {
  margin-bottom: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
a.list-group-item,
button.list-group-item {
  color: #555;
}
a.list-group-item .list-group-item-heading,
button.list-group-item .list-group-item-heading {
  color: #333;
}
a.list-group-item:hover,
button.list-group-item:hover,
a.list-group-item:focus,
button.list-group-item:focus {
  text-decoration: none;
  color: #555;
  background-color: #f5f5f5;
}
button.list-group-item {
  width: 100%;
  text-align: left;
}
.list-group-item.disabled,
.list-group-item.disabled:hover,
.list-group-item.disabled:focus {
  background-color: #eeeeee;
  color: #777777;
  cursor: not-allowed;
}
.list-group-item.disabled .list-group-item-heading,
.list-group-item.disabled:hover .list-group-item-heading,
.list-group-item.disabled:focus .list-group-item-heading {
  color: inherit;
}
.list-group-item.disabled .list-group-item-text,
.list-group-item.disabled:hover .list-group-item-text,
.list-group-item.disabled:focus .list-group-item-text {
  color: #777777;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
  z-index: 2;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.list-group-item.active .list-group-item-heading,
.list-group-item.active:hover .list-group-item-heading,
.list-group-item.active:focus .list-group-item-heading,
.list-group-item.active .list-group-item-heading > small,
.list-group-item.active:hover .list-group-item-heading > small,
.list-group-item.active:focus .list-group-item-heading > small,
.list-group-item.active .list-group-item-heading > .small,
.list-group-item.active:hover .list-group-item-heading > .small,
.list-group-item.active:focus .list-group-item-heading > .small {
  color: inherit;
}
.list-group-item.active .list-group-item-text,
.list-group-item.active:hover .list-group-item-text,
.list-group-item.active:focus .list-group-item-text {
  color: #c7ddef;
}
.list-group-item-success {
  color: #3c763d;
  background-color: #dff0d8;
}
a.list-group-item-success,
button.list-group-item-success {
  color: #3c763d;
}
a.list-group-item-success .list-group-item-heading,
button.list-group-item-success .list-group-item-heading {
  color: inherit;
}
a.list-group-item-success:hover,
button.list-group-item-success:hover,
a.list-group-item-success:focus,
button.list-group-item-success:focus {
  color: #3c763d;
  background-color: #d0e9c6;
}
a.list-group-item-success.active,
button.list-group-item-success.active,
a.list-group-item-success.active:hover,
button.list-group-item-success.active:hover,
a.list-group-item-success.active:focus,
button.list-group-item-success.active:focus {
  color: #fff;
  background-color: #3c763d;
  border-color: #3c763d;
}
.list-group-item-info {
  color: #31708f;
  background-color: #d9edf7;
}
a.list-group-item-info,
button.list-group-item-info {
  color: #31708f;
}
a.list-group-item-info .list-group-item-heading,
button.list-group-item-info .list-group-item-heading {
  color: inherit;
}
a.list-group-item-info:hover,
button.list-group-item-info:hover,
a.list-group-item-info:focus,
button.list-group-item-info:focus {
  color: #31708f;
  background-color: #c4e3f3;
}
a.list-group-item-info.active,
button.list-group-item-info.active,
a.list-group-item-info.active:hover,
button.list-group-item-info.active:hover,
a.list-group-item-info.active:focus,
button.list-group-item-info.active:focus {
  color: #fff;
  background-color: #31708f;
  border-color: #31708f;
}
.list-group-item-warning {
  color: #8a6d3b;
  background-color: #fcf8e3;
}
a.list-group-item-warning,
button.list-group-item-warning {
  color: #8a6d3b;
}
a.list-group-item-warning .list-group-item-heading,
button.list-group-item-warning .list-group-item-heading {
  color: inherit;
}
a.list-group-item-warning:hover,
button.list-group-item-warning:hover,
a.list-group-item-warning:focus,
button.list-group-item-warning:focus {
  color: #8a6d3b;
  background-color: #faf2cc;
}
a.list-group-item-warning.active,
button.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
button.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus,
button.list-group-item-warning.active:focus {
  color: #fff;
  background-color: #8a6d3b;
  border-color: #8a6d3b;
}
.list-group-item-danger {
  color: #a94442;
  background-color: #f2dede;
}
a.list-group-item-danger,
button.list-group-item-danger {
  color: #a94442;
}
a.list-group-item-danger .list-group-item-heading,
button.list-group-item-danger .list-group-item-heading {
  color: inherit;
}
a.list-group-item-danger:hover,
button.list-group-item-danger:hover,
a.list-group-item-danger:focus,
button.list-group-item-danger:focus {
  color: #a94442;
  background-color: #ebcccc;
}
a.list-group-item-danger.active,
button.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
button.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus,
button.list-group-item-danger.active:focus {
  color: #fff;
  background-color: #a94442;
  border-color: #a94442;
}
.list-group-item-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.list-group-item-text {
  margin-bottom: 0;
  line-height: 1.3;
}
.panel {
  margin-bottom: 18px;
  background-color: #fff;
  border: 1px solid transparent;
  border-radius: 2px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.panel-body {
  padding: 15px;
}
.panel-heading {
  padding: 10px 15px;
  border-bottom: 1px solid transparent;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel-heading > .dropdown .dropdown-toggle {
  color: inherit;
}
.panel-title {
  margin-top: 0;
  margin-bottom: 0;
  font-size: 15px;
  color: inherit;
}
.panel-title > a,
.panel-title > small,
.panel-title > .small,
.panel-title > small > a,
.panel-title > .small > a {
  color: inherit;
}
.panel-footer {
  padding: 10px 15px;
  background-color: #f5f5f5;
  border-top: 1px solid #ddd;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .list-group,
.panel > .panel-collapse > .list-group {
  margin-bottom: 0;
}
.panel > .list-group .list-group-item,
.panel > .panel-collapse > .list-group .list-group-item {
  border-width: 1px 0;
  border-radius: 0;
}
.panel > .list-group:first-child .list-group-item:first-child,
.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
  border-top: 0;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .list-group:last-child .list-group-item:last-child,
.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
  border-bottom: 0;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.panel-heading + .list-group .list-group-item:first-child {
  border-top-width: 0;
}
.list-group + .panel-footer {
  border-top-width: 0;
}
.panel > .table,
.panel > .table-responsive > .table,
.panel > .panel-collapse > .table {
  margin-bottom: 0;
}
.panel > .table caption,
.panel > .table-responsive > .table caption,
.panel > .panel-collapse > .table caption {
  padding-left: 15px;
  padding-right: 15px;
}
.panel > .table:first-child,
.panel > .table-responsive:first-child > .table:first-child {
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
  border-top-left-radius: 1px;
  border-top-right-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
  border-top-right-radius: 1px;
}
.panel > .table:last-child,
.panel > .table-responsive:last-child > .table:last-child {
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
  border-bottom-left-radius: 1px;
  border-bottom-right-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
  border-bottom-right-radius: 1px;
}
.panel > .panel-body + .table,
.panel > .panel-body + .table-responsive,
.panel > .table + .panel-body,
.panel > .table-responsive + .panel-body {
  border-top: 1px solid #ddd;
}
.panel > .table > tbody:first-child > tr:first-child th,
.panel > .table > tbody:first-child > tr:first-child td {
  border-top: 0;
}
.panel > .table-bordered,
.panel > .table-responsive > .table-bordered {
  border: 0;
}
.panel > .table-bordered > thead > tr > th:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
.panel > .table-bordered > tbody > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
.panel > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-bordered > thead > tr > td:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
.panel > .table-bordered > tbody > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
.panel > .table-bordered > tfoot > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
  border-left: 0;
}
.panel > .table-bordered > thead > tr > th:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
.panel > .table-bordered > tbody > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
.panel > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-bordered > thead > tr > td:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
.panel > .table-bordered > tbody > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
.panel > .table-bordered > tfoot > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
  border-right: 0;
}
.panel > .table-bordered > thead > tr:first-child > td,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
.panel > .table-bordered > tbody > tr:first-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
.panel > .table-bordered > thead > tr:first-child > th,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
.panel > .table-bordered > tbody > tr:first-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
  border-bottom: 0;
}
.panel > .table-bordered > tbody > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
.panel > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-bordered > tbody > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
.panel > .table-bordered > tfoot > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
  border-bottom: 0;
}
.panel > .table-responsive {
  border: 0;
  margin-bottom: 0;
}
.panel-group {
  margin-bottom: 18px;
}
.panel-group .panel {
  margin-bottom: 0;
  border-radius: 2px;
}
.panel-group .panel + .panel {
  margin-top: 5px;
}
.panel-group .panel-heading {
  border-bottom: 0;
}
.panel-group .panel-heading + .panel-collapse > .panel-body,
.panel-group .panel-heading + .panel-collapse > .list-group {
  border-top: 1px solid #ddd;
}
.panel-group .panel-footer {
  border-top: 0;
}
.panel-group .panel-footer + .panel-collapse .panel-body {
  border-bottom: 1px solid #ddd;
}
.panel-default {
  border-color: #ddd;
}
.panel-default > .panel-heading {
  color: #333333;
  background-color: #f5f5f5;
  border-color: #ddd;
}
.panel-default > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ddd;
}
.panel-default > .panel-heading .badge {
  color: #f5f5f5;
  background-color: #333333;
}
.panel-default > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ddd;
}
.panel-primary {
  border-color: #337ab7;
}
.panel-primary > .panel-heading {
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #337ab7;
}
.panel-primary > .panel-heading .badge {
  color: #337ab7;
  background-color: #fff;
}
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #337ab7;
}
.panel-success {
  border-color: #d6e9c6;
}
.panel-success > .panel-heading {
  color: #3c763d;
  background-color: #dff0d8;
  border-color: #d6e9c6;
}
.panel-success > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #d6e9c6;
}
.panel-success > .panel-heading .badge {
  color: #dff0d8;
  background-color: #3c763d;
}
.panel-success > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #d6e9c6;
}
.panel-info {
  border-color: #bce8f1;
}
.panel-info > .panel-heading {
  color: #31708f;
  background-color: #d9edf7;
  border-color: #bce8f1;
}
.panel-info > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #bce8f1;
}
.panel-info > .panel-heading .badge {
  color: #d9edf7;
  background-color: #31708f;
}
.panel-info > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #bce8f1;
}
.panel-warning {
  border-color: #faebcc;
}
.panel-warning > .panel-heading {
  color: #8a6d3b;
  background-color: #fcf8e3;
  border-color: #faebcc;
}
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #faebcc;
}
.panel-warning > .panel-heading .badge {
  color: #fcf8e3;
  background-color: #8a6d3b;
}
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #faebcc;
}
.panel-danger {
  border-color: #ebccd1;
}
.panel-danger > .panel-heading {
  color: #a94442;
  background-color: #f2dede;
  border-color: #ebccd1;
}
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ebccd1;
}
.panel-danger > .panel-heading .badge {
  color: #f2dede;
  background-color: #a94442;
}
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ebccd1;
}
.embed-responsive {
  position: relative;
  display: block;
  height: 0;
  padding: 0;
  overflow: hidden;
}
.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  height: 100%;
  width: 100%;
  border: 0;
}
.embed-responsive-16by9 {
  padding-bottom: 56.25%;
}
.embed-responsive-4by3 {
  padding-bottom: 75%;
}
.well {
  min-height: 20px;
  padding: 19px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border: 1px solid #e3e3e3;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.well blockquote {
  border-color: #ddd;
  border-color: rgba(0, 0, 0, 0.15);
}
.well-lg {
  padding: 24px;
  border-radius: 3px;
}
.well-sm {
  padding: 9px;
  border-radius: 1px;
}
.close {
  float: right;
  font-size: 19.5px;
  font-weight: bold;
  line-height: 1;
  color: #000;
  text-shadow: 0 1px 0 #fff;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
.modal-open {
  overflow: hidden;
}
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  -webkit-overflow-scrolling: touch;
  outline: 0;
}
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  -o-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -moz-transition: -moz-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}
.modal.in .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}
.modal-dialog {
  position: relative;
  width: auto;
  margin: 10px;
}
.modal-content {
  position: relative;
  background-color: #fff;
  border: 1px solid #999;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  background-clip: padding-box;
  outline: 0;
}
.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  background-color: #000;
}
.modal-backdrop.fade {
  opacity: 0;
  filter: alpha(opacity=0);
}
.modal-backdrop.in {
  opacity: 0.5;
  filter: alpha(opacity=50);
}
.modal-header {
  padding: 15px;
  border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
  margin-top: -2px;
}
.modal-title {
  margin: 0;
  line-height: 1.42857143;
}
.modal-body {
  position: relative;
  padding: 15px;
}
.modal-footer {
  padding: 15px;
  text-align: right;
  border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
  margin-left: 5px;
  margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}
.modal-scrollbar-measure {
  position: absolute;
  top: -9999px;
  width: 50px;
  height: 50px;
  overflow: scroll;
}
@media (min-width: 768px) {
  .modal-dialog {
    width: 600px;
    margin: 30px auto;
  }
  .modal-content {
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  }
  .modal-sm {
    width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg {
    width: 900px;
  }
}
.tooltip {
  position: absolute;
  z-index: 1070;
  display: block;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 12px;
  opacity: 0;
  filter: alpha(opacity=0);
}
.tooltip.in {
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.tooltip.top {
  margin-top: -3px;
  padding: 5px 0;
}
.tooltip.right {
  margin-left: 3px;
  padding: 0 5px;
}
.tooltip.bottom {
  margin-top: 3px;
  padding: 5px 0;
}
.tooltip.left {
  margin-left: -3px;
  padding: 0 5px;
}
.tooltip-inner {
  max-width: 200px;
  padding: 3px 8px;
  color: #fff;
  text-align: center;
  background-color: #000;
  border-radius: 2px;
}
.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.tooltip.top .tooltip-arrow {
  bottom: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
  bottom: 0;
  right: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
  bottom: 0;
  left: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
  top: 50%;
  left: 0;
  margin-top: -5px;
  border-width: 5px 5px 5px 0;
  border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
  top: 50%;
  right: 0;
  margin-top: -5px;
  border-width: 5px 0 5px 5px;
  border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
  top: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
  top: 0;
  right: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
  top: 0;
  left: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1060;
  display: none;
  max-width: 276px;
  padding: 1px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 13px;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}
.popover.top {
  margin-top: -10px;
}
.popover.right {
  margin-left: 10px;
}
.popover.bottom {
  margin-top: 10px;
}
.popover.left {
  margin-left: -10px;
}
.popover-title {
  margin: 0;
  padding: 8px 14px;
  font-size: 13px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ebebeb;
  border-radius: 2px 2px 0 0;
}
.popover-content {
  padding: 9px 14px;
}
.popover > .arrow,
.popover > .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.popover > .arrow {
  border-width: 11px;
}
.popover > .arrow:after {
  border-width: 10px;
  content: "";
}
.popover.top > .arrow {
  left: 50%;
  margin-left: -11px;
  border-bottom-width: 0;
  border-top-color: #999999;
  border-top-color: rgba(0, 0, 0, 0.25);
  bottom: -11px;
}
.popover.top > .arrow:after {
  content: " ";
  bottom: 1px;
  margin-left: -10px;
  border-bottom-width: 0;
  border-top-color: #fff;
}
.popover.right > .arrow {
  top: 50%;
  left: -11px;
  margin-top: -11px;
  border-left-width: 0;
  border-right-color: #999999;
  border-right-color: rgba(0, 0, 0, 0.25);
}
.popover.right > .arrow:after {
  content: " ";
  left: 1px;
  bottom: -10px;
  border-left-width: 0;
  border-right-color: #fff;
}
.popover.bottom > .arrow {
  left: 50%;
  margin-left: -11px;
  border-top-width: 0;
  border-bottom-color: #999999;
  border-bottom-color: rgba(0, 0, 0, 0.25);
  top: -11px;
}
.popover.bottom > .arrow:after {
  content: " ";
  top: 1px;
  margin-left: -10px;
  border-top-width: 0;
  border-bottom-color: #fff;
}
.popover.left > .arrow {
  top: 50%;
  right: -11px;
  margin-top: -11px;
  border-right-width: 0;
  border-left-color: #999999;
  border-left-color: rgba(0, 0, 0, 0.25);
}
.popover.left > .arrow:after {
  content: " ";
  right: 1px;
  border-right-width: 0;
  border-left-color: #fff;
  bottom: -10px;
}
.carousel {
  position: relative;
}
.carousel-inner {
  position: relative;
  overflow: hidden;
  width: 100%;
}
.carousel-inner > .item {
  display: none;
  position: relative;
  -webkit-transition: 0.6s ease-in-out left;
  -o-transition: 0.6s ease-in-out left;
  transition: 0.6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  line-height: 1;
}
@media all and (transform-3d), (-webkit-transform-3d) {
  .carousel-inner > .item {
    -webkit-transition: -webkit-transform 0.6s ease-in-out;
    -moz-transition: -moz-transform 0.6s ease-in-out;
    -o-transition: -o-transform 0.6s ease-in-out;
    transition: transform 0.6s ease-in-out;
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-perspective: 1000px;
    -moz-perspective: 1000px;
    perspective: 1000px;
  }
  .carousel-inner > .item.next,
  .carousel-inner > .item.active.right {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.prev,
  .carousel-inner > .item.active.left {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.next.left,
  .carousel-inner > .item.prev.right,
  .carousel-inner > .item.active {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    left: 0;
  }
}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
  display: block;
}
.carousel-inner > .active {
  left: 0;
}
.carousel-inner > .next,
.carousel-inner > .prev {
  position: absolute;
  top: 0;
  width: 100%;
}
.carousel-inner > .next {
  left: 100%;
}
.carousel-inner > .prev {
  left: -100%;
}
.carousel-inner > .next.left,
.carousel-inner > .prev.right {
  left: 0;
}
.carousel-inner > .active.left {
  left: -100%;
}
.carousel-inner > .active.right {
  left: 100%;
}
.carousel-control {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  width: 15%;
  opacity: 0.5;
  filter: alpha(opacity=50);
  font-size: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  background-color: rgba(0, 0, 0, 0);
}
.carousel-control.left {
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
}
.carousel-control.right {
  left: auto;
  right: 0;
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
}
.carousel-control:hover,
.carousel-control:focus {
  outline: 0;
  color: #fff;
  text-decoration: none;
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.carousel-control .icon-prev,
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
  position: absolute;
  top: 50%;
  margin-top: -10px;
  z-index: 5;
  display: inline-block;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
  left: 50%;
  margin-left: -10px;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
  right: 50%;
  margin-right: -10px;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
  width: 20px;
  height: 20px;
  line-height: 1;
  font-family: serif;
}
.carousel-control .icon-prev:before {
  content: '\2039';
}
.carousel-control .icon-next:before {
  content: '\203a';
}
.carousel-indicators {
  position: absolute;
  bottom: 10px;
  left: 50%;
  z-index: 15;
  width: 60%;
  margin-left: -30%;
  padding-left: 0;
  list-style: none;
  text-align: center;
}
.carousel-indicators li {
  display: inline-block;
  width: 10px;
  height: 10px;
  margin: 1px;
  text-indent: -999px;
  border: 1px solid #fff;
  border-radius: 10px;
  cursor: pointer;
  background-color: #000 \9;
  background-color: rgba(0, 0, 0, 0);
}
.carousel-indicators .active {
  margin: 0;
  width: 12px;
  height: 12px;
  background-color: #fff;
}
.carousel-caption {
  position: absolute;
  left: 15%;
  right: 15%;
  bottom: 20px;
  z-index: 10;
  padding-top: 20px;
  padding-bottom: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.carousel-caption .btn {
  text-shadow: none;
}
@media screen and (min-width: 768px) {
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-prev,
  .carousel-control .icon-next {
    width: 30px;
    height: 30px;
    margin-top: -10px;
    font-size: 30px;
  }
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .icon-prev {
    margin-left: -10px;
  }
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-next {
    margin-right: -10px;
  }
  .carousel-caption {
    left: 20%;
    right: 20%;
    padding-bottom: 30px;
  }
  .carousel-indicators {
    bottom: 20px;
  }
}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.dl-horizontal dd:after,
.container:before,
.container:after,
.container-fluid:before,
.container-fluid:after,
.row:before,
.row:after,
.form-horizontal .form-group:before,
.form-horizontal .form-group:after,
.btn-toolbar:before,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:before,
.btn-group-vertical > .btn-group:after,
.nav:before,
.nav:after,
.navbar:before,
.navbar:after,
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after,
.pager:before,
.pager:after,
.panel-body:before,
.panel-body:after,
.modal-header:before,
.modal-header:after,
.modal-footer:before,
.modal-footer:after,
.item_buttons:before,
.item_buttons:after {
  content: " ";
  display: table;
}
.clearfix:after,
.dl-horizontal dd:after,
.container:after,
.container-fluid:after,
.row:after,
.form-horizontal .form-group:after,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:after,
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after,
.pager:after,
.panel-body:after,
.modal-header:after,
.modal-footer:after,
.item_buttons:after {
  clear: both;
}
.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.pull-right {
  float: right !important;
}
.pull-left {
  float: left !important;
}
.hide {
  display: none !important;
}
.show {
  display: block !important;
}
.invisible {
  visibility: hidden;
}
.text-hide {
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}
.hidden {
  display: none !important;
}
.affix {
  position: fixed;
}
@-ms-viewport {
  width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
  display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
  display: none !important;
}
@media (max-width: 767px) {
  .visible-xs {
    display: block !important;
  }
  table.visible-xs {
    display: table !important;
  }
  tr.visible-xs {
    display: table-row !important;
  }
  th.visible-xs,
  td.visible-xs {
    display: table-cell !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-block {
    display: block !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline {
    display: inline !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm {
    display: block !important;
  }
  table.visible-sm {
    display: table !important;
  }
  tr.visible-sm {
    display: table-row !important;
  }
  th.visible-sm,
  td.visible-sm {
    display: table-cell !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-block {
    display: block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline {
    display: inline !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md {
    display: block !important;
  }
  table.visible-md {
    display: table !important;
  }
  tr.visible-md {
    display: table-row !important;
  }
  th.visible-md,
  td.visible-md {
    display: table-cell !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-block {
    display: block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline {
    display: inline !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg {
    display: block !important;
  }
  table.visible-lg {
    display: table !important;
  }
  tr.visible-lg {
    display: table-row !important;
  }
  th.visible-lg,
  td.visible-lg {
    display: table-cell !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-block {
    display: block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline {
    display: inline !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline-block {
    display: inline-block !important;
  }
}
@media (max-width: 767px) {
  .hidden-xs {
    display: none !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .hidden-sm {
    display: none !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .hidden-md {
    display: none !important;
  }
}
@media (min-width: 1200px) {
  .hidden-lg {
    display: none !important;
  }
}
.visible-print {
  display: none !important;
}
@media print {
  .visible-print {
    display: block !important;
  }
  table.visible-print {
    display: table !important;
  }
  tr.visible-print {
    display: table-row !important;
  }
  th.visible-print,
  td.visible-print {
    display: table-cell !important;
  }
}
.visible-print-block {
  display: none !important;
}
@media print {
  .visible-print-block {
    display: block !important;
  }
}
.visible-print-inline {
  display: none !important;
}
@media print {
  .visible-print-inline {
    display: inline !important;
  }
}
.visible-print-inline-block {
  display: none !important;
}
@media print {
  .visible-print-inline-block {
    display: inline-block !important;
  }
}
@media print {
  .hidden-print {
    display: none !important;
  }
}
/*!
*
* Font Awesome
*
*/
/*!
 *  Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */
/* FONT PATH
 * -------------------------- */
@font-face {
  font-family: 'FontAwesome';
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}
.fa {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
/* makes the font 33% larger relative to the icon container */
.fa-lg {
  font-size: 1.33333333em;
  line-height: 0.75em;
  vertical-align: -15%;
}
.fa-2x {
  font-size: 2em;
}
.fa-3x {
  font-size: 3em;
}
.fa-4x {
  font-size: 4em;
}
.fa-5x {
  font-size: 5em;
}
.fa-fw {
  width: 1.28571429em;
  text-align: center;
}
.fa-ul {
  padding-left: 0;
  margin-left: 2.14285714em;
  list-style-type: none;
}
.fa-ul > li {
  position: relative;
}
.fa-li {
  position: absolute;
  left: -2.14285714em;
  width: 2.14285714em;
  top: 0.14285714em;
  text-align: center;
}
.fa-li.fa-lg {
  left: -1.85714286em;
}
.fa-border {
  padding: .2em .25em .15em;
  border: solid 0.08em #eee;
  border-radius: .1em;
}
.pull-right {
  float: right;
}
.pull-left {
  float: left;
}
.fa.pull-left {
  margin-right: .3em;
}
.fa.pull-right {
  margin-left: .3em;
}
.fa-spin {
  -webkit-animation: fa-spin 2s infinite linear;
  animation: fa-spin 2s infinite linear;
}
@-webkit-keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
@keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
.fa-rotate-90 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
  -webkit-transform: rotate(90deg);
  -ms-transform: rotate(90deg);
  transform: rotate(90deg);
}
.fa-rotate-180 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}
.fa-rotate-270 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
  -webkit-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  transform: rotate(270deg);
}
.fa-flip-horizontal {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
  -webkit-transform: scale(-1, 1);
  -ms-transform: scale(-1, 1);
  transform: scale(-1, 1);
}
.fa-flip-vertical {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
  -webkit-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  transform: scale(1, -1);
}
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical {
  filter: none;
}
.fa-stack {
  position: relative;
  display: inline-block;
  width: 2em;
  height: 2em;
  line-height: 2em;
  vertical-align: middle;
}
.fa-stack-1x,
.fa-stack-2x {
  position: absolute;
  left: 0;
  width: 100%;
  text-align: center;
}
.fa-stack-1x {
  line-height: inherit;
}
.fa-stack-2x {
  font-size: 2em;
}
.fa-inverse {
  color: #fff;
}
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
   readers do not read off random characters that represent icons */
.fa-glass:before {
  content: "\f000";
}
.fa-music:before {
  content: "\f001";
}
.fa-search:before {
  content: "\f002";
}
.fa-envelope-o:before {
  content: "\f003";
}
.fa-heart:before {
  content: "\f004";
}
.fa-star:before {
  content: "\f005";
}
.fa-star-o:before {
  content: "\f006";
}
.fa-user:before {
  content: "\f007";
}
.fa-film:before {
  content: "\f008";
}
.fa-th-large:before {
  content: "\f009";
}
.fa-th:before {
  content: "\f00a";
}
.fa-th-list:before {
  content: "\f00b";
}
.fa-check:before {
  content: "\f00c";
}
.fa-remove:before,
.fa-close:before,
.fa-times:before {
  content: "\f00d";
}
.fa-search-plus:before {
  content: "\f00e";
}
.fa-search-minus:before {
  content: "\f010";
}
.fa-power-off:before {
  content: "\f011";
}
.fa-signal:before {
  content: "\f012";
}
.fa-gear:before,
.fa-cog:before {
  content: "\f013";
}
.fa-trash-o:before {
  content: "\f014";
}
.fa-home:before {
  content: "\f015";
}
.fa-file-o:before {
  content: "\f016";
}
.fa-clock-o:before {
  content: "\f017";
}
.fa-road:before {
  content: "\f018";
}
.fa-download:before {
  content: "\f019";
}
.fa-arrow-circle-o-down:before {
  content: "\f01a";
}
.fa-arrow-circle-o-up:before {
  content: "\f01b";
}
.fa-inbox:before {
  content: "\f01c";
}
.fa-play-circle-o:before {
  content: "\f01d";
}
.fa-rotate-right:before,
.fa-repeat:before {
  content: "\f01e";
}
.fa-refresh:before {
  content: "\f021";
}
.fa-list-alt:before {
  content: "\f022";
}
.fa-lock:before {
  content: "\f023";
}
.fa-flag:before {
  content: "\f024";
}
.fa-headphones:before {
  content: "\f025";
}
.fa-volume-off:before {
  content: "\f026";
}
.fa-volume-down:before {
  content: "\f027";
}
.fa-volume-up:before {
  content: "\f028";
}
.fa-qrcode:before {
  content: "\f029";
}
.fa-barcode:before {
  content: "\f02a";
}
.fa-tag:before {
  content: "\f02b";
}
.fa-tags:before {
  content: "\f02c";
}
.fa-book:before {
  content: "\f02d";
}
.fa-bookmark:before {
  content: "\f02e";
}
.fa-print:before {
  content: "\f02f";
}
.fa-camera:before {
  content: "\f030";
}
.fa-font:before {
  content: "\f031";
}
.fa-bold:before {
  content: "\f032";
}
.fa-italic:before {
  content: "\f033";
}
.fa-text-height:before {
  content: "\f034";
}
.fa-text-width:before {
  content: "\f035";
}
.fa-align-left:before {
  content: "\f036";
}
.fa-align-center:before {
  content: "\f037";
}
.fa-align-right:before {
  content: "\f038";
}
.fa-align-justify:before {
  content: "\f039";
}
.fa-list:before {
  content: "\f03a";
}
.fa-dedent:before,
.fa-outdent:before {
  content: "\f03b";
}
.fa-indent:before {
  content: "\f03c";
}
.fa-video-camera:before {
  content: "\f03d";
}
.fa-photo:before,
.fa-image:before,
.fa-picture-o:before {
  content: "\f03e";
}
.fa-pencil:before {
  content: "\f040";
}
.fa-map-marker:before {
  content: "\f041";
}
.fa-adjust:before {
  content: "\f042";
}
.fa-tint:before {
  content: "\f043";
}
.fa-edit:before,
.fa-pencil-square-o:before {
  content: "\f044";
}
.fa-share-square-o:before {
  content: "\f045";
}
.fa-check-square-o:before {
  content: "\f046";
}
.fa-arrows:before {
  content: "\f047";
}
.fa-step-backward:before {
  content: "\f048";
}
.fa-fast-backward:before {
  content: "\f049";
}
.fa-backward:before {
  content: "\f04a";
}
.fa-play:before {
  content: "\f04b";
}
.fa-pause:before {
  content: "\f04c";
}
.fa-stop:before {
  content: "\f04d";
}
.fa-forward:before {
  content: "\f04e";
}
.fa-fast-forward:before {
  content: "\f050";
}
.fa-step-forward:before {
  content: "\f051";
}
.fa-eject:before {
  content: "\f052";
}
.fa-chevron-left:before {
  content: "\f053";
}
.fa-chevron-right:before {
  content: "\f054";
}
.fa-plus-circle:before {
  content: "\f055";
}
.fa-minus-circle:before {
  content: "\f056";
}
.fa-times-circle:before {
  content: "\f057";
}
.fa-check-circle:before {
  content: "\f058";
}
.fa-question-circle:before {
  content: "\f059";
}
.fa-info-circle:before {
  content: "\f05a";
}
.fa-crosshairs:before {
  content: "\f05b";
}
.fa-times-circle-o:before {
  content: "\f05c";
}
.fa-check-circle-o:before {
  content: "\f05d";
}
.fa-ban:before {
  content: "\f05e";
}
.fa-arrow-left:before {
  content: "\f060";
}
.fa-arrow-right:before {
  content: "\f061";
}
.fa-arrow-up:before {
  content: "\f062";
}
.fa-arrow-down:before {
  content: "\f063";
}
.fa-mail-forward:before,
.fa-share:before {
  content: "\f064";
}
.fa-expand:before {
  content: "\f065";
}
.fa-compress:before {
  content: "\f066";
}
.fa-plus:before {
  content: "\f067";
}
.fa-minus:before {
  content: "\f068";
}
.fa-asterisk:before {
  content: "\f069";
}
.fa-exclamation-circle:before {
  content: "\f06a";
}
.fa-gift:before {
  content: "\f06b";
}
.fa-leaf:before {
  content: "\f06c";
}
.fa-fire:before {
  content: "\f06d";
}
.fa-eye:before {
  content: "\f06e";
}
.fa-eye-slash:before {
  content: "\f070";
}
.fa-warning:before,
.fa-exclamation-triangle:before {
  content: "\f071";
}
.fa-plane:before {
  content: "\f072";
}
.fa-calendar:before {
  content: "\f073";
}
.fa-random:before {
  content: "\f074";
}
.fa-comment:before {
  content: "\f075";
}
.fa-magnet:before {
  content: "\f076";
}
.fa-chevron-up:before {
  content: "\f077";
}
.fa-chevron-down:before {
  content: "\f078";
}
.fa-retweet:before {
  content: "\f079";
}
.fa-shopping-cart:before {
  content: "\f07a";
}
.fa-folder:before {
  content: "\f07b";
}
.fa-folder-open:before {
  content: "\f07c";
}
.fa-arrows-v:before {
  content: "\f07d";
}
.fa-arrows-h:before {
  content: "\f07e";
}
.fa-bar-chart-o:before,
.fa-bar-chart:before {
  content: "\f080";
}
.fa-twitter-square:before {
  content: "\f081";
}
.fa-facebook-square:before {
  content: "\f082";
}
.fa-camera-retro:before {
  content: "\f083";
}
.fa-key:before {
  content: "\f084";
}
.fa-gears:before,
.fa-cogs:before {
  content: "\f085";
}
.fa-comments:before {
  content: "\f086";
}
.fa-thumbs-o-up:before {
  content: "\f087";
}
.fa-thumbs-o-down:before {
  content: "\f088";
}
.fa-star-half:before {
  content: "\f089";
}
.fa-heart-o:before {
  content: "\f08a";
}
.fa-sign-out:before {
  content: "\f08b";
}
.fa-linkedin-square:before {
  content: "\f08c";
}
.fa-thumb-tack:before {
  content: "\f08d";
}
.fa-external-link:before {
  content: "\f08e";
}
.fa-sign-in:before {
  content: "\f090";
}
.fa-trophy:before {
  content: "\f091";
}
.fa-github-square:before {
  content: "\f092";
}
.fa-upload:before {
  content: "\f093";
}
.fa-lemon-o:before {
  content: "\f094";
}
.fa-phone:before {
  content: "\f095";
}
.fa-square-o:before {
  content: "\f096";
}
.fa-bookmark-o:before {
  content: "\f097";
}
.fa-phone-square:before {
  content: "\f098";
}
.fa-twitter:before {
  content: "\f099";
}
.fa-facebook:before {
  content: "\f09a";
}
.fa-github:before {
  content: "\f09b";
}
.fa-unlock:before {
  content: "\f09c";
}
.fa-credit-card:before {
  content: "\f09d";
}
.fa-rss:before {
  content: "\f09e";
}
.fa-hdd-o:before {
  content: "\f0a0";
}
.fa-bullhorn:before {
  content: "\f0a1";
}
.fa-bell:before {
  content: "\f0f3";
}
.fa-certificate:before {
  content: "\f0a3";
}
.fa-hand-o-right:before {
  content: "\f0a4";
}
.fa-hand-o-left:before {
  content: "\f0a5";
}
.fa-hand-o-up:before {
  content: "\f0a6";
}
.fa-hand-o-down:before {
  content: "\f0a7";
}
.fa-arrow-circle-left:before {
  content: "\f0a8";
}
.fa-arrow-circle-right:before {
  content: "\f0a9";
}
.fa-arrow-circle-up:before {
  content: "\f0aa";
}
.fa-arrow-circle-down:before {
  content: "\f0ab";
}
.fa-globe:before {
  content: "\f0ac";
}
.fa-wrench:before {
  content: "\f0ad";
}
.fa-tasks:before {
  content: "\f0ae";
}
.fa-filter:before {
  content: "\f0b0";
}
.fa-briefcase:before {
  content: "\f0b1";
}
.fa-arrows-alt:before {
  content: "\f0b2";
}
.fa-group:before,
.fa-users:before {
  content: "\f0c0";
}
.fa-chain:before,
.fa-link:before {
  content: "\f0c1";
}
.fa-cloud:before {
  content: "\f0c2";
}
.fa-flask:before {
  content: "\f0c3";
}
.fa-cut:before,
.fa-scissors:before {
  content: "\f0c4";
}
.fa-copy:before,
.fa-files-o:before {
  content: "\f0c5";
}
.fa-paperclip:before {
  content: "\f0c6";
}
.fa-save:before,
.fa-floppy-o:before {
  content: "\f0c7";
}
.fa-square:before {
  content: "\f0c8";
}
.fa-navicon:before,
.fa-reorder:before,
.fa-bars:before {
  content: "\f0c9";
}
.fa-list-ul:before {
  content: "\f0ca";
}
.fa-list-ol:before {
  content: "\f0cb";
}
.fa-strikethrough:before {
  content: "\f0cc";
}
.fa-underline:before {
  content: "\f0cd";
}
.fa-table:before {
  content: "\f0ce";
}
.fa-magic:before {
  content: "\f0d0";
}
.fa-truck:before {
  content: "\f0d1";
}
.fa-pinterest:before {
  content: "\f0d2";
}
.fa-pinterest-square:before {
  content: "\f0d3";
}
.fa-google-plus-square:before {
  content: "\f0d4";
}
.fa-google-plus:before {
  content: "\f0d5";
}
.fa-money:before {
  content: "\f0d6";
}
.fa-caret-down:before {
  content: "\f0d7";
}
.fa-caret-up:before {
  content: "\f0d8";
}
.fa-caret-left:before {
  content: "\f0d9";
}
.fa-caret-right:before {
  content: "\f0da";
}
.fa-columns:before {
  content: "\f0db";
}
.fa-unsorted:before,
.fa-sort:before {
  content: "\f0dc";
}
.fa-sort-down:before,
.fa-sort-desc:before {
  content: "\f0dd";
}
.fa-sort-up:before,
.fa-sort-asc:before {
  content: "\f0de";
}
.fa-envelope:before {
  content: "\f0e0";
}
.fa-linkedin:before {
  content: "\f0e1";
}
.fa-rotate-left:before,
.fa-undo:before {
  content: "\f0e2";
}
.fa-legal:before,
.fa-gavel:before {
  content: "\f0e3";
}
.fa-dashboard:before,
.fa-tachometer:before {
  content: "\f0e4";
}
.fa-comment-o:before {
  content: "\f0e5";
}
.fa-comments-o:before {
  content: "\f0e6";
}
.fa-flash:before,
.fa-bolt:before {
  content: "\f0e7";
}
.fa-sitemap:before {
  content: "\f0e8";
}
.fa-umbrella:before {
  content: "\f0e9";
}
.fa-paste:before,
.fa-clipboard:before {
  content: "\f0ea";
}
.fa-lightbulb-o:before {
  content: "\f0eb";
}
.fa-exchange:before {
  content: "\f0ec";
}
.fa-cloud-download:before {
  content: "\f0ed";
}
.fa-cloud-upload:before {
  content: "\f0ee";
}
.fa-user-md:before {
  content: "\f0f0";
}
.fa-stethoscope:before {
  content: "\f0f1";
}
.fa-suitcase:before {
  content: "\f0f2";
}
.fa-bell-o:before {
  content: "\f0a2";
}
.fa-coffee:before {
  content: "\f0f4";
}
.fa-cutlery:before {
  content: "\f0f5";
}
.fa-file-text-o:before {
  content: "\f0f6";
}
.fa-building-o:before {
  content: "\f0f7";
}
.fa-hospital-o:before {
  content: "\f0f8";
}
.fa-ambulance:before {
  content: "\f0f9";
}
.fa-medkit:before {
  content: "\f0fa";
}
.fa-fighter-jet:before {
  content: "\f0fb";
}
.fa-beer:before {
  content: "\f0fc";
}
.fa-h-square:before {
  content: "\f0fd";
}
.fa-plus-square:before {
  content: "\f0fe";
}
.fa-angle-double-left:before {
  content: "\f100";
}
.fa-angle-double-right:before {
  content: "\f101";
}
.fa-angle-double-up:before {
  content: "\f102";
}
.fa-angle-double-down:before {
  content: "\f103";
}
.fa-angle-left:before {
  content: "\f104";
}
.fa-angle-right:before {
  content: "\f105";
}
.fa-angle-up:before {
  content: "\f106";
}
.fa-angle-down:before {
  content: "\f107";
}
.fa-desktop:before {
  content: "\f108";
}
.fa-laptop:before {
  content: "\f109";
}
.fa-tablet:before {
  content: "\f10a";
}
.fa-mobile-phone:before,
.fa-mobile:before {
  content: "\f10b";
}
.fa-circle-o:before {
  content: "\f10c";
}
.fa-quote-left:before {
  content: "\f10d";
}
.fa-quote-right:before {
  content: "\f10e";
}
.fa-spinner:before {
  content: "\f110";
}
.fa-circle:before {
  content: "\f111";
}
.fa-mail-reply:before,
.fa-reply:before {
  content: "\f112";
}
.fa-github-alt:before {
  content: "\f113";
}
.fa-folder-o:before {
  content: "\f114";
}
.fa-folder-open-o:before {
  content: "\f115";
}
.fa-smile-o:before {
  content: "\f118";
}
.fa-frown-o:before {
  content: "\f119";
}
.fa-meh-o:before {
  content: "\f11a";
}
.fa-gamepad:before {
  content: "\f11b";
}
.fa-keyboard-o:before {
  content: "\f11c";
}
.fa-flag-o:before {
  content: "\f11d";
}
.fa-flag-checkered:before {
  content: "\f11e";
}
.fa-terminal:before {
  content: "\f120";
}
.fa-code:before {
  content: "\f121";
}
.fa-mail-reply-all:before,
.fa-reply-all:before {
  content: "\f122";
}
.fa-star-half-empty:before,
.fa-star-half-full:before,
.fa-star-half-o:before {
  content: "\f123";
}
.fa-location-arrow:before {
  content: "\f124";
}
.fa-crop:before {
  content: "\f125";
}
.fa-code-fork:before {
  content: "\f126";
}
.fa-unlink:before,
.fa-chain-broken:before {
  content: "\f127";
}
.fa-question:before {
  content: "\f128";
}
.fa-info:before {
  content: "\f129";
}
.fa-exclamation:before {
  content: "\f12a";
}
.fa-superscript:before {
  content: "\f12b";
}
.fa-subscript:before {
  content: "\f12c";
}
.fa-eraser:before {
  content: "\f12d";
}
.fa-puzzle-piece:before {
  content: "\f12e";
}
.fa-microphone:before {
  content: "\f130";
}
.fa-microphone-slash:before {
  content: "\f131";
}
.fa-shield:before {
  content: "\f132";
}
.fa-calendar-o:before {
  content: "\f133";
}
.fa-fire-extinguisher:before {
  content: "\f134";
}
.fa-rocket:before {
  content: "\f135";
}
.fa-maxcdn:before {
  content: "\f136";
}
.fa-chevron-circle-left:before {
  content: "\f137";
}
.fa-chevron-circle-right:before {
  content: "\f138";
}
.fa-chevron-circle-up:before {
  content: "\f139";
}
.fa-chevron-circle-down:before {
  content: "\f13a";
}
.fa-html5:before {
  content: "\f13b";
}
.fa-css3:before {
  content: "\f13c";
}
.fa-anchor:before {
  content: "\f13d";
}
.fa-unlock-alt:before {
  content: "\f13e";
}
.fa-bullseye:before {
  content: "\f140";
}
.fa-ellipsis-h:before {
  content: "\f141";
}
.fa-ellipsis-v:before {
  content: "\f142";
}
.fa-rss-square:before {
  content: "\f143";
}
.fa-play-circle:before {
  content: "\f144";
}
.fa-ticket:before {
  content: "\f145";
}
.fa-minus-square:before {
  content: "\f146";
}
.fa-minus-square-o:before {
  content: "\f147";
}
.fa-level-up:before {
  content: "\f148";
}
.fa-level-down:before {
  content: "\f149";
}
.fa-check-square:before {
  content: "\f14a";
}
.fa-pencil-square:before {
  content: "\f14b";
}
.fa-external-link-square:before {
  content: "\f14c";
}
.fa-share-square:before {
  content: "\f14d";
}
.fa-compass:before {
  content: "\f14e";
}
.fa-toggle-down:before,
.fa-caret-square-o-down:before {
  content: "\f150";
}
.fa-toggle-up:before,
.fa-caret-square-o-up:before {
  content: "\f151";
}
.fa-toggle-right:before,
.fa-caret-square-o-right:before {
  content: "\f152";
}
.fa-euro:before,
.fa-eur:before {
  content: "\f153";
}
.fa-gbp:before {
  content: "\f154";
}
.fa-dollar:before,
.fa-usd:before {
  content: "\f155";
}
.fa-rupee:before,
.fa-inr:before {
  content: "\f156";
}
.fa-cny:before,
.fa-rmb:before,
.fa-yen:before,
.fa-jpy:before {
  content: "\f157";
}
.fa-ruble:before,
.fa-rouble:before,
.fa-rub:before {
  content: "\f158";
}
.fa-won:before,
.fa-krw:before {
  content: "\f159";
}
.fa-bitcoin:before,
.fa-btc:before {
  content: "\f15a";
}
.fa-file:before {
  content: "\f15b";
}
.fa-file-text:before {
  content: "\f15c";
}
.fa-sort-alpha-asc:before {
  content: "\f15d";
}
.fa-sort-alpha-desc:before {
  content: "\f15e";
}
.fa-sort-amount-asc:before {
  content: "\f160";
}
.fa-sort-amount-desc:before {
  content: "\f161";
}
.fa-sort-numeric-asc:before {
  content: "\f162";
}
.fa-sort-numeric-desc:before {
  content: "\f163";
}
.fa-thumbs-up:before {
  content: "\f164";
}
.fa-thumbs-down:before {
  content: "\f165";
}
.fa-youtube-square:before {
  content: "\f166";
}
.fa-youtube:before {
  content: "\f167";
}
.fa-xing:before {
  content: "\f168";
}
.fa-xing-square:before {
  content: "\f169";
}
.fa-youtube-play:before {
  content: "\f16a";
}
.fa-dropbox:before {
  content: "\f16b";
}
.fa-stack-overflow:before {
  content: "\f16c";
}
.fa-instagram:before {
  content: "\f16d";
}
.fa-flickr:before {
  content: "\f16e";
}
.fa-adn:before {
  content: "\f170";
}
.fa-bitbucket:before {
  content: "\f171";
}
.fa-bitbucket-square:before {
  content: "\f172";
}
.fa-tumblr:before {
  content: "\f173";
}
.fa-tumblr-square:before {
  content: "\f174";
}
.fa-long-arrow-down:before {
  content: "\f175";
}
.fa-long-arrow-up:before {
  content: "\f176";
}
.fa-long-arrow-left:before {
  content: "\f177";
}
.fa-long-arrow-right:before {
  content: "\f178";
}
.fa-apple:before {
  content: "\f179";
}
.fa-windows:before {
  content: "\f17a";
}
.fa-android:before {
  content: "\f17b";
}
.fa-linux:before {
  content: "\f17c";
}
.fa-dribbble:before {
  content: "\f17d";
}
.fa-skype:before {
  content: "\f17e";
}
.fa-foursquare:before {
  content: "\f180";
}
.fa-trello:before {
  content: "\f181";
}
.fa-female:before {
  content: "\f182";
}
.fa-male:before {
  content: "\f183";
}
.fa-gittip:before {
  content: "\f184";
}
.fa-sun-o:before {
  content: "\f185";
}
.fa-moon-o:before {
  content: "\f186";
}
.fa-archive:before {
  content: "\f187";
}
.fa-bug:before {
  content: "\f188";
}
.fa-vk:before {
  content: "\f189";
}
.fa-weibo:before {
  content: "\f18a";
}
.fa-renren:before {
  content: "\f18b";
}
.fa-pagelines:before {
  content: "\f18c";
}
.fa-stack-exchange:before {
  content: "\f18d";
}
.fa-arrow-circle-o-right:before {
  content: "\f18e";
}
.fa-arrow-circle-o-left:before {
  content: "\f190";
}
.fa-toggle-left:before,
.fa-caret-square-o-left:before {
  content: "\f191";
}
.fa-dot-circle-o:before {
  content: "\f192";
}
.fa-wheelchair:before {
  content: "\f193";
}
.fa-vimeo-square:before {
  content: "\f194";
}
.fa-turkish-lira:before,
.fa-try:before {
  content: "\f195";
}
.fa-plus-square-o:before {
  content: "\f196";
}
.fa-space-shuttle:before {
  content: "\f197";
}
.fa-slack:before {
  content: "\f198";
}
.fa-envelope-square:before {
  content: "\f199";
}
.fa-wordpress:before {
  content: "\f19a";
}
.fa-openid:before {
  content: "\f19b";
}
.fa-institution:before,
.fa-bank:before,
.fa-university:before {
  content: "\f19c";
}
.fa-mortar-board:before,
.fa-graduation-cap:before {
  content: "\f19d";
}
.fa-yahoo:before {
  content: "\f19e";
}
.fa-google:before {
  content: "\f1a0";
}
.fa-reddit:before {
  content: "\f1a1";
}
.fa-reddit-square:before {
  content: "\f1a2";
}
.fa-stumbleupon-circle:before {
  content: "\f1a3";
}
.fa-stumbleupon:before {
  content: "\f1a4";
}
.fa-delicious:before {
  content: "\f1a5";
}
.fa-digg:before {
  content: "\f1a6";
}
.fa-pied-piper:before {
  content: "\f1a7";
}
.fa-pied-piper-alt:before {
  content: "\f1a8";
}
.fa-drupal:before {
  content: "\f1a9";
}
.fa-joomla:before {
  content: "\f1aa";
}
.fa-language:before {
  content: "\f1ab";
}
.fa-fax:before {
  content: "\f1ac";
}
.fa-building:before {
  content: "\f1ad";
}
.fa-child:before {
  content: "\f1ae";
}
.fa-paw:before {
  content: "\f1b0";
}
.fa-spoon:before {
  content: "\f1b1";
}
.fa-cube:before {
  content: "\f1b2";
}
.fa-cubes:before {
  content: "\f1b3";
}
.fa-behance:before {
  content: "\f1b4";
}
.fa-behance-square:before {
  content: "\f1b5";
}
.fa-steam:before {
  content: "\f1b6";
}
.fa-steam-square:before {
  content: "\f1b7";
}
.fa-recycle:before {
  content: "\f1b8";
}
.fa-automobile:before,
.fa-car:before {
  content: "\f1b9";
}
.fa-cab:before,
.fa-taxi:before {
  content: "\f1ba";
}
.fa-tree:before {
  content: "\f1bb";
}
.fa-spotify:before {
  content: "\f1bc";
}
.fa-deviantart:before {
  content: "\f1bd";
}
.fa-soundcloud:before {
  content: "\f1be";
}
.fa-database:before {
  content: "\f1c0";
}
.fa-file-pdf-o:before {
  content: "\f1c1";
}
.fa-file-word-o:before {
  content: "\f1c2";
}
.fa-file-excel-o:before {
  content: "\f1c3";
}
.fa-file-powerpoint-o:before {
  content: "\f1c4";
}
.fa-file-photo-o:before,
.fa-file-picture-o:before,
.fa-file-image-o:before {
  content: "\f1c5";
}
.fa-file-zip-o:before,
.fa-file-archive-o:before {
  content: "\f1c6";
}
.fa-file-sound-o:before,
.fa-file-audio-o:before {
  content: "\f1c7";
}
.fa-file-movie-o:before,
.fa-file-video-o:before {
  content: "\f1c8";
}
.fa-file-code-o:before {
  content: "\f1c9";
}
.fa-vine:before {
  content: "\f1ca";
}
.fa-codepen:before {
  content: "\f1cb";
}
.fa-jsfiddle:before {
  content: "\f1cc";
}
.fa-life-bouy:before,
.fa-life-buoy:before,
.fa-life-saver:before,
.fa-support:before,
.fa-life-ring:before {
  content: "\f1cd";
}
.fa-circle-o-notch:before {
  content: "\f1ce";
}
.fa-ra:before,
.fa-rebel:before {
  content: "\f1d0";
}
.fa-ge:before,
.fa-empire:before {
  content: "\f1d1";
}
.fa-git-square:before {
  content: "\f1d2";
}
.fa-git:before {
  content: "\f1d3";
}
.fa-hacker-news:before {
  content: "\f1d4";
}
.fa-tencent-weibo:before {
  content: "\f1d5";
}
.fa-qq:before {
  content: "\f1d6";
}
.fa-wechat:before,
.fa-weixin:before {
  content: "\f1d7";
}
.fa-send:before,
.fa-paper-plane:before {
  content: "\f1d8";
}
.fa-send-o:before,
.fa-paper-plane-o:before {
  content: "\f1d9";
}
.fa-history:before {
  content: "\f1da";
}
.fa-circle-thin:before {
  content: "\f1db";
}
.fa-header:before {
  content: "\f1dc";
}
.fa-paragraph:before {
  content: "\f1dd";
}
.fa-sliders:before {
  content: "\f1de";
}
.fa-share-alt:before {
  content: "\f1e0";
}
.fa-share-alt-square:before {
  content: "\f1e1";
}
.fa-bomb:before {
  content: "\f1e2";
}
.fa-soccer-ball-o:before,
.fa-futbol-o:before {
  content: "\f1e3";
}
.fa-tty:before {
  content: "\f1e4";
}
.fa-binoculars:before {
  content: "\f1e5";
}
.fa-plug:before {
  content: "\f1e6";
}
.fa-slideshare:before {
  content: "\f1e7";
}
.fa-twitch:before {
  content: "\f1e8";
}
.fa-yelp:before {
  content: "\f1e9";
}
.fa-newspaper-o:before {
  content: "\f1ea";
}
.fa-wifi:before {
  content: "\f1eb";
}
.fa-calculator:before {
  content: "\f1ec";
}
.fa-paypal:before {
  content: "\f1ed";
}
.fa-google-wallet:before {
  content: "\f1ee";
}
.fa-cc-visa:before {
  content: "\f1f0";
}
.fa-cc-mastercard:before {
  content: "\f1f1";
}
.fa-cc-discover:before {
  content: "\f1f2";
}
.fa-cc-amex:before {
  content: "\f1f3";
}
.fa-cc-paypal:before {
  content: "\f1f4";
}
.fa-cc-stripe:before {
  content: "\f1f5";
}
.fa-bell-slash:before {
  content: "\f1f6";
}
.fa-bell-slash-o:before {
  content: "\f1f7";
}
.fa-trash:before {
  content: "\f1f8";
}
.fa-copyright:before {
  content: "\f1f9";
}
.fa-at:before {
  content: "\f1fa";
}
.fa-eyedropper:before {
  content: "\f1fb";
}
.fa-paint-brush:before {
  content: "\f1fc";
}
.fa-birthday-cake:before {
  content: "\f1fd";
}
.fa-area-chart:before {
  content: "\f1fe";
}
.fa-pie-chart:before {
  content: "\f200";
}
.fa-line-chart:before {
  content: "\f201";
}
.fa-lastfm:before {
  content: "\f202";
}
.fa-lastfm-square:before {
  content: "\f203";
}
.fa-toggle-off:before {
  content: "\f204";
}
.fa-toggle-on:before {
  content: "\f205";
}
.fa-bicycle:before {
  content: "\f206";
}
.fa-bus:before {
  content: "\f207";
}
.fa-ioxhost:before {
  content: "\f208";
}
.fa-angellist:before {
  content: "\f209";
}
.fa-cc:before {
  content: "\f20a";
}
.fa-shekel:before,
.fa-sheqel:before,
.fa-ils:before {
  content: "\f20b";
}
.fa-meanpath:before {
  content: "\f20c";
}
/*!
*
* IPython base
*
*/
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
code {
  color: #000;
}
pre {
  font-size: inherit;
  line-height: inherit;
}
label {
  font-weight: normal;
}
/* Make the page background atleast 100% the height of the view port */
/* Make the page itself atleast 70% the height of the view port */
.border-box-sizing {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.corner-all {
  border-radius: 2px;
}
.no-padding {
  padding: 0px;
}
/* Flexible box model classes */
/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
/* This file is a compatability layer.  It allows the usage of flexible box 
model layouts accross multiple browsers, including older browsers.  The newest,
universal implementation of the flexible box model is used when available (see
`Modern browsers` comments below).  Browsers that are known to implement this 
new spec completely include:

    Firefox 28.0+
    Chrome 29.0+
    Internet Explorer 11+ 
    Opera 17.0+

Browsers not listed, including Safari, are supported via the styling under the
`Old browsers` comments below.
*/
.hbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
.hbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.vbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
.vbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.hbox.reverse,
.vbox.reverse,
.reverse {
  /* Old browsers */
  -webkit-box-direction: reverse;
  -moz-box-direction: reverse;
  box-direction: reverse;
  /* Modern browsers */
  flex-direction: row-reverse;
}
.hbox.box-flex0,
.vbox.box-flex0,
.box-flex0 {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
  width: auto;
}
.hbox.box-flex1,
.vbox.box-flex1,
.box-flex1 {
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex,
.vbox.box-flex,
.box-flex {
  /* Old browsers */
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex2,
.vbox.box-flex2,
.box-flex2 {
  /* Old browsers */
  -webkit-box-flex: 2;
  -moz-box-flex: 2;
  box-flex: 2;
  /* Modern browsers */
  flex: 2;
}
.box-group1 {
  /*  Deprecated */
  -webkit-box-flex-group: 1;
  -moz-box-flex-group: 1;
  box-flex-group: 1;
}
.box-group2 {
  /* Deprecated */
  -webkit-box-flex-group: 2;
  -moz-box-flex-group: 2;
  box-flex-group: 2;
}
.hbox.start,
.vbox.start,
.start {
  /* Old browsers */
  -webkit-box-pack: start;
  -moz-box-pack: start;
  box-pack: start;
  /* Modern browsers */
  justify-content: flex-start;
}
.hbox.end,
.vbox.end,
.end {
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
}
.hbox.center,
.vbox.center,
.center {
  /* Old browsers */
  -webkit-box-pack: center;
  -moz-box-pack: center;
  box-pack: center;
  /* Modern browsers */
  justify-content: center;
}
.hbox.baseline,
.vbox.baseline,
.baseline {
  /* Old browsers */
  -webkit-box-pack: baseline;
  -moz-box-pack: baseline;
  box-pack: baseline;
  /* Modern browsers */
  justify-content: baseline;
}
.hbox.stretch,
.vbox.stretch,
.stretch {
  /* Old browsers */
  -webkit-box-pack: stretch;
  -moz-box-pack: stretch;
  box-pack: stretch;
  /* Modern browsers */
  justify-content: stretch;
}
.hbox.align-start,
.vbox.align-start,
.align-start {
  /* Old browsers */
  -webkit-box-align: start;
  -moz-box-align: start;
  box-align: start;
  /* Modern browsers */
  align-items: flex-start;
}
.hbox.align-end,
.vbox.align-end,
.align-end {
  /* Old browsers */
  -webkit-box-align: end;
  -moz-box-align: end;
  box-align: end;
  /* Modern browsers */
  align-items: flex-end;
}
.hbox.align-center,
.vbox.align-center,
.align-center {
  /* Old browsers */
  -webkit-box-align: center;
  -moz-box-align: center;
  box-align: center;
  /* Modern browsers */
  align-items: center;
}
.hbox.align-baseline,
.vbox.align-baseline,
.align-baseline {
  /* Old browsers */
  -webkit-box-align: baseline;
  -moz-box-align: baseline;
  box-align: baseline;
  /* Modern browsers */
  align-items: baseline;
}
.hbox.align-stretch,
.vbox.align-stretch,
.align-stretch {
  /* Old browsers */
  -webkit-box-align: stretch;
  -moz-box-align: stretch;
  box-align: stretch;
  /* Modern browsers */
  align-items: stretch;
}
div.error {
  margin: 2em;
  text-align: center;
}
div.error > h1 {
  font-size: 500%;
  line-height: normal;
}
div.error > p {
  font-size: 200%;
  line-height: normal;
}
div.traceback-wrapper {
  text-align: left;
  max-width: 800px;
  margin: auto;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
body {
  background-color: #fff;
  /* This makes sure that the body covers the entire window and needs to
       be in a different element than the display: box in wrapper below */
  position: absolute;
  left: 0px;
  right: 0px;
  top: 0px;
  bottom: 0px;
  overflow: visible;
}
body > #header {
  /* Initially hidden to prevent FLOUC */
  display: none;
  background-color: #fff;
  /* Display over codemirror */
  position: relative;
  z-index: 100;
}
body > #header #header-container {
  padding-bottom: 5px;
  padding-top: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
body > #header .header-bar {
  width: 100%;
  height: 1px;
  background: #e7e7e7;
  margin-bottom: -1px;
}
@media print {
  body > #header {
    display: none !important;
  }
}
#header-spacer {
  width: 100%;
  visibility: hidden;
}
@media print {
  #header-spacer {
    display: none;
  }
}
#ipython_notebook {
  padding-left: 0px;
  padding-top: 1px;
  padding-bottom: 1px;
}
@media (max-width: 991px) {
  #ipython_notebook {
    margin-left: 10px;
  }
}
[dir="rtl"] #ipython_notebook {
  float: right !important;
}
#noscript {
  width: auto;
  padding-top: 16px;
  padding-bottom: 16px;
  text-align: center;
  font-size: 22px;
  color: red;
  font-weight: bold;
}
#ipython_notebook img {
  height: 28px;
}
#site {
  width: 100%;
  display: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  overflow: auto;
}
@media print {
  #site {
    height: auto !important;
  }
}
/* Smaller buttons */
.ui-button .ui-button-text {
  padding: 0.2em 0.8em;
  font-size: 77%;
}
input.ui-button {
  padding: 0.3em 0.9em;
}
span#login_widget {
  float: right;
}
span#login_widget > .button,
#logout {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button:focus,
#logout:focus,
span#login_widget > .button.focus,
#logout.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
span#login_widget > .button:hover,
#logout:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active:hover,
#logout:active:hover,
span#login_widget > .button.active:hover,
#logout.active:hover,
.open > .dropdown-togglespan#login_widget > .button:hover,
.open > .dropdown-toggle#logout:hover,
span#login_widget > .button:active:focus,
#logout:active:focus,
span#login_widget > .button.active:focus,
#logout.active:focus,
.open > .dropdown-togglespan#login_widget > .button:focus,
.open > .dropdown-toggle#logout:focus,
span#login_widget > .button:active.focus,
#logout:active.focus,
span#login_widget > .button.active.focus,
#logout.active.focus,
.open > .dropdown-togglespan#login_widget > .button.focus,
.open > .dropdown-toggle#logout.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  background-image: none;
}
span#login_widget > .button.disabled:hover,
#logout.disabled:hover,
span#login_widget > .button[disabled]:hover,
#logout[disabled]:hover,
fieldset[disabled] span#login_widget > .button:hover,
fieldset[disabled] #logout:hover,
span#login_widget > .button.disabled:focus,
#logout.disabled:focus,
span#login_widget > .button[disabled]:focus,
#logout[disabled]:focus,
fieldset[disabled] span#login_widget > .button:focus,
fieldset[disabled] #logout:focus,
span#login_widget > .button.disabled.focus,
#logout.disabled.focus,
span#login_widget > .button[disabled].focus,
#logout[disabled].focus,
fieldset[disabled] span#login_widget > .button.focus,
fieldset[disabled] #logout.focus {
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button .badge,
#logout .badge {
  color: #fff;
  background-color: #333;
}
.nav-header {
  text-transform: none;
}
#header > span {
  margin-top: 10px;
}
.modal_stretch .modal-dialog {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  min-height: 80vh;
}
.modal_stretch .modal-dialog .modal-body {
  max-height: calc(100vh - 200px);
  overflow: auto;
  flex: 1;
}
@media (min-width: 768px) {
  .modal .modal-dialog {
    width: 700px;
  }
}
@media (min-width: 768px) {
  select.form-control {
    margin-left: 12px;
    margin-right: 12px;
  }
}
/*!
*
* IPython auth
*
*/
.center-nav {
  display: inline-block;
  margin-bottom: -4px;
}
/*!
*
* IPython tree view
*
*/
/* We need an invisible input field on top of the sentense*/
/* "Drag file onto the list ..." */
.alternate_upload {
  background-color: none;
  display: inline;
}
.alternate_upload.form {
  padding: 0;
  margin: 0;
}
.alternate_upload input.fileinput {
  text-align: center;
  vertical-align: middle;
  display: inline;
  opacity: 0;
  z-index: 2;
  width: 12ex;
  margin-right: -12ex;
}
.alternate_upload .btn-upload {
  height: 22px;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
[dir="rtl"] #tabs li {
  float: right;
}
ul#tabs {
  margin-bottom: 4px;
}
[dir="rtl"] ul#tabs {
  margin-right: 0px;
}
ul#tabs a {
  padding-top: 6px;
  padding-bottom: 4px;
}
ul.breadcrumb a:focus,
ul.breadcrumb a:hover {
  text-decoration: none;
}
ul.breadcrumb i.icon-home {
  font-size: 16px;
  margin-right: 4px;
}
ul.breadcrumb span {
  color: #5e5e5e;
}
.list_toolbar {
  padding: 4px 0 4px 0;
  vertical-align: middle;
}
.list_toolbar .tree-buttons {
  padding-top: 1px;
}
[dir="rtl"] .list_toolbar .tree-buttons {
  float: left !important;
}
[dir="rtl"] .list_toolbar .pull-right {
  padding-top: 1px;
  float: left !important;
}
[dir="rtl"] .list_toolbar .pull-left {
  float: right !important;
}
.dynamic-buttons {
  padding-top: 3px;
  display: inline-block;
}
.list_toolbar [class*="span"] {
  min-height: 24px;
}
.list_header {
  font-weight: bold;
  background-color: #EEE;
}
.list_placeholder {
  font-weight: bold;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
}
.list_container {
  margin-top: 4px;
  margin-bottom: 20px;
  border: 1px solid #ddd;
  border-radius: 2px;
}
.list_container > div {
  border-bottom: 1px solid #ddd;
}
.list_container > div:hover .list-item {
  background-color: red;
}
.list_container > div:last-child {
  border: none;
}
.list_item:hover .list_item {
  background-color: #ddd;
}
.list_item a {
  text-decoration: none;
}
.list_item:hover {
  background-color: #fafafa;
}
.list_header > div,
.list_item > div {
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
.list_header > div input,
.list_item > div input {
  margin-right: 7px;
  margin-left: 14px;
  vertical-align: baseline;
  line-height: 22px;
  position: relative;
  top: -1px;
}
.list_header > div .item_link,
.list_item > div .item_link {
  margin-left: -1px;
  vertical-align: baseline;
  line-height: 22px;
}
.new-file input[type=checkbox] {
  visibility: hidden;
}
.item_name {
  line-height: 22px;
  height: 24px;
}
.item_icon {
  font-size: 14px;
  color: #5e5e5e;
  margin-right: 7px;
  margin-left: 7px;
  line-height: 22px;
  vertical-align: baseline;
}
.item_buttons {
  line-height: 1em;
  margin-left: -5px;
}
.item_buttons .btn,
.item_buttons .btn-group,
.item_buttons .input-group {
  float: left;
}
.item_buttons > .btn,
.item_buttons > .btn-group,
.item_buttons > .input-group {
  margin-left: 5px;
}
.item_buttons .btn {
  min-width: 13ex;
}
.item_buttons .running-indicator {
  padding-top: 4px;
  color: #5cb85c;
}
.item_buttons .kernel-name {
  padding-top: 4px;
  color: #5bc0de;
  margin-right: 7px;
  float: left;
}
.toolbar_info {
  height: 24px;
  line-height: 24px;
}
.list_item input:not([type=checkbox]) {
  padding-top: 3px;
  padding-bottom: 3px;
  height: 22px;
  line-height: 14px;
  margin: 0px;
}
.highlight_text {
  color: blue;
}
#project_name {
  display: inline-block;
  padding-left: 7px;
  margin-left: -2px;
}
#project_name > .breadcrumb {
  padding: 0px;
  margin-bottom: 0px;
  background-color: transparent;
  font-weight: bold;
}
#tree-selector {
  padding-right: 0px;
}
[dir="rtl"] #tree-selector a {
  float: right;
}
#button-select-all {
  min-width: 50px;
}
#select-all {
  margin-left: 7px;
  margin-right: 2px;
}
.menu_icon {
  margin-right: 2px;
}
.tab-content .row {
  margin-left: 0px;
  margin-right: 0px;
}
.folder_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f114";
}
.folder_icon:before.pull-left {
  margin-right: .3em;
}
.folder_icon:before.pull-right {
  margin-left: .3em;
}
.notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
}
.notebook_icon:before.pull-left {
  margin-right: .3em;
}
.notebook_icon:before.pull-right {
  margin-left: .3em;
}
.running_notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
  color: #5cb85c;
}
.running_notebook_icon:before.pull-left {
  margin-right: .3em;
}
.running_notebook_icon:before.pull-right {
  margin-left: .3em;
}
.file_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f016";
  position: relative;
  top: -2px;
}
.file_icon:before.pull-left {
  margin-right: .3em;
}
.file_icon:before.pull-right {
  margin-left: .3em;
}
#notebook_toolbar .pull-right {
  padding-top: 0px;
  margin-right: -1px;
}
ul#new-menu {
  left: auto;
  right: 0;
}
[dir="rtl"] #new-menu {
  text-align: right;
}
.kernel-menu-icon {
  padding-right: 12px;
  width: 24px;
  content: "\f096";
}
.kernel-menu-icon:before {
  content: "\f096";
}
.kernel-menu-icon-current:before {
  content: "\f00c";
}
#tab_content {
  padding-top: 20px;
}
#running .panel-group .panel {
  margin-top: 3px;
  margin-bottom: 1em;
}
#running .panel-group .panel .panel-heading {
  background-color: #EEE;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
#running .panel-group .panel .panel-heading a:focus,
#running .panel-group .panel .panel-heading a:hover {
  text-decoration: none;
}
#running .panel-group .panel .panel-body {
  padding: 0px;
}
#running .panel-group .panel .panel-body .list_container {
  margin-top: 0px;
  margin-bottom: 0px;
  border: 0px;
  border-radius: 0px;
}
#running .panel-group .panel .panel-body .list_container .list_item {
  border-bottom: 1px solid #ddd;
}
#running .panel-group .panel .panel-body .list_container .list_item:last-child {
  border-bottom: 0px;
}
[dir="rtl"] #running .col-sm-8 {
  float: right !important;
}
.delete-button {
  display: none;
}
.duplicate-button {
  display: none;
}
.rename-button {
  display: none;
}
.shutdown-button {
  display: none;
}
.dynamic-instructions {
  display: inline-block;
  padding-top: 4px;
}
/*!
*
* IPython text editor webapp
*
*/
.selected-keymap i.fa {
  padding: 0px 5px;
}
.selected-keymap i.fa:before {
  content: "\f00c";
}
#mode-menu {
  overflow: auto;
  max-height: 20em;
}
.edit_app #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.edit_app #menubar .navbar {
  /* Use a negative 1 bottom margin, so the border overlaps the border of the
    header */
  margin-bottom: -1px;
}
.dirty-indicator {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator.pull-left {
  margin-right: .3em;
}
.dirty-indicator.pull-right {
  margin-left: .3em;
}
.dirty-indicator-dirty {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-dirty.pull-left {
  margin-right: .3em;
}
.dirty-indicator-dirty.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-clean.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f00c";
}
.dirty-indicator-clean:before.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean:before.pull-right {
  margin-left: .3em;
}
#filename {
  font-size: 16pt;
  display: table;
  padding: 0px 5px;
}
#current-mode {
  padding-left: 5px;
  padding-right: 5px;
}
#texteditor-backdrop {
  padding-top: 20px;
  padding-bottom: 20px;
}
@media not print {
  #texteditor-backdrop {
    background-color: #EEE;
  }
}
@media print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container {
    padding: 0px;
    background-color: #fff;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
  font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
  color: black;
}
.ansired {
  color: darkred;
}
.ansigreen {
  color: darkgreen;
}
.ansiyellow {
  color: #c4a000;
}
.ansiblue {
  color: darkblue;
}
.ansipurple {
  color: darkviolet;
}
.ansicyan {
  color: steelblue;
}
.ansigray {
  color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
  background-color: black;
}
.ansibgred {
  background-color: red;
}
.ansibggreen {
  background-color: green;
}
.ansibgyellow {
  background-color: yellow;
}
.ansibgblue {
  background-color: blue;
}
.ansibgpurple {
  background-color: magenta;
}
.ansibgcyan {
  background-color: cyan;
}
.ansibggray {
  background-color: gray;
}
div.cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  border-radius: 2px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  border-color: transparent;
  width: 100%;
  padding: 5px;
  /* This acts as a spacer between cells, that is outside the border */
  margin: 0px;
  outline: none;
  border-left-width: 1px;
  padding-left: 5px;
  background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
  border-left-color: #90CAF9;
  border-left-color: #E3F2FD;
  border-left-width: 1px;
  padding-left: 5px;
  border-right-color: #E3F2FD;
  border-right-width: 1px;
  background: #E3F2FD;
}
@media print {
  div.cell.jupyter-soft-selected {
    border-color: transparent;
  }
}
div.cell.selected {
  border-color: #ababab;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
  div.cell.selected {
    border-color: transparent;
  }
}
div.cell.selected.jupyter-soft-selected {
  border-left-width: 0;
  padding-left: 6px;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
  border-color: #66BB6A;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
  .edit_mode div.cell.selected {
    border-color: transparent;
  }
}
.prompt {
  /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
  min-width: 14ex;
  /* This padding is tuned to match the padding on the CodeMirror editor. */
  padding: 0.4em;
  margin: 0px;
  font-family: monospace;
  text-align: right;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
  /* Don't highlight prompt number selection */
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  /* Use default cursor */
  cursor: default;
}
@media (max-width: 540px) {
  .prompt {
    text-align: left;
  }
}
div.inner_cell {
  min-width: 0;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
  border: 1px solid #cfcfcf;
  border-radius: 2px;
  background: #f7f7f7;
  line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
   is no content in the output_subarea and the prompt. The main purpose of this is
   to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
  padding-top: 0;
  padding-bottom: 0;
}
div.unrecognized_cell {
  padding: 5px 5px 5px 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.unrecognized_cell .inner_cell {
  border-radius: 2px;
  padding: 5px;
  font-weight: bold;
  color: red;
  border: 1px solid #cfcfcf;
  background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
  color: inherit;
  text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
  color: inherit;
  text-decoration: none;
}
@media (max-width: 540px) {
  div.unrecognized_cell > div.prompt {
    display: none;
  }
}
div.code_cell {
  /* avoid page breaking on code cells when printing */
}
@media print {
  div.code_cell {
    page-break-inside: avoid;
  }
}
/* any special styling for code cells that are currently running goes here */
div.input {
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.input {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
  color: #303F9F;
  border-top: 1px solid transparent;
}
div.input_area > div.highlight {
  margin: 0.4em;
  border: none;
  padding: 0px;
  background-color: transparent;
}
div.input_area > div.highlight > pre {
  margin: 0px;
  border: none;
  padding: 0px;
  background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
 * monospace font with inconsistent normal/bold/italic height.  See
 * notebookmain.js.  Such fonts will have keywords vertically offset with
 * respect to the rest of the text.  The user should select a better font.
 * See: https://github.com/ipython/ipython/issues/1503
 *
 * .CodeMirror span {
 *      vertical-align: bottom;
 * }
 */
.CodeMirror {
  line-height: 1.21429em;
  /* Changed from 1em to our global default */
  font-size: 14px;
  height: auto;
  /* Changed to auto to autogrow */
  background: none;
  /* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
  /*  The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
  /*  We have found that if it is visible, vertical scrollbars appear with font size changes.*/
  overflow-y: hidden;
  overflow-x: auto;
}
.CodeMirror-lines {
  /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
  /* we have set a different line-height and want this to scale with that. */
  padding: 0.4em;
}
.CodeMirror-linenumber {
  padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.CodeMirror pre {
  /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
  /* .CodeMirror-lines */
  padding: 0;
  border: 0;
  border-radius: 0;
}
/*

Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme

*/
.highlight-base {
  color: #000;
}
.highlight-variable {
  color: #000;
}
.highlight-variable-2 {
  color: #1a1a1a;
}
.highlight-variable-3 {
  color: #333333;
}
.highlight-string {
  color: #BA2121;
}
.highlight-comment {
  color: #408080;
  font-style: italic;
}
.highlight-number {
  color: #080;
}
.highlight-atom {
  color: #88F;
}
.highlight-keyword {
  color: #008000;
  font-weight: bold;
}
.highlight-builtin {
  color: #008000;
}
.highlight-error {
  color: #f00;
}
.highlight-operator {
  color: #AA22FF;
  font-weight: bold;
}
.highlight-meta {
  color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
  color: #00f;
}
.highlight-string-2 {
  color: #f50;
}
.highlight-qualifier {
  color: #555;
}
.highlight-bracket {
  color: #997;
}
.highlight-tag {
  color: #170;
}
.highlight-attribute {
  color: #00c;
}
.highlight-header {
  color: blue;
}
.highlight-quote {
  color: #090;
}
.highlight-link {
  color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
  color: #008000;
  font-weight: bold;
}
.cm-s-ipython span.cm-atom {
  color: #88F;
}
.cm-s-ipython span.cm-number {
  color: #080;
}
.cm-s-ipython span.cm-def {
  color: #00f;
}
.cm-s-ipython span.cm-variable {
  color: #000;
}
.cm-s-ipython span.cm-operator {
  color: #AA22FF;
  font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
  color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
  color: #333333;
}
.cm-s-ipython span.cm-comment {
  color: #408080;
  font-style: italic;
}
.cm-s-ipython span.cm-string {
  color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
  color: #f50;
}
.cm-s-ipython span.cm-meta {
  color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
  color: #555;
}
.cm-s-ipython span.cm-builtin {
  color: #008000;
}
.cm-s-ipython span.cm-bracket {
  color: #997;
}
.cm-s-ipython span.cm-tag {
  color: #170;
}
.cm-s-ipython span.cm-attribute {
  color: #00c;
}
.cm-s-ipython span.cm-header {
  color: blue;
}
.cm-s-ipython span.cm-quote {
  color: #090;
}
.cm-s-ipython span.cm-link {
  color: #00c;
}
.cm-s-ipython span.cm-error {
  color: #f00;
}
.cm-s-ipython span.cm-tab {
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
  background-position: right;
  background-repeat: no-repeat;
}
div.output_wrapper {
  /* this position must be relative to enable descendents to be absolute within it */
  position: relative;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
  /* ideally, this would be max-height, but FF barfs all over that */
  height: 24em;
  /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
  width: 100%;
  overflow: auto;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
  margin: 0px;
  padding: 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
div.out_prompt_overlay {
  height: 100%;
  padding: 0px 0.4em;
  position: absolute;
  border-radius: 2px;
}
div.out_prompt_overlay:hover {
  /* use inner shadow to get border that is computed the same on WebKit/FF */
  -webkit-box-shadow: inset 0 0 1px #000;
  box-shadow: inset 0 0 1px #000;
  background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
  color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
  padding: 0px;
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.output_area .MathJax_Display {
  text-align: left !important;
}
div.output_area .rendered_html table {
  margin-left: 0;
  margin-right: 0;
}
div.output_area .rendered_html img {
  margin-left: 0;
  margin-right: 0;
}
div.output_area img,
div.output_area svg {
  max-width: 100%;
  height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
  max-width: none;
}
/* This is needed to protect the pre formating from global settings such
   as that of bootstrap */
.output {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.output_area {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
div.output_area pre {
  margin: 0;
  padding: 0;
  border: 0;
  vertical-align: baseline;
  color: black;
  background-color: transparent;
  border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
   the prompt div. */
div.output_subarea {
  overflow-x: auto;
  padding: 0.4em;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
  max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
  overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
   output types */
/* all text output has this class: */
div.output_text {
  text-align: left;
  color: #000;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
  background: #fdd;
  /* very light red background for stderr */
}
div.output_latex {
  text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
  padding: 0;
}
.js-error {
  color: darkred;
}
/* raw_input styles */
div.raw_input_container {
  line-height: 1.21429em;
  padding-top: 5px;
}
pre.raw_input_prompt {
  /* nothing needed here. */
}
input.raw_input {
  font-family: monospace;
  font-size: inherit;
  color: inherit;
  width: auto;
  /* make sure input baseline aligns with prompt */
  vertical-align: baseline;
  /* padding + margin = 0.5em between prompt and cursor */
  padding: 0em 0.25em;
  margin: 0em 0.25em;
}
input.raw_input:focus {
  box-shadow: none;
}
p.p-space {
  margin-bottom: 10px;
}
div.output_unrecognized {
  padding: 5px;
  font-weight: bold;
  color: red;
}
div.output_unrecognized a {
  color: inherit;
  text-decoration: none;
}
div.output_unrecognized a:hover {
  color: inherit;
  text-decoration: none;
}
.rendered_html {
  color: #000;
  /* any extras will just be numbers: */
}
.rendered_html em {
  font-style: italic;
}
.rendered_html strong {
  font-weight: bold;
}
.rendered_html u {
  text-decoration: underline;
}
.rendered_html :link {
  text-decoration: underline;
}
.rendered_html :visited {
  text-decoration: underline;
}
.rendered_html h1 {
  font-size: 185.7%;
  margin: 1.08em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h2 {
  font-size: 157.1%;
  margin: 1.27em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h3 {
  font-size: 128.6%;
  margin: 1.55em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h4 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h5 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h6 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h1:first-child {
  margin-top: 0.538em;
}
.rendered_html h2:first-child {
  margin-top: 0.636em;
}
.rendered_html h3:first-child {
  margin-top: 0.777em;
}
.rendered_html h4:first-child {
  margin-top: 1em;
}
.rendered_html h5:first-child {
  margin-top: 1em;
}
.rendered_html h6:first-child {
  margin-top: 1em;
}
.rendered_html ul {
  list-style: disc;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ul ul {
  list-style: square;
  margin: 0em 2em;
}
.rendered_html ul ul ul {
  list-style: circle;
  margin: 0em 2em;
}
.rendered_html ol {
  list-style: decimal;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ol ol {
  list-style: upper-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol {
  list-style: lower-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol {
  list-style: lower-roman;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol ol {
  list-style: decimal;
  margin: 0em 2em;
}
.rendered_html * + ul {
  margin-top: 1em;
}
.rendered_html * + ol {
  margin-top: 1em;
}
.rendered_html hr {
  color: black;
  background-color: black;
}
.rendered_html pre {
  margin: 1em 2em;
}
.rendered_html pre,
.rendered_html code {
  border: 0;
  background-color: #fff;
  color: #000;
  font-size: 100%;
  padding: 0px;
}
.rendered_html blockquote {
  margin: 1em 2em;
}
.rendered_html table {
  margin-left: auto;
  margin-right: auto;
  border: 1px solid black;
  border-collapse: collapse;
}
.rendered_html tr,
.rendered_html th,
.rendered_html td {
  border: 1px solid black;
  border-collapse: collapse;
  margin: 1em 2em;
}
.rendered_html td,
.rendered_html th {
  text-align: left;
  vertical-align: middle;
  padding: 4px;
}
.rendered_html th {
  font-weight: bold;
}
.rendered_html * + table {
  margin-top: 1em;
}
.rendered_html p {
  text-align: left;
}
.rendered_html * + p {
  margin-top: 1em;
}
.rendered_html img {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.rendered_html * + img {
  margin-top: 1em;
}
.rendered_html img,
.rendered_html svg {
  max-width: 100%;
  height: auto;
}
.rendered_html img.unconfined,
.rendered_html svg.unconfined {
  max-width: none;
}
div.text_cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.text_cell > div.prompt {
    display: none;
  }
}
div.text_cell_render {
  /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
  outline: none;
  resize: none;
  width: inherit;
  border-style: none;
  padding: 0.5em 0.5em 0.5em 0.4em;
  color: #000;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
a.anchor-link:link {
  text-decoration: none;
  padding: 0px 20px;
  visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
  visibility: visible;
}
.text_cell.rendered .input_area {
  display: none;
}
.text_cell.rendered .rendered_html {
  overflow-x: auto;
  overflow-y: hidden;
}
.text_cell.unrendered .text_cell_render {
  display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
  font-weight: bold;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
  font-size: 185.7%;
}
.cm-header-2 {
  font-size: 157.1%;
}
.cm-header-3 {
  font-size: 128.6%;
}
.cm-header-4 {
  font-size: 110%;
}
.cm-header-5 {
  font-size: 100%;
  font-style: italic;
}
.cm-header-6 {
  font-size: 100%;
  font-style: italic;
}
/*!
*
* IPython notebook webapp
*
*/
@media (max-width: 767px) {
  .notebook_app {
    padding-left: 0px;
    padding-right: 0px;
  }
}
#ipython-main-app {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook_panel {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook {
  font-size: 14px;
  line-height: 20px;
  overflow-y: hidden;
  overflow-x: auto;
  width: 100%;
  /* This spaces the page away from the edge of the notebook area */
  padding-top: 20px;
  margin: 0px;
  outline: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  min-height: 100%;
}
@media not print {
  #notebook-container {
    padding: 15px;
    background-color: #fff;
    min-height: 0;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
@media print {
  #notebook-container {
    width: 100%;
  }
}
div.ui-widget-content {
  border: 1px solid #ababab;
  outline: none;
}
pre.dialog {
  background-color: #f7f7f7;
  border: 1px solid #ddd;
  border-radius: 2px;
  padding: 0.4em;
  padding-left: 2em;
}
p.dialog {
  padding: 0.2em;
}
/* Word-wrap output correctly.  This is the CSS3 spelling, though Firefox seems
   to not honor it correctly.  Webkit browsers (Chrome, rekonq, Safari) do.
 */
pre,
code,
kbd,
samp {
  white-space: pre-wrap;
}
#fonttest {
  font-family: monospace;
}
p {
  margin-bottom: 0;
}
.end_space {
  min-height: 100px;
  transition: height .2s ease;
}
.notebook_app > #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
@media not print {
  .notebook_app {
    background-color: #EEE;
  }
}
kbd {
  border-style: solid;
  border-width: 1px;
  box-shadow: none;
  margin: 2px;
  padding-left: 2px;
  padding-right: 2px;
  padding-top: 1px;
  padding-bottom: 1px;
}
/* CSS for the cell toolbar */
.celltoolbar {
  border: thin solid #CFCFCF;
  border-bottom: none;
  background: #EEE;
  border-radius: 2px 2px 0px 0px;
  width: 100%;
  height: 29px;
  padding-right: 4px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
  display: -webkit-flex;
}
@media print {
  .celltoolbar {
    display: none;
  }
}
.ctb_hideshow {
  display: none;
  vertical-align: bottom;
}
/* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
   Cell toolbars are only shown when the ctb_global_show class is also set.
*/
.ctb_global_show .ctb_show.ctb_hideshow {
  display: block;
}
.ctb_global_show .ctb_show + .input_area,
.ctb_global_show .ctb_show + div.text_cell_input,
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border-top-right-radius: 0px;
  border-top-left-radius: 0px;
}
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border: 1px solid #cfcfcf;
}
.celltoolbar {
  font-size: 87%;
  padding-top: 3px;
}
.celltoolbar select {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
  width: inherit;
  font-size: inherit;
  height: 22px;
  padding: 0px;
  display: inline-block;
}
.celltoolbar select:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.celltoolbar select::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.celltoolbar select:-ms-input-placeholder {
  color: #999;
}
.celltoolbar select::-webkit-input-placeholder {
  color: #999;
}
.celltoolbar select::-ms-expand {
  border: 0;
  background-color: transparent;
}
.celltoolbar select[disabled],
.celltoolbar select[readonly],
fieldset[disabled] .celltoolbar select {
  background-color: #eeeeee;
  opacity: 1;
}
.celltoolbar select[disabled],
fieldset[disabled] .celltoolbar select {
  cursor: not-allowed;
}
textarea.celltoolbar select {
  height: auto;
}
select.celltoolbar select {
  height: 30px;
  line-height: 30px;
}
textarea.celltoolbar select,
select[multiple].celltoolbar select {
  height: auto;
}
.celltoolbar label {
  margin-left: 5px;
  margin-right: 5px;
}
.completions {
  position: absolute;
  z-index: 110;
  overflow: hidden;
  border: 1px solid #ababab;
  border-radius: 2px;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  line-height: 1;
}
.completions select {
  background: white;
  outline: none;
  border: none;
  padding: 0px;
  margin: 0px;
  overflow: auto;
  font-family: monospace;
  font-size: 110%;
  color: #000;
  width: auto;
}
.completions select option.context {
  color: #286090;
}
#kernel_logo_widget {
  float: right !important;
  float: right;
}
#kernel_logo_widget .current_kernel_logo {
  display: none;
  margin-top: -1px;
  margin-bottom: -1px;
  width: 32px;
  height: 32px;
}
#menubar {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  margin-top: 1px;
}
#menubar .navbar {
  border-top: 1px;
  border-radius: 0px 0px 2px 2px;
  margin-bottom: 0px;
}
#menubar .navbar-toggle {
  float: left;
  padding-top: 7px;
  padding-bottom: 7px;
  border: none;
}
#menubar .navbar-collapse {
  clear: left;
}
.nav-wrapper {
  border-bottom: 1px solid #e7e7e7;
}
i.menu-icon {
  padding-top: 4px;
}
ul#help_menu li a {
  overflow: hidden;
  padding-right: 2.2em;
}
ul#help_menu li a i {
  margin-right: -1.2em;
}
.dropdown-submenu {
  position: relative;
}
.dropdown-submenu > .dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: -6px;
  margin-left: -1px;
}
.dropdown-submenu:hover > .dropdown-menu {
  display: block;
}
.dropdown-submenu > a:after {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  display: block;
  content: "\f0da";
  float: right;
  color: #333333;
  margin-top: 2px;
  margin-right: -10px;
}
.dropdown-submenu > a:after.pull-left {
  margin-right: .3em;
}
.dropdown-submenu > a:after.pull-right {
  margin-left: .3em;
}
.dropdown-submenu:hover > a:after {
  color: #262626;
}
.dropdown-submenu.pull-left {
  float: none;
}
.dropdown-submenu.pull-left > .dropdown-menu {
  left: -100%;
  margin-left: 10px;
}
#notification_area {
  float: right !important;
  float: right;
  z-index: 10;
}
.indicator_area {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#kernel_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  border-left: 1px solid;
}
#kernel_indicator .kernel_indicator_name {
  padding-left: 5px;
  padding-right: 5px;
}
#modal_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#readonly-indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  margin-top: 2px;
  margin-bottom: 0px;
  margin-left: 0px;
  margin-right: 0px;
  display: none;
}
.modal_indicator:before {
  width: 1.28571429em;
  text-align: center;
}
.edit_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f040";
}
.edit_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.edit_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.command_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: ' ';
}
.command_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.command_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.kernel_idle_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f10c";
}
.kernel_idle_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_idle_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_busy_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f111";
}
.kernel_busy_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_busy_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_dead_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f1e2";
}
.kernel_dead_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_dead_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_disconnected_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f127";
}
.kernel_disconnected_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_disconnected_icon:before.pull-right {
  margin-left: .3em;
}
.notification_widget {
  color: #777;
  z-index: 10;
  background: rgba(240, 240, 240, 0.5);
  margin-right: 4px;
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget:focus,
.notification_widget.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.notification_widget:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active:hover,
.notification_widget.active:hover,
.open > .dropdown-toggle.notification_widget:hover,
.notification_widget:active:focus,
.notification_widget.active:focus,
.open > .dropdown-toggle.notification_widget:focus,
.notification_widget:active.focus,
.notification_widget.active.focus,
.open > .dropdown-toggle.notification_widget.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  background-image: none;
}
.notification_widget.disabled:hover,
.notification_widget[disabled]:hover,
fieldset[disabled] .notification_widget:hover,
.notification_widget.disabled:focus,
.notification_widget[disabled]:focus,
fieldset[disabled] .notification_widget:focus,
.notification_widget.disabled.focus,
.notification_widget[disabled].focus,
fieldset[disabled] .notification_widget.focus {
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget .badge {
  color: #fff;
  background-color: #333;
}
.notification_widget.warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning:focus,
.notification_widget.warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.notification_widget.warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active:hover,
.notification_widget.warning.active:hover,
.open > .dropdown-toggle.notification_widget.warning:hover,
.notification_widget.warning:active:focus,
.notification_widget.warning.active:focus,
.open > .dropdown-toggle.notification_widget.warning:focus,
.notification_widget.warning:active.focus,
.notification_widget.warning.active.focus,
.open > .dropdown-toggle.notification_widget.warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  background-image: none;
}
.notification_widget.warning.disabled:hover,
.notification_widget.warning[disabled]:hover,
fieldset[disabled] .notification_widget.warning:hover,
.notification_widget.warning.disabled:focus,
.notification_widget.warning[disabled]:focus,
fieldset[disabled] .notification_widget.warning:focus,
.notification_widget.warning.disabled.focus,
.notification_widget.warning[disabled].focus,
fieldset[disabled] .notification_widget.warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.notification_widget.success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success:focus,
.notification_widget.success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.notification_widget.success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active:hover,
.notification_widget.success.active:hover,
.open > .dropdown-toggle.notification_widget.success:hover,
.notification_widget.success:active:focus,
.notification_widget.success.active:focus,
.open > .dropdown-toggle.notification_widget.success:focus,
.notification_widget.success:active.focus,
.notification_widget.success.active.focus,
.open > .dropdown-toggle.notification_widget.success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  background-image: none;
}
.notification_widget.success.disabled:hover,
.notification_widget.success[disabled]:hover,
fieldset[disabled] .notification_widget.success:hover,
.notification_widget.success.disabled:focus,
.notification_widget.success[disabled]:focus,
fieldset[disabled] .notification_widget.success:focus,
.notification_widget.success.disabled.focus,
.notification_widget.success[disabled].focus,
fieldset[disabled] .notification_widget.success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.notification_widget.info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info:focus,
.notification_widget.info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.notification_widget.info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active:hover,
.notification_widget.info.active:hover,
.open > .dropdown-toggle.notification_widget.info:hover,
.notification_widget.info:active:focus,
.notification_widget.info.active:focus,
.open > .dropdown-toggle.notification_widget.info:focus,
.notification_widget.info:active.focus,
.notification_widget.info.active.focus,
.open > .dropdown-toggle.notification_widget.info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  background-image: none;
}
.notification_widget.info.disabled:hover,
.notification_widget.info[disabled]:hover,
fieldset[disabled] .notification_widget.info:hover,
.notification_widget.info.disabled:focus,
.notification_widget.info[disabled]:focus,
fieldset[disabled] .notification_widget.info:focus,
.notification_widget.info.disabled.focus,
.notification_widget.info[disabled].focus,
fieldset[disabled] .notification_widget.info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.notification_widget.danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger:focus,
.notification_widget.danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.notification_widget.danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active:hover,
.notification_widget.danger.active:hover,
.open > .dropdown-toggle.notification_widget.danger:hover,
.notification_widget.danger:active:focus,
.notification_widget.danger.active:focus,
.open > .dropdown-toggle.notification_widget.danger:focus,
.notification_widget.danger:active.focus,
.notification_widget.danger.active.focus,
.open > .dropdown-toggle.notification_widget.danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  background-image: none;
}
.notification_widget.danger.disabled:hover,
.notification_widget.danger[disabled]:hover,
fieldset[disabled] .notification_widget.danger:hover,
.notification_widget.danger.disabled:focus,
.notification_widget.danger[disabled]:focus,
fieldset[disabled] .notification_widget.danger:focus,
.notification_widget.danger.disabled.focus,
.notification_widget.danger[disabled].focus,
fieldset[disabled] .notification_widget.danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger .badge {
  color: #d9534f;
  background-color: #fff;
}
div#pager {
  background-color: #fff;
  font-size: 14px;
  line-height: 20px;
  overflow: hidden;
  display: none;
  position: fixed;
  bottom: 0px;
  width: 100%;
  max-height: 50%;
  padding-top: 8px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  /* Display over codemirror */
  z-index: 100;
  /* Hack which prevents jquery ui resizable from changing top. */
  top: auto !important;
}
div#pager pre {
  line-height: 1.21429em;
  color: #000;
  background-color: #f7f7f7;
  padding: 0.4em;
}
div#pager #pager-button-area {
  position: absolute;
  top: 8px;
  right: 20px;
}
div#pager #pager-contents {
  position: relative;
  overflow: auto;
  width: 100%;
  height: 100%;
}
div#pager #pager-contents #pager-container {
  position: relative;
  padding: 15px 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
div#pager .ui-resizable-handle {
  top: 0px;
  height: 8px;
  background: #f7f7f7;
  border-top: 1px solid #cfcfcf;
  border-bottom: 1px solid #cfcfcf;
  /* This injects handle bars (a short, wide = symbol) for 
        the resize handle. */
}
div#pager .ui-resizable-handle::after {
  content: '';
  top: 2px;
  left: 50%;
  height: 3px;
  width: 30px;
  margin-left: -15px;
  position: absolute;
  border-top: 1px solid #cfcfcf;
}
.quickhelp {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  line-height: 1.8em;
}
.shortcut_key {
  display: inline-block;
  width: 21ex;
  text-align: right;
  font-family: monospace;
}
.shortcut_descr {
  display: inline-block;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
span.save_widget {
  margin-top: 6px;
}
span.save_widget span.filename {
  height: 1em;
  line-height: 1em;
  padding: 3px;
  margin-left: 16px;
  border: none;
  font-size: 146.5%;
  border-radius: 2px;
}
span.save_widget span.filename:hover {
  background-color: #e6e6e6;
}
span.checkpoint_status,
span.autosave_status {
  font-size: small;
}
@media (max-width: 767px) {
  span.save_widget {
    font-size: small;
  }
  span.checkpoint_status,
  span.autosave_status {
    display: none;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  span.checkpoint_status {
    display: none;
  }
  span.autosave_status {
    font-size: x-small;
  }
}
.toolbar {
  padding: 0px;
  margin-left: -5px;
  margin-top: 2px;
  margin-bottom: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.toolbar select,
.toolbar label {
  width: auto;
  vertical-align: middle;
  margin-right: 2px;
  margin-bottom: 0px;
  display: inline;
  font-size: 92%;
  margin-left: 0.3em;
  margin-right: 0.3em;
  padding: 0px;
  padding-top: 3px;
}
.toolbar .btn {
  padding: 2px 8px;
}
.toolbar .btn-group {
  margin-top: 0px;
  margin-left: 5px;
}
#maintoolbar {
  margin-bottom: -3px;
  margin-top: -8px;
  border: 0px;
  min-height: 27px;
  margin-left: 0px;
  padding-top: 11px;
  padding-bottom: 3px;
}
#maintoolbar .navbar-text {
  float: none;
  vertical-align: middle;
  text-align: right;
  margin-left: 5px;
  margin-right: 0px;
  margin-top: 0px;
}
.select-xs {
  height: 24px;
}
.pulse,
.dropdown-menu > li > a.pulse,
li.pulse > a.dropdown-toggle,
li.pulse.open > a.dropdown-toggle {
  background-color: #F37626;
  color: white;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
 * of chance of beeing generated from the ../less/[samename].less file, you can
 * try to get back the less file by reverting somme commit in history
 **/
/*
 * We'll try to get something pretty, so we
 * have some strange css to have the scroll bar on
 * the left with fix button on the top right of the tooltip
 */
@-moz-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-webkit-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-moz-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-webkit-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
/*properties of tooltip after "expand"*/
.bigtooltip {
  overflow: auto;
  height: 200px;
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
}
/*properties of tooltip before "expand"*/
.smalltooltip {
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
  text-overflow: ellipsis;
  overflow: hidden;
  height: 80px;
}
.tooltipbuttons {
  position: absolute;
  padding-right: 15px;
  top: 0px;
  right: 0px;
}
.tooltiptext {
  /*avoid the button to overlap on some docstring*/
  padding-right: 30px;
}
.ipython_tooltip {
  max-width: 700px;
  /*fade-in animation when inserted*/
  -webkit-animation: fadeOut 400ms;
  -moz-animation: fadeOut 400ms;
  animation: fadeOut 400ms;
  -webkit-animation: fadeIn 400ms;
  -moz-animation: fadeIn 400ms;
  animation: fadeIn 400ms;
  vertical-align: middle;
  background-color: #f7f7f7;
  overflow: visible;
  border: #ababab 1px solid;
  outline: none;
  padding: 3px;
  margin: 0px;
  padding-left: 7px;
  font-family: monospace;
  min-height: 50px;
  -moz-box-shadow: 0px 6px 10px -1px #adadad;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  border-radius: 2px;
  position: absolute;
  z-index: 1000;
}
.ipython_tooltip a {
  float: right;
}
.ipython_tooltip .tooltiptext pre {
  border: 0;
  border-radius: 0;
  font-size: 100%;
  background-color: #f7f7f7;
}
.pretooltiparrow {
  left: 0px;
  margin: 0px;
  top: -16px;
  width: 40px;
  height: 16px;
  overflow: hidden;
  position: absolute;
}
.pretooltiparrow:before {
  background-color: #f7f7f7;
  border: 1px #ababab solid;
  z-index: 11;
  content: "";
  position: absolute;
  left: 15px;
  top: 10px;
  width: 25px;
  height: 25px;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
}
ul.typeahead-list i {
  margin-left: -10px;
  width: 18px;
}
ul.typeahead-list {
  max-height: 80vh;
  overflow: auto;
}
ul.typeahead-list > li > a {
  /** Firefox bug **/
  /* see https://github.com/jupyter/notebook/issues/559 */
  white-space: normal;
}
.cmd-palette .modal-body {
  padding: 7px;
}
.cmd-palette form {
  background: white;
}
.cmd-palette input {
  outline: none;
}
.no-shortcut {
  display: none;
}
.command-shortcut:before {
  content: "(command)";
  padding-right: 3px;
  color: #777777;
}
.edit-shortcut:before {
  content: "(edit)";
  padding-right: 3px;
  color: #777777;
}
#find-and-replace #replace-preview .match,
#find-and-replace #replace-preview .insert {
  background-color: #BBDEFB;
  border-color: #90CAF9;
  border-style: solid;
  border-width: 1px;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .match {
  background-color: #FFCDD2;
  border-color: #EF9A9A;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .insert {
  background-color: #C8E6C9;
  border-color: #A5D6A7;
  border-radius: 0px;
}
#find-and-replace #replace-preview {
  max-height: 60vh;
  overflow: auto;
}
#find-and-replace #replace-preview pre {
  padding: 5px 10px;
}
.terminal-app {
  background: #EEE;
}
.terminal-app #header {
  background: #fff;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.terminal-app .terminal {
  width: 100%;
  float: left;
  font-family: monospace;
  color: white;
  background: black;
  padding: 0.4em;
  border-radius: 2px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
}
.terminal-app .terminal,
.terminal-app .terminal dummy-screen {
  line-height: 1em;
  font-size: 14px;
}
.terminal-app .terminal .xterm-rows {
  padding: 10px;
}
.terminal-app .terminal-cursor {
  color: black;
  background: white;
}
.terminal-app #terminado-container {
  margin-top: 20px;
}
/*# sourceMappingURL=style.min.css.map */
    </style>
<style type="text/css">
    .highlight .hll { background-color: #ffffcc }
.highlight  { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
    </style>
<style type="text/css">
    
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }

.ansi-bold { font-weight: bold; }

    </style>
<style type="text/css">
/* Overrides of notebook CSS for static HTML export */
body {
  overflow: visible;
  padding: 8px;
}

div#notebook {
  overflow: visible;
  border-top: none;
}@media print {
  div.cell {
    display: block;
    page-break-inside: avoid;
  } 
  div.output_wrapper { 
    display: block;
    page-break-inside: avoid; 
  }
  div.output { 
    display: block;
    page-break-inside: avoid; 
  }
}
</style>
<!-- Custom stylesheet, it must be in the same directory as the html file -->
<link rel="stylesheet" href="custom.css">
<!-- Loading mathjax macro -->
<!-- Load mathjax -->
<pre><code>&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML&quot;&gt;&lt;/script&gt;
&lt;!-- MathJax configuration --&gt;
&lt;script type=&quot;text/x-mathjax-config&quot;&gt;
MathJax.Hub.Config({
    tex2jax: {
        inlineMath: [ ['$','$'], [&quot;\\(&quot;,&quot;\\)&quot;] ],
        displayMath: [ ['$$','$$'], [&quot;\\[&quot;,&quot;\\]&quot;] ],
        processEscapes: true,
        processEnvironments: true
    },
    // Center justify equations in code and markdown cells. Elsewhere
    // we use CSS to left justify single line equations in code cells.
    displayAlign: 'center',
    &quot;HTML-CSS&quot;: {
        styles: {'.MathJax_Display': {&quot;margin&quot;: 0}},
        linebreaks: { automatic: true }
    }
});
&lt;/script&gt;
</code></pre>
  <div tabindex="-1" id="notebook" class="border-box-sizing">
    <div class="container" id="notebook-container">
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>In supervised machine learning (ML) the goal is to have an accurate model, which based on previously tagged data provides predictions for new data.</p>
<p>The number one question when it comes to modeling is:
<strong>"How can I improve my results?"</strong></p>
<p>There are several basic ways to improve your prediction model:</p>
<ol>
<li>Hyperparameters optimization</li>
<li>Feature extraction</li>
<li>Selecting another model</li>
<li>Adding more data</li>
<li>Feature selection</li>
</ol>
<p>In this blog post, I'll walk you through how I used <strong>Feature Selection</strong> to improve my model.
For the demonstration I'll use the ['Wine' dataset from UCI ML repository](https://archive.ics.uci.edu/ml/datasets/Wine)</p>
<p>Most of the functions are from the [sklearn (scikit-learn) module](http://scikit-learn.org/).</p>
<p>For the plotting functions make sure to read about [matplotlib](https://matplotlib.org/) and [seaborn](https://seaborn.pydata.org).
Both are great plotting modules with great documentation.</p>
<p>Before we jump into the ML model and prediction we need to understand our data.
The process of understanding the data is called EDA - exploratory data analysis.</p>
<h3 id="EDA---exploratory-data-analysis.">EDA - exploratory data analysis.<a class="anchor-link" href="#EDA---exploratory-data-analysis.">&#182;</a></h3><p>UCI kindly gave us some basic information about the data set.
I'll quote some of the more important info given:
"These data are the results of a chemical analysis of wines grown in the same region in Italy but derived from three different cultivars. The analysis determined the quantities of 13 constituents found in each of the three types of wines ... All attributes are continuous ... 1st attribute is class identifier (1-3)"</p>
<p>Based on this, it seems like a classification problem with 3 class labels and 13 numeric attributes.
A classification problem with the goal of predicting the specific cultivar the wine was derived from.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[1]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># Loading a few important modules</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">seaborn</span> <span class="k">as</span> <span class="nn">sns</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
<span class="n">sns</span><span class="o">.</span><span class="n">set</span><span class="p">()</span> <span class="c1">#sets a style for the seaborn plots.</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[2]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># Loading the data from it&#39;s csv,</span>
<span class="c1"># and converting the &#39;label&#39; column to be a string so pandas won&#39;t infer it as a numeric value</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="s1">&#39;wine_data_UCI.csv&#39;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;label&#39;</span><span class="p">:</span><span class="nb">str</span><span class="p">})</span>
<span class="n">data</span><span class="o">.</span><span class="n">head</span><span class="p">()</span> <span class="c1"># print the data&#39;s top five instances</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[2]:</div>
<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }
<pre><code>.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</code></pre>
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>label</th>
      <th>Alcohol</th>
      <th>Malic_acid</th>
      <th>Ash</th>
      <th>Alcalinity_of_ash</th>
      <th>Magnesium</th>
      <th>Total_phenols</th>
      <th>Flavanoids</th>
      <th>Nonflavanoid_phenols</th>
      <th>Proanthocyanins</th>
      <th>Color_intensity</th>
      <th>Hue</th>
      <th>OD280/OD315_of_diluted_wines</th>
      <th>Proline</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>1</td>
      <td>14.23</td>
      <td>1.71</td>
      <td>2.43</td>
      <td>15.6</td>
      <td>127</td>
      <td>2.80</td>
      <td>3.06</td>
      <td>0.28</td>
      <td>2.29</td>
      <td>5.64</td>
      <td>1.04</td>
      <td>3.92</td>
      <td>1065</td>
    </tr>
    <tr>
      <th>1</th>
      <td>1</td>
      <td>13.20</td>
      <td>1.78</td>
      <td>2.14</td>
      <td>11.2</td>
      <td>100</td>
      <td>2.65</td>
      <td>2.76</td>
      <td>0.26</td>
      <td>1.28</td>
      <td>4.38</td>
      <td>1.05</td>
      <td>3.40</td>
      <td>1050</td>
    </tr>
    <tr>
      <th>2</th>
      <td>1</td>
      <td>13.16</td>
      <td>2.36</td>
      <td>2.67</td>
      <td>18.6</td>
      <td>101</td>
      <td>2.80</td>
      <td>3.24</td>
      <td>0.30</td>
      <td>2.81</td>
      <td>5.68</td>
      <td>1.03</td>
      <td>3.17</td>
      <td>1185</td>
    </tr>
    <tr>
      <th>3</th>
      <td>1</td>
      <td>14.37</td>
      <td>1.95</td>
      <td>2.50</td>
      <td>16.8</td>
      <td>113</td>
      <td>3.85</td>
      <td>3.49</td>
      <td>0.24</td>
      <td>2.18</td>
      <td>7.80</td>
      <td>0.86</td>
      <td>3.45</td>
      <td>1480</td>
    </tr>
    <tr>
      <th>4</th>
      <td>1</td>
      <td>13.24</td>
      <td>2.59</td>
      <td>2.87</td>
      <td>21.0</td>
      <td>118</td>
      <td>2.80</td>
      <td>2.69</td>
      <td>0.39</td>
      <td>1.82</td>
      <td>4.32</td>
      <td>1.04</td>
      <td>2.93</td>
      <td>735</td>
    </tr>
  </tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>I named the first columns as 'label'.
This is the target attribute - what we are trying to predict.
This is a classification problem, so the class label ('label') is not a numeric but a nominal value. that's why I'm telling Pandas this columns dtype is 'str'.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[3]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="o">.</span><span class="n">info</span><span class="p">()</span> <span class="c1"># prints out a basic information about the data.</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>&lt;class &#39;pandas.core.frame.DataFrame&#39;&gt;
RangeIndex: 178 entries, 0 to 177
Data columns (total 14 columns):
label                           178 non-null object
Alcohol                         178 non-null float64
Malic_acid                      178 non-null float64
Ash                             178 non-null float64
Alcalinity_of_ash               178 non-null float64
Magnesium                       178 non-null int64
Total_phenols                   178 non-null float64
Flavanoids                      178 non-null float64
Nonflavanoid_phenols            178 non-null float64
Proanthocyanins                 178 non-null float64
Color_intensity                 178 non-null float64
Hue                             178 non-null float64
OD280/OD315_of_diluted_wines    178 non-null float64
Proline                         178 non-null int64
dtypes: float64(11), int64(2), object(1)
memory usage: 19.5+ KB
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>As we can see we have 178 entries (instances).
as we know from UCI's description of the data, we have 13 numeric attributes and one 'object' type attribute (which is the target column).
all the columns of all the rows have data, therefore we see "178 non-null" next to every column description.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[4]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">())</span> <span class="c1"># prints out how many times each value in the &#39;label&#39; column is appearing.</span>
<span class="n">sns</span><span class="o">.</span><span class="n">countplot</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">])</span> <span class="c1"># plots the above print</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>2    71
1    59
3    48
Name: label, dtype: int64
</pre>
</div>
</div>
<div class="output_area">
<div class="prompt output_prompt">Out[4]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f19b11a8b38&gt;</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>It's important to check the amount of instances in each class. There is difference between the class labels but It isn't a huge difference.
If the difference was bigger we would be in an imbalanced problem.
That would require a lot of other things to do, but this is for another post.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[5]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># This method prints us some summary statistics for each column in our data.</span>
<span class="n">data</span><span class="o">.</span><span class="n">describe</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[5]:</div>
<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }
<pre><code>.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</code></pre>
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Alcohol</th>
      <th>Malic_acid</th>
      <th>Ash</th>
      <th>Alcalinity_of_ash</th>
      <th>Magnesium</th>
      <th>Total_phenols</th>
      <th>Flavanoids</th>
      <th>Nonflavanoid_phenols</th>
      <th>Proanthocyanins</th>
      <th>Color_intensity</th>
      <th>Hue</th>
      <th>OD280/OD315_of_diluted_wines</th>
      <th>Proline</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>count</th>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
      <td>178.000000</td>
    </tr>
    <tr>
      <th>mean</th>
      <td>13.000618</td>
      <td>2.336348</td>
      <td>2.366517</td>
      <td>19.494944</td>
      <td>99.741573</td>
      <td>2.295112</td>
      <td>2.029270</td>
      <td>0.361854</td>
      <td>1.590899</td>
      <td>5.058090</td>
      <td>0.957449</td>
      <td>2.611685</td>
      <td>746.893258</td>
    </tr>
    <tr>
      <th>std</th>
      <td>0.811827</td>
      <td>1.117146</td>
      <td>0.274344</td>
      <td>3.339564</td>
      <td>14.282484</td>
      <td>0.625851</td>
      <td>0.998859</td>
      <td>0.124453</td>
      <td>0.572359</td>
      <td>2.318286</td>
      <td>0.228572</td>
      <td>0.709990</td>
      <td>314.907474</td>
    </tr>
    <tr>
      <th>min</th>
      <td>11.030000</td>
      <td>0.740000</td>
      <td>1.360000</td>
      <td>10.600000</td>
      <td>70.000000</td>
      <td>0.980000</td>
      <td>0.340000</td>
      <td>0.130000</td>
      <td>0.410000</td>
      <td>1.280000</td>
      <td>0.480000</td>
      <td>1.270000</td>
      <td>278.000000</td>
    </tr>
    <tr>
      <th>25%</th>
      <td>12.362500</td>
      <td>1.602500</td>
      <td>2.210000</td>
      <td>17.200000</td>
      <td>88.000000</td>
      <td>1.742500</td>
      <td>1.205000</td>
      <td>0.270000</td>
      <td>1.250000</td>
      <td>3.220000</td>
      <td>0.782500</td>
      <td>1.937500</td>
      <td>500.500000</td>
    </tr>
    <tr>
      <th>50%</th>
      <td>13.050000</td>
      <td>1.865000</td>
      <td>2.360000</td>
      <td>19.500000</td>
      <td>98.000000</td>
      <td>2.355000</td>
      <td>2.135000</td>
      <td>0.340000</td>
      <td>1.555000</td>
      <td>4.690000</td>
      <td>0.965000</td>
      <td>2.780000</td>
      <td>673.500000</td>
    </tr>
    <tr>
      <th>75%</th>
      <td>13.677500</td>
      <td>3.082500</td>
      <td>2.557500</td>
      <td>21.500000</td>
      <td>107.000000</td>
      <td>2.800000</td>
      <td>2.875000</td>
      <td>0.437500</td>
      <td>1.950000</td>
      <td>6.200000</td>
      <td>1.120000</td>
      <td>3.170000</td>
      <td>985.000000</td>
    </tr>
    <tr>
      <th>max</th>
      <td>14.830000</td>
      <td>5.800000</td>
      <td>3.230000</td>
      <td>30.000000</td>
      <td>162.000000</td>
      <td>3.880000</td>
      <td>5.080000</td>
      <td>0.660000</td>
      <td>3.580000</td>
      <td>13.000000</td>
      <td>1.710000</td>
      <td>4.000000</td>
      <td>1680.000000</td>
    </tr>
  </tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>This is probably only informative to people who have some experience in statistics.
Let's try to plot this information and see if it helps us understand.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[6]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># box plots are best for plotting summary statistics.</span>
<span class="n">sns</span><span class="o">.</span><span class="n">boxplot</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[6]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f197b282048&gt;</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Unfortunately this is not a very informative plot becasue the data is not in the same value range.
We can resolve the problem by plotting each column side by side.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[7]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data_to_plot</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">:]</span>
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">ncols</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">data_to_plot</span><span class="o">.</span><span class="n">columns</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">right</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">wspace</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data_to_plot</span><span class="o">.</span><span class="n">columns</span><span class="p">):</span>
    <span class="n">sns</span><span class="o">.</span><span class="n">boxplot</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="n">data_to_plot</span><span class="p">[</span><span class="n">col</span><span class="p">],</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">ax</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>This is a better way to plot the data.</p>
<p>We can see that we have some outliers (based on the [IQR calculation](https://en.wikipedia.org/wiki/Interquartile_range)) in almost all the feaures.
These outliers deserve a second look, but we won't deal with them right now.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Pair plot is a great way to see a scatter plot of all the data, of course only for two features at a time.
Pair plot is good for small amout of features and for first glance at the columns (features), afterwords in my opinion a simple scatterplot with the relevant columns is better.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[8]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">columns_to_plot</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
<span class="n">columns_to_plot</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s1">&#39;label&#39;</span><span class="p">)</span>
<span class="n">sns</span><span class="o">.</span><span class="n">pairplot</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">hue</span><span class="o">=</span><span class="s1">&#39;label&#39;</span><span class="p">,</span> <span class="nb">vars</span><span class="o">=</span><span class="n">columns_to_plot</span><span class="p">)</span> <span class="c1"># the hue parameter colors data instances baces on their value in the &#39;label&#39; column.</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[8]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>&lt;seaborn.axisgrid.PairGrid at 0x7f197b181fd0&gt;</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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JxnztJZE43RFra2hWC3dsxveynrZNRIbnUdjnFI6CZkuAAVstxtbFP0oPnYsdNa0hGfm0naSSgMVCKRlZcxTPOHxET6wvpH42G7PBsodydR3qdahlDvW8zxMtNOYKB020k7joAsREaViq8cGklmUQ5mRKBZSvV68vrTdJYrhdNabvFdITrpiLNVNsUSpSnc7knFK2SqVWN9oHPM+oM3GDFW0bjwzl/INY54SYXxQLgmP50WLBUWMZwrD+o6yUXRclu7dg6Kj7YxLIiJKO7aVScJ2MVFy2Fanzcb6mLYLxirlC8Y65RIuqKINyYZUu0RbiTFPiTA+KJdI8bwry88Kp8xgfUfZKDwuKyr0rLuIiGjTsK1MEraLiZLDtjptNtbHtF0wVilfMNYpV2ybBVVms/kJAH8LQAngnywWy2sZLhKFYUVI+YYxT4kwPogoX7C+o2zEuCQiIqKtxvYHUXJ4r9BmY4zRdsFYpXzBWKftTsh0AZJhNpuVAL4N4NMA9gL4ktls3pvZUhERERERERERERERERERERERUa7ZLhmq2gHcs1gsAwBgNpu/D+BZALcyWioiIiIiIiIiojT72y9XZboIAABXzxOZLkJWeOm9l5N+7bfP/PtNLAkREREREREREW0Vhd+f/WnWzGbz5wE8YbFYvhb8878CcNxisfyZ3OtXVnx+lUq5lUWk7KTIdAE2irFMYBxTbmAcUy5gHFOu2NaxzDimoJyP4y/+4IUtKk1iubyg6qffejbp16ZyPd54/rvJvjTn45jyAuOYcgHjmHIB45hyAeOYcgHjmHLBto7jdNsuGapSolIpeZEpJzCWKRcwjikXMI4pFzCOKRcwjikXJBPHKSzK2VzPZ7oA2SFrrkcWYX1MuYBxTLmAcUy5gHFMuYBxTLmAcUwUS8h0AZI0CqAh7M+m4N8RERERERERERERERERERERERGlzXbJUHUJQJvZbG5BYCHV7wP4cmaLREREREREREREREREREREREREuWZbZKiyWCwrAP4MwK8B3AbwhsViuZnZUhERERERERERERERERERERERUa5R+P3+TJeBiIiIiIiIiIiIiIiIiIiIiIgoK2yLDFVERERERERERERERERERERERERbgQuqiIiIiIiIiIiIiIiIiIiIiIiIgrigioiIiIiIiIiIiIiIiIiIiIiIKIgLqoiIiIiIiIiIiIiIiIiIiIiIiIK4oIqIiIiIiIiIiIiIiIiIiIiIiCiIC6qIiIiIiIiIiIiIiIiIiIiIiIiCuKCKiIiIiIiIiIiIiIiIiIiIiIgoiAuqiIiIiIiIiIiIiIiIiIiIiIiIgrigioiIiIiIiIiIiIiIiIiIiIiIKIgLqoiIiIiIiIiIiIiIiIiIiIiIiIK4oIqIiIiIiIiIiIiIiIiIiIiIiCiIC6qIiIiIiIiIiIiIiIiIiIiIiIiCuKCKiIiIiIiIiIiIiIiIiIiIiIgoiAuqiIiIiIiIiIiIiIiIiIiIiIiIgrigioiIiIiIiIiIiIiIiIiIiIiIKIgLqoiIiIiIiIiIiIiIiIiIiIiIiIK4oIqIiIiIiIiIiIiIiIiIiIiIiCiIC6qIiIiIiIiIiIiIiIiIiIiIiIiCuKCKiIiIiIiIiIiIiIiIiIiIiIgoiAuqiIiIiIiIiIiIiIiIiIiIiIiIgrigioiIiIiIiIiIiIiIiIiIiIiIKIgLqoiIiIiIiIiIiIiIiIiIiIiIiIK4oIqIiIiIiIiIiIiIiIiIiIiIiCiIC6qIiIiIiIiIiIiIiIiIiIiIiIiCuKCKiIiIiIiIiIiIiIiIiIiIiIgoiAuqiIiIiIiIiIiIiIiIiIiIiIiIgrigioiIiIiIiIiIiIiIiIiIiIiIKIgLqoiIiIiIiIiIiIiIiIiIiIiIiIK4oIqIiIiIiIiIiIiIiIiIiIiIiCiIC6qIiIiIiIiIiIiIiIiIiIiIiIiCuKCKiIiIiIiIiIiIiIiIiIiIiIgoiAuqiIiIiIiIiIiIiIiIiIiIiIiIgrigioiIiIiIiIiIiIiIiIiIiIiIKIgLqoiIiIiIiIiIiIiIiIiIiIiIiIK4oIqIiIiIiIiIiIiIiIiIiIiIiCiIC6qIiIiIiIiIiIiIiIiIiIiIiIiCuKCKiIiIiIiIiIiIiIiIiIiIiIgoiAuqiIiIiIiIiIiIiIiIiIiIiIiIgrigioiIiIiIiIiIiIiIiIiIiIiIKIgLqoiIiIiIiIiIiIiIiIiIiIiIiIK4oIqIiIiIiIiIiIiIiIiIiIiIiCiIC6qIiIiIiIiIiIiIiIiIiIiIiIiCuKCKiIiIiIiIiIiIiIiIiIiIiIgoSJXpAmwGu33en+kyyDEYdHA4ljJdjC2RDd/VaCxWZLQAaZCNsZwN1zZZ26msgHx5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Tr3dB7DbuXQuvNT5Ii75r6I/dA8t1kacqD4Kl05+72QieiC1DfWF7qGVbYgKjP027SXsY6lQGFtED3BsQTsB+22ibGwXtFswlokKr+/rv5X3a1v/5jsFOw7aeuxjiR6eS+fCH5/9Jj4Y7GI72oPYj1KxY0LVFnDpXHA1uGDrNCEYnNnuwyHacYQ2pGziXrm0Ndhv017CPpYKhbFF9ADHFrQTsN8mysZ2QbsFY5mIqHDYxxI9vDZbMypQxXa0R7EfpWLGhCoi2jF4ESUiKhz2sVQojC0iop2F/TZRNrYL2i0Yy5SP+a7PbvchFMz/1vwbeb/2Pwz8YwGPhHYj9rFED4/taG/j+adipNzuAyAiIiIiIiIiIiIiIiIiIiIiIioWrFBFREREREREREREREREVGB9X/+tdb2+9W++U5DjICIiIqK1sUIVERERERERERERERERERERERFRkiIe516UREREREREREREREREREREREREACtUERERERERERERERERERERERERiZhQRURERERERERERERERERERERElMSEKiIiIiIiIiIiIiIiIiIiIiIioiQmVBERERERERERERERERERERERESUxoYqIiIiIiIiIiIiIiIiIiIiIiCiJCVVERERERERERERERERERERERERJTKgiIiIiIiIiIiIiIiIiIiIiIiJKYkIVERERERERERERERERERERERFREhOqiIiIiIiIiIiIiIiIiIiIiIiIkphQRURERERERERERERERERERERElMSEKiIiIiIiIiIiIiIiIiIiIiIioiQmVBERERERERERERERERERERERESUxoYqIiIiIiIiIiIiIiIiIiIiIiCiJCVVERERERERERERERERERERERERJTKgiIiIiIiIiIiIiIiIiIiIiIiJKYkIVERERERERERERERERERERERFREhOqiIiIiIiIiIiIiIiIiIiIiIiIkphQRURERERERERERERERERERERElMSEKiIiIiIiIiIiIiIiIiIiIiIioiQmVBERERERERERERERERERERERESUxoYqIiIiIiIiIiIiIiIiIiIiIiCiJCVVERERERERERERERERERERERERJTKgiIiIiIiIiIiIiIiIiIiIiIiJKYkIVERERERERERERERERERERERFREhOqiIiIiIiIiIiIiIiIiIiIiIiIkphQRURERERERERERERERERERERElMSEKiIiIiIiIiIiIiIiIiIiIiIioiQmVBERERERERERERERERERERERESUxoYqIiIiIiIiIiIiIiIiIiIiIiCiJCVVERERERERERERERERERERERERJTKgiIiIiIiIiIiIiIiIiIiIiIiJKYkIVERERERERERERERERERERERFREhOqiIiIiIiIiIiIiIiIiIiIiIiIkphQRURERERERERERERERERERERElMSEKiIiIiIiIiIiIiIiIiIiIiIioiQmVBERERERERERERERERERERERESUxoYqIiIiIiIiIiIiIiIiIiIiIiCiJCVVERERERERERERERERERERERERJTKgiIiIiIiIiIiIiIiIiIiIiIiJKYkIVERERERERERERERERERERERFREhOqiIiIiIiIiIiIiIiIiIiIiIiIkphQRURERERERERERERERERERERElMSEKiIiIiIiIiIiIiIiIiIiIiIioiQmVBERERERERERERERERERERERESUxoYqIiIiIiIiIiIiIiIiIiIiIiCiJCVVERERERERERERERERERERERERJTKgiIiIiIiIiIiIiIiIiIiIiIiJKUm/3ARRCMDgT3+5jkGKx6BEOz233YWyJYvhbbTaTYlsPYBMUYywXw7nN1046VkD6eBnH22unxdDDKOTfupvjeC/ECP/GhN0cx8VsL8RfpkL/zTs9lvON42KNnWI9LqB4j203jpGDwZl4sX7e+eCxb47dEMeF/P3FdK5y2evHyTjemGKKGx4L43g7FFPcrVexHvteiuNiPQdr2YnHvdXHvJfieKvthPjbLcfIOM5fsZ/zvXx8Oz2ONxsrVG0htVq13YewZfbS37rX7KRzu5OOFdh5x7sX7KVzspf+1s20Fz43/o20nfbiudmLf3MhFOvnWKzHBRTvsRXrcT2snfx38dhpK+yUc8XjpI0opvPBY6HtsJPP9U4+9t1ip56DnXjcO/GYSdpOOJc8xr2n2D9PHh8JmFBFRERERERERERERERERERERESUtCVb/rnd7r8D8AUAAY/Hc0Di+/8jgF9POaZ2ADaPxxNyu933AcwAWAWw4vF4jm/FMRMRERERERERERERERERERER0d6zJQlVAL4D4M8B/KPUNz0ez58A+BMAcLvdzwH4fY/H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SqUCK+KQ5PdWRBFKJScOUnYxRoliYz+hXMcYJjlhPFIqMI5op2JsU65jDNNOxxgnyk3su0S0XcwjtBswzimXZWpCVS+AfYIgtAiCkAfgUwB+GvgCQRDqAv75LIDBrf//KoB3C4KgEwRBB+DdW1/b1dxuD4r3C5LfKxYE7h1KWccYJYqN/YRyHWOY5ITxSKnAOKKdirFNuY4xTDsdY5woN7HvEtF2MY/QbsA4p1yWkQlVoii6APwOvBOhBgH8QBTFAUEQ/lwQhGe3XvZ7giAMCILwDoDfA/D5rffOA/jf4Z2U1Qvgz7e+tuuVdndDmZcX9DVlXh5KT57KUouIgjFGiWJjP/sfY5MAACAASURBVKFcxxgmOWE8UiowjminYmxTrmMM007HGCfKTey7RLRdzCO0GzDOKVepM/VBoij+AsAvQr72pwH//wUAL0R473cAfCetDcxBKkMrWv7wD7F0+RJWRBHFgoDSk6egMrRmu2lEABijRPFgP6FcxxgmOWE8UiowjminYmxTrmMM007HGCfKTey7RLRdzCO0G4TGednBAyg6doJxTrKXsQlVlB4qQyt0hlZUKhVcDo9kiTFKFBv7CeU6xjDJCeORUoFxRDsVY5tyHWOYdjrGOFFuYt8lou1iHqHdIDDOKyuLYbUuZ7tJRDFxQtUOwZMryR1jlCg29hPKdYxhkhPGI6UC44h2KsY25TrGMO10jHGi3MS+Kx9/85nqbDeBKCnMI7QbMM4plyiz3QAiIiIiIiIiIiIiIiIiIiIiIiK54ApVRERERERERERERERERLTr2K+8N9tNyElffuOrcb/2m0/8VRpbQkRElD5coYqIiIiIiIiIiIiIiIiIiIiIiGiLwuPhHpVEREREREREREREREREREREREQAV6giIiIiIiIiIiIiIiIiIiIiIiLy44QqIiIiIiIiIiIiIiIiIiIiIiKiLZxQRUREREREREREREREREREREREtIUTqoiIiIiIiIiIiIiIiIiIiIiIiLZwQhUREREREREREREREREREREREdEWTqgiIiIiIiIiIiIiIiIiIiIiIiLawglVREREREREREREREREREREREREWzihioiIiIiIiIiIiIiIiIiIiIiIaAsnVBEREREREREREREREREREREREW3hhCoiIiIiIiIiIiIiIiIiIiIiIqItnFBFRERERERERERERERERERERES0hROqiIiIiIiIiIiIiIiIiIiIiIiItnBCFRERERERERERERERERERERER0RZOqCIiIiIiIiIiIiIiIiIiIiIiItrCCVVERERERERERERERERERERERERbOKGKiIiIiIiIiIiIiIiIiIiIiIhoCydUERERERERERERERERERERERERbeGEKiIiIiIiIiIiIiIiIiIiIiIioi2cUEVERERERERERERERERERERERLSFE6qIiIiIiIiIiIiIiIiIiIiIiIi2cEIVERERERERERERERERERERERHRFk6oIiIiIiIiIiIiIiIiIiIiIiIi2sIJVURERERERERERERERERERERERFs4oYqIiIiIiIiIiIiIiIiIiIiIiGgLJ1QRERERERERERERERERERERERFt4YQqIiIiIiIiIiIiIiIiIiIiIiKiLZxQRUREREREREREREREREREREREtEWd6Q8UBGE/AKMoiuuCILwHwGEA3xZF0ZbpthAREREREREREREREREREREREQXKxgpVPwCwKQhCC4BvA2gF8I9ZaAcREREREREREREREREREREREVGQbEyocoui6ATwAQD/TRTF/wDAkIV2EBERERERERERERERERERERERBcnGhKp8QRBqADwD4I2trymy0A4iIiIiIiIiIiIiIiIiIiIiIqIg2ZhQ9dcARAAroiheFQShFcBiFtpBREREREREREREREREREREREQUROHxeLLaAEEQVABUoig6stoQIiIiIiIiIiIiIiIiIiIiIiLa9dSZ/kBBEAoBvACgVRTFzwLYB6AdwI8z3RYiIiIiIiIiIiIiIiIiIiIiIqJA2djy71sANAAe3Pq3CcCLWWgHERERERERERERERERERERERFRkGxMqOoSRfEPATgAQBTFlSy1g4iIiIiIiIiIiIiIiIiIiIiIKEg2JjJtBP5DEIT8LLWDiIiIiIiIiIiIiIiIiIiIiIgoSDYmMp0XBOGPAGgFQXgMwA8A/CQL7SAiIiIiIiIiIiIiIiIiIiIiIgqSjQlVfwxAAWAZwF8BuALgz7LQDiIiIiIiIiIiIiIiIiIiIiIioiAKj8eT7TYQERERERERERERERERERERERHJgjrTHygIQj6AzwJoC/x8URS/mum2EBERERERERERERERERERERERBcr4hCoAPwSQB+AygI0sfD4REREREREREREREREREREREZGkbEyo2iuK4oEsfC4REREREREREREREREREREREVFUyix85oggCCVZ+FwiIiIiIiIiIiIiIiIiIiIiIqKosrFC1SKAq4IgvApg3fdFURS/moW2EBERERERERERERERERERERER+WVjQpW49R8REREREREREREREREREREREZGsKDweT7bbQEREREREREREREREREREREREJAsZW6FKEISPi6L4Q0EQ/lep74ui+N9S9VlW67IsZ4npdIWw2day3YyMkMPvWlVVoshqA1JAjrEsh2Mbr1xqKyDdXsZxduVaDG1HOn/XnRzHuyFG+Dt67eQ4lrPdEH+h0v0753osxxvHco0dubYLkG/bdmKNbLUue+T6944H254aOyGO0/nz5XSsotnt7WQcJ0dOccO2MI6zQU5xlyi5tn03xbFcj0EsudjuTLd5N8VxpuVC/O2UNjKO4yf3Y76b25frcZxqmdzyrxPADwEcl/iebE8yqaRWq7LdhIzZTb/rbpNLxzaX2grkXnt3g910THbT75pKu+Hvxt+Rsmk3Hpvd+Dung1z/jnJtFyDftsm1XduVy78X206ZkCvHiu2kZMjpeLAtlA25fKxzue07Ra4eg1xsdy62maTlwrFkG3cfuf892T7yydiEKlEUX9z63y9k6jOJiIiIiIiIiIiIiIiIiIiIiIgSkckVqgAAgiBcAPAagDcAXBRF0ZnpNhAREREREREREREREREREREREUlRZuEz/yMAO4A/ATAtCMKrgiB8NQvtICIiIiIiIiIiIiIiIiIiIiIiCpLxCVWiKPaKovgXAH4DwB8D2A/ghUy3g4iIiIiIiIiIiIiIiIiIiIiIKFQ2tvz7WwAPAbABeB3ApwH0ZrodlDylUgG325PtZlCG8HgTpRb7FKUbY4x2IsY1UXzYVyhXMXYplRhPtNuxD1CmMeaIUoN9iYhInpifd7eMT6gC8ASANQDnAJwF0CuK4mY8bxQEQQXgKoBJURSfTlsLSZJxZgU9A2YMjS+gvakc3R21MFQXZ7tZlCY83kSpxT5F6cYYo53o9ugc3ug1Mq6JYuA5gHIVY5dSifFEux37AGUaY44oNdiXiIjkifmZgCxMqBJFsUMQhFoATwL4LQDfEQThjiiKz8bx9v8NwCCA0nS2kcIZZ1bw9e9ew4bT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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>The diagonal line from the top left side to the right buttom side of the pair plot are histograms of the columns.</p>
<p>Good feature combination for me is a feature combination that separates some of the class labels.
'Flavanoids' in row 7 looks like a good feature combined with the other ones. Same goes for 'Proline' in the last row.</p>
<p>On the other hand 'Malic_acid' (2nd row) does not look like a good feature at all.</p>
<p>We can have a further look at some features:</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[9]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">sns</span><span class="o">.</span><span class="n">lmplot</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="s1">&#39;Proline&#39;</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Flavanoids&#39;</span><span class="p">,</span> <span class="n">hue</span><span class="o">=</span><span class="s1">&#39;label&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">fit_reg</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[9]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>&lt;seaborn.axisgrid.FacetGrid at 0x7f197b181da0&gt;</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[10]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">sns</span><span class="o">.</span><span class="n">lmplot</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="s1">&#39;Hue&#39;</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Flavanoids&#39;</span><span class="p">,</span> <span class="n">hue</span><span class="o">=</span><span class="s1">&#39;label&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">fit_reg</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[10]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>&lt;seaborn.axisgrid.FacetGrid at 0x7f1976dc06d8&gt;</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[11]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># This is a good feature comination to separate the red ones (label 3)</span>
<span class="n">sns</span><span class="o">.</span><span class="n">lmplot</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="s1">&#39;Color_intensity&#39;</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="s1">&#39;Flavanoids&#39;</span><span class="p">,</span> <span class="n">hue</span><span class="o">=</span><span class="s1">&#39;label&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">fit_reg</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[11]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>&lt;seaborn.axisgrid.FacetGrid at 0x7f1976249a58&gt;</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[12]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">sns</span><span class="o">.</span><span class="n">boxplot</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">data</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">],</span> <span class="n">y</span><span class="o">=</span><span class="n">data</span><span class="p">[</span><span class="s1">&#39;OD280/OD315_of_diluted_wines&#39;</span><span class="p">])</span>
<span class="c1"># this is a vey good feature to separate label 1 and 3</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[12]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f1973292e80&gt;</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Another thing that is good to check is the feature correlation. We don't like features that correlate with each other so much.</p>
<p>We will use the [Pearson correlation](https://en.wikipedia.org/wiki/Pearson_correlation_coefficient) to compute pairwise correlation of columns in our data.
It's worth to emphasize that the Pearson correlation is only good for linear correlation, but as we saw from the pair plot, our data dosen't seem to correlate in any other way.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[13]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">18</span><span class="p">,</span><span class="mi">15</span><span class="p">))</span>
<span class="n">sns</span><span class="o">.</span><span class="n">heatmap</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">corr</span><span class="p">(),</span> <span class="n">annot</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">fmt</span><span class="o">=</span><span class="s2">&quot;.1f&quot;</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[13]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f1971a06f28&gt;</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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GlJ43/vAzrIKKQDW2r3A/cBCYD3ws7X2y3/5mi8B1xb27VQgo/D+nsB6Y8xaCtZSec7NvoiIiIiIiIh4nEam+CBjzAvAWmvt657Ocjw0MsV3aGSK79DIFN+ikSm+RSNTfIdGpvgWjUzxbhqZUn6++Wnuw4wxP1MwUuRuT2cRERERERER8UYqpvgYa+3Rl2nGGPMTcMJRd19jrd34d89ljBlAweWTi/vTWnvR8aUUERERERGRSleNLz1c3amYIlhrzyrn4+ZSsL6LiIiIiIiIiM/QArQiIiIiIiIiIm7QyBQRERERERERH+RyOj0dwWtpZIqIiIiIiIiIiBtUTBERERERERERcYOm+YiIiIiIiIj4Il3Np9w0MkVERERERERExA0qpoiIiIiIiIiIuEHTfERERERERER8kab5lJtGpoiIiIiIiIiIuEHFFBERERERERERN2iaj4iIiIiIiIgvcjk9ncBraWSKiIiIiIiIiIgbVEwREREREREREXGDpvmIiIiIiIiI+CJdzafcNDJFRERERERERMQNKqaIiIiIiIiIiLhBxRQRERERERERETdozRQRERERERERH+TSminlppEpIiIiIiIiIiJuUDFFRERERERERMQNmuYjIiIiIiIi4os0zafcVEwRr/VK6AmejlDlZmZGeDqCRwzdlOLpCB4xtcMET0eoco+sfszTETxiXeu7PR3BI3J9dIDsTTuyPR3BIx7F6ekIVc8vjaxc3zvdDnVEeTqCR/jmEQ3ObZ/l6QgiHuGr/8+LiIiIiFQqXyykiIj4Ch3hRURERERERHyR0wdHDVYQjUwREREREREREXGDiikiIiIiIiIiIm7QNB8RERERERERX6Sr+ZSbRqaIiIiIiIiIiLhBxRQRERERERERETdomo+IiIiIiIiIL9I0n3LTyBQRERERERERETeomCIiIiIiIiIi4gYVU0RERERERERE3KA1U0RERERERER8kMulNVPKSyNTRERERERERETcoGKKiIiIiIiIiIgbNM1HRERERERExBfp0sjlppEpIiIiIiIiIiJuUDFFRERERERERMQNmuYjIiIiIiIi4os0zafcNDJFRERERERERMQNKqaIiIiIiIiIiLhB03xEREREREREfJBL03zKTSNTRERERERERETcoGKKiIiIiIiIiIgbNM1HRERERERExBdpmk+5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/2Tn/DVEtT6J3q/fSVCdUBr1a0ubuy/hy973ezr6cXHlO1k54W36Fuv3ga27aV3Y712F/e5Z2O/Ghf3+ysv7jTOf9Beepc7jT+HncJA9dzb5f20n9NobyNv6KznLa9CVizyhGk+jqe78XDXkihS+yBiTbq2tddR9PYFx1trzjTFdgLcpuOrPN8DV1tqmxpiwwvtbUrCuyknAZdba34o/pzHmUuB8a+11xph6wIvAaRQU4ZZYa28xxkwHelEwsuQXCoo29SlagNYPeI+CdVm2ABHApMML0BZ7rUlAurX2qbL6drQtLQb53Jv3k5zSV2LwBUNDyx6aXpO9meXdoyHK45HVZV+yuCZb1/puT0fwiFynbw6QnRKY7ekIHvGoD36Hl5Xre30G2OoI+edGNZBvHtHg3JY7PR3BI6LnL/bzdIaKsH9Yr2r/N1XdDxdWy9+1iik+yBjjDwRaa7ONMScD3wHGWutV1xFTMcV3qJjiO1RM8S0qpvgWFVN8h4opvkXFFO+mYkr5+eYRXkIpmOITCPgBo7ytkCIiIiIiIiLHyenpAN5LxRQfZK1NAzp4OoeIiIiIiIiIN/LV0WgiIiIiIiIiIuWikSkiIiIiIiIiPsilq/mUm0amiIiIiIiIiIi4QcUUERERERERERE3aJqPiIiIiIiIiC/S1XzKTSNTRERERERERETcoGKKiIiIiIiIiIgbVEwREREREREREXGD1kwRERERERER8UG6NHL5aWSKiIiIiIiIiIgbVEwREREREREREXGDpvmIiIiIiIiI+CJdGrncNDJFRERERERERMQNKqaIiIiIiIiIiLhB03xEREREREREfJBL03zKTSNTRERERERERETcoGKKiIiIiIiIiIgbNM1HRERERERExBdpmk+5aWSKiIiIiIiIiIgbVEwREREREREREXGDpvmIiIiIiIiI+CBdzaf8NDJFRERERERERMQNKqaIiIiIiIiIiLhBxRQRERERERERETdozRTxWv4BvjfBb3bGbk9H8Ij2qfU9HcEjlgTEezpClVvX+m5PR/CINuuf9nQEj8j/c62nI3jEugEPeTqCR5j7Ono6QpWb+lKOpyN4xB0ddnk6gkcED+7s6QgekftjkqcjyPHwvT+pKoxGpoiIiIiIiIiIuEHFFBERERERERERN2iaj4iIiIiIiIgP0qWRy08jU0RERERE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jOkL5AL7gGuP93VVTBERERERERHxQc6acTUfrLWzgdlH3fefYj/fUdGvqWk+IiIiIiIiIiJuUDFFRERERERERMQNmuYjIiIiIiIi4oNcNWSajydoZIqIiIiIiIiIiBtUTBERERERERERcYOm+YjXysg4wdMRqlxKbpKnI3hErn8DT0fwiEPOXE9HqHK5Plrjz/9zracjeIR/s7aejuARSZkHPB3BM2qFeTpBlfvL76CnI3hE4EkRno7gGXGNPJ3AQ3zzM6ymcDk1zae8fPOsVURERERERESknFRMERERERERERFxg6b5iIiIiIiIiPggl8vTCbyXRqaIiIiIiIiIiLhBxRQRERERERERETeomCIiIiIiIiIi4gatmSIiIiIiIiLig3Rp5PLTyBQRERERERERETeomCIiIiIiIiIi4gZN8xERERERERHxQU6XpvmUl0amiIiIiIiIiIi4QcUUERERERERERE3aJqPiIiIiIiIiA9yaZpPuWlkioiIiIiIiIiIG1RMERERERERERFxg6b5iIiIiIiIiPggl8vTCbyXRqaIiIiIiIiIiLhBxRQRERERERERETdomo+IiIiIiIiID3Lqaj7lppEpIiIiIiIiIiJuUDFFRERERERERMQNKqaIiIiIiIiIiLhBa6aIiIiIiIiI+CCX1kwpN41MERERERERERFxg4opIiIiIiIiIiJu0DQfERERERERER/kcnk6gfdSMUWkDLV7tKXRpJvw83eQMnM+CS99VmJ79I2DiRrWH/LyyUs9wF/jppO7O8lDaSvWxCn30KNvV7Iys7nv9kls3vBrmW1nvDuNxk0act45V1RhwooX06sVZz46HD9/B3+9v5DfXvi6xPaozqdy5iPXEN7yRFbfMp09s1Z6KGnFG/foHXTt05nsrENMunMKduPWMttOe+txGjZpwBW9rq3ChBWvbq82NHvkBvB3kPjB9//P3n2HN1X2fxx/N2mhLWW0pRNQQPAoIBtEBZkCgiKoKIoDQQX3AFHRR3Hg1sdH3HvAD3DyIFsFBBVkg4DeyFBGd8to6W7y+yOhg7b4FNqEtJ/XdXGR5HyTfNqTnqZ3vvd92P/6NyW2x4y9lKhr++LMd5CXeoid979Jzj7f/vn+edN2nv9sLg6Hg2G9ujBmSM8S2+NSDvD4u19xID2T+nWCeOa2q4gKr++ltJXn0Wde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iIiIiFSApvmIiIiIiIiI1EBOdDafE6XOFBERERERERGRCtBgioiIiIiIiIhIBWiaj4iIiIiIiEgN5HB6O4HvUmeKiIiIiIiIiEgFaDBFRERERERERKQCNJgiIiIiIiIiIlIBWjNFREREREREpAZy6NTIJ0ydKSIiIiIiIiIiFaDBFBERERERERGRCtA0HxEREREREZEayKlpPidMgynis9601fJ2BI9bENHQ2xG8Ij4t19sRvOLbM2riITqNW/YEezuEx20c8Li3I3hFcuYhb0fwiox9P3o7gld0bXO9tyN4xRRnE29H8LjhM2vmz/Yvb/3b2xG8om39pt6O4BUrvB1AvE7TfERE5JRREwdSRKT6qokDKSIiNUVN/NhTREREREREpMZzeDuAD1NnioiIiIiIiIhIBWgwRURERERERESkAjTNR0RERERERKQG0tl8Tpw6U0REREREREREKkCDKSIiIiIiIiIiFaBpPiIiIiIiIiI1kM7mc+LUmSIiIiIiIiIiUgEaTBERERERERERqQANpoiIiIiIiIiIVIDWTBERERERERGpgbRmyolTZ4qIiIiIiIiISAVoMEVEREREREREpAI0zUdERERERESkBnLi5+0IPkudKSIiIiIiIiIiFaDBFBERERERERGRCtA0HxEREREREZEayKFZPidMnSkiIiIiIiIiIhWgwRQRERERERERkQrQNB8RERERERGRGsihs/mcMHWmiIiIiIiIiIhUgAZTREREREREREQqQNN8RERERERERGogp7cD+DB1poiIiIiIiIiIVIAGU0REREREREREKkDTfERERERERERqIIe3A/gwDaaIHMeIx2/inN4dyc3K4aMJb7Bn6+4S22sF1mLsm+OJOD0KZ4GDTT+s4+vnp3spbeUI7t6Zhg+PA7udw18u4OD7n5fYXu/qwdS/5lJwOHAcySJp8n/I27nHS2krT2jv9jR/6ib87DYSpv/Avtdnl9jeaOwlRI/sizPfQV7qYbbf9wY5+1K8lLby1D63C/XuuRNsdjLnzuPItBll1gX2vJDQKU+QMmYseWa7h1NWjVufGEvn3p3Jycrh1fH/ZueWnaVqnvj0ScIiQ7H529m2eitvPfoWDofvvu148tmH6XNRD7KysrnvjkfYsvn3cms/nD6V05o2pt8FwzyYsGq88vITDBzYh8zMLG6+5X42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F5BrjDnszjzNGHPcHutbmg6vGS/eYh4Mrh4dERUVn1b+WSmqsxYtfPs0hifilj3B3o7gFRsz/vZ2BK9Izjzk7QhekbHvR29H8IqubarBKeUraIqzibcjeMXUWjXzZ/uXA77X/VEZ2tZv6u0IXrFi/w+n7sqoFfBFzMhT/m+q4fHTT8nvdU3sTAF4GSi+rPVdwEeWZT2AewHak3jsf+Ga+pLs/r/4X4GzgC8o2X1yvPqyfINrWtImXB0kE40xCe4FaI96C9fX8zuudVj+qdfzCNDVPZCSRNF0pPK8j2v6znr3grjJwNDyio0x2ZZl3QR8YVnW0QVo3z6mrJE789GpZw//QwYRERERERE5CQ5vB/BhNaYzRcpXvMvGl6gzpeZQZ0rNoc6UmkWdKTWLOlNqDnWm1CzqTPFts3ygM+XqU7QzpUYtQCsiIiIiIiIicrJq6jSfGsmyrF+B2sfcfL0vdqWIiIiIiIjIyXGckj0fvkGDKTWIMeZcb2cQERERERER8XWa5iMiIiIiIiIiUgHqTBERERERERGpgRxons+JUmeKiIiIiIiIiEgFaDBFRERERERERKQCNJgiIiIiIiIiIlIBWjNFREREREREpAZyejuAD1NnioiIiIiIiIhIBWgwRURERERERESkAjTNR0RERERERKQGcujMyCdMnSkiIiIiIiIiIhWgwRQRERERERERkQrQNB8RERERERGRGsjh7QA+TJ0pIiIiIiIiIiIVoMEUEREREREREZEK0DQfERERERERkRrI6e0APkydKSIiIiIiIiIiFaDBFBERERERERGRCtA0HxEREREREZEayOHn7QS+S50pIiIiIiIiIiIVoMEUEREREREREZEK0DQfERERERERkRrI4e0APkyDKeKzhmXZvR3B4x5y1vZ2BK/oGRDo7Qhe8dbeBt6O4HFP1dBf6daDXbwdwTtC6ng7gVd0bXO9tyN4xeotn3k7gse93Okxb0fwiql1auaxPGrY2d6O4BUHfsnydgQRr9A0HxERERERERGRCtBgioiIiIiIiIhIBWiaj4iIiIiIiEgNVDMn5VUOdaaIiIiIiIiIiFSABlNERERERERERCpA03xEREREREREaiCnn7cT+C51poiIiIiIiIiIVIAGU0REREREREREKkDTfERERERERERqIJ3N58SpM0VEREREREREpAI0mCIi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gVRMqT1UTKk9VEypZVRMqVVUTKk9VEypXVRMqd5UTDl0muYjVTLGvA+0xXfGIRERERERERFBxRT5A9ba85zOICIiIiIiIofHEd+WcgTT2XxERERERERERAKgYoqIiIiIiIiISAA0zUdERERERESkFvJoos8hU2eKiIiIiIiIiEgAVEwREREREREREQmApvmIiIiIiIiI1EIepwNUY+pMEREREREREREJgIopIiIiIiIiIiIB0DQfERERERERkVpI5/I5dOpMEREREREREREJgIopIiIiIiIiIiIB0DQfERERERERkVpIZ/M5dOpMEREREREREREJgIopIiIiIiIiIiIBUDFFRERERERERCQAWjNFREREREREpBbyuJxOUH2pM0VEREREREREJAAqpoiIiIiIiIiIBEDTfERERERERERqIQ9epyNUW+pMEREREREREREJgIopIiIiIiIiIiIB0DQfERERERERkVpIk3wOnTpTREREREREREQCoGKKiIiIiIiIiEgANM1Hqq0z/l7odISQa/FO7WzEc0fscjqCI8KKGjsdIeTyi/OdjuCIfz2z1+kIjtjo2uN0BEdM8bZ0OoIjHj35n05HCLmbvpvsdARHND6qj9MRHBH3RiOnIzji8xZxTkeQv8DjdIBqTJ0pIiIiIiIiIiIBUDFFRERERERERCQAmuYjIiIiIiIiUgt5dD6fQ6bOFBERERERERGRAKiYIiIiIiIiIiISABVTREREREREREQCoDVTRERERERERGohrZhy6NSZIiIiIiIiIiISABVTREREREREREQCoGk+IiIiIiIiIrWQx+kA1Zg6U0REREREREREAqBiioiIiIiIiIhIADTNR0RERERERKQW8uh8PodMnSkiIiIiIiIiIgFQMUVEREREREREJACa5iMiIiIiIiJSC2mSz6FTZ4qIiIiIiIiISABUTBERERERERERCYCm+YiIiIiIiIjUQh6nA1Rj6kwREREREREREQmAiikiIiIi+BJdRgAAIABJREFUIiIiIgHQNB8RERERERGRWsir8/kcMnWmiIiIiIiIiIgEQMUUEREREREREZEAqJgiIiIiIiIiIhIArZkiIiIiIiIiUgvp1MiHTsUUkSqEmc7UHToa3G6Kvv2MogXvldse3qU3dQePwLMnC4Cir2ZT/O1nTkQNquieJ9H8n1dBmJusGfPIfPbdctubjj6HmIv74y0uoThrD1tueZKirZkOpQ2e6DNOIvGfV4Pbzc6357J9Wvnn3eTSs4gdPhhviQdPXj6pE6dSuH6zQ2mDp2WvjnS/ezjuMDdrpy9k5TMfl9vurhPOmU+MpVmHNhTszGbutVPJ3rLdobTB07h3Mm0mXwFhbra9OZ+tU98vtz1xzBDiL+2Lt9hD0Y7d/Dr+GQq3VP/X+Vl3/512vTtRlL+XDyY8R9qa3yuM6XPzhXQ6vwdRjepz/wmjQx/yMLj0rivo2Psk9ubv5cUJT7Hxx9/Kba8TWYdrn5lAXKsEPCUeVs1fzrsPve5Q2uBo2rsTJ9w3AleYm81vfM6Gpz4qt71J1+M44d4RNDjhKFaN+TfpM79xKGnwnXn3cNr2TqYov5BZE/5DRiWv8/gTWzP40TFERNbh1wWr+Ozu10IfNEgm3f8Yi776lpgmjfng9WkVtnu9Xh54YhqLlywjMrIuU+64iRPMMQ4kDb6HH7mLAQN6k5+Xz5gxE1i16scKYz6Z8xYJCc0oKCgEYOiQ4WRm7gh11KC664Fb6XVmdwryC5gw7k5+/P7nKsc+//qTtGzdgoHdLwhhwuCLOq0LMbdei8vtJvv9T9j90oxy2xtceDYNhw3FW+LBm5/P9smPU7Rhk0NppbbQNB+Ryrjc1D3vavJfvJe8R64nPLk7rrgWFYYVrf6K/MfHk//4+BpRSMHtpvnksfw28m7W9buOxkPPoO4xLcsNyV+7gV+GjOeXs65n9ydfkXj7KIfCBpHbTdI91/D7qLtYP+BaGg3pWeF57/5oIevPGsevZ1/P9uf+R8IdVzoUNnhcbhdn3DeCWX//F9P73EK7c7rSpF1SuTHHX9yLwl25vNHjJla/MIduEy92KG0Qud0cff9VrL1sCqt6/h9Nz+1O1LHlj+/cH37j+4G3sLrveHbMXEqrScMdChs87Xp3IqZNAv/ueRMf3/4ig++r/Nhd99lKnj/nnyFOd/h07HUS8W0Sua3XOF6Z+CzDp1xd6bg5z3/ExL7Xc9fgCbQ72dChV+cQJw0it4v2D17BsksfZFGPm0g673Sij21ebkjB1h18f8OzpL73lUMhD4+je3eiSZsEnut5E3Nuf5EB942sdNyAKaOYc9sLPNfzJpq0SeDoXh1DGzSIzh3Uj2mP3Vfl9sVLlrFpSyqzZ7zI3bdcz72PTA1husNnwIBeHHNMGzp26MW4cRN54skpVY694or/o1vXQXTrOqjaF1J6ndmd1kcfRe+UIdw+fjL3PTKpyrEDzu5Lbm5eCNMdJm43sRP/Qca1E9ly3pXUH9ibiKOPKjckZ/bnbP3b1aQOG8vul98mZsJYh8JKbaJiioOMMQnGmLeMMb8aY74zxsw2xhxbxdjWxpg1QfiaScaYd//EuIl/9WtV8phdjDH/9l/uZYw5LdhfI1jcR7XDsz0Nb1YGlBRTvOpLwtuf4nSsw65ecjv2bkxj7+YMvEXF7Pp4EQ37n1puTO6SH/D6P93JW2mJSIh1ImpQRXU6lsKNaRT5n/fumYto0K9ruTGenPz9l931IsFb/U8jF5fclt2/Z7BnUyaeohLWf7SUNv1PLjemTf+T+PndxQD8Outbmp/e3omoQRXd+Rjyf0+ncJNvf2//8EtiBqSUG7Pn6zV48vcCkLNiHXUSq//r3PQ7mdX/8+3LLSvXE9mwHtFxjSuM27JyPTnbdoU63mHTuX8KX7/3BQAbVv5CvQb1adSs/PPeW7CXn5f4fsWWFBWz8cffaFKNf7Y1PukY8n5LJ3/jNrxFJaR98DXxA7uUG5O/OZPstZvAU/1/lpXVrt/JrPnflwCkrvyVug3rU/+A13n9uMbUjY4ideWvAKz535e069+lwmNVF12SO9CoYYMqty/4cilDB/bF5XLR6cTjyc7OIXN7VggTHh6Dz+7Pm2/4uoaXLVtJo0YNSEho5nCqw6/fWb15b4avi3TV8h9o2KgBzeKbVhhXr34Uo68ZztTHng91xKCre6KhaHMqxVvTobiY3DkLqder/J8R3jJFI1dUzXifFioevEf8vyOViikOMca4gPeBhdbattbak4HbgfggPX6lU7istanW2r/9iYcIejHFWrvcWnu9/2ov4IgtprgaxuDdVTqVwbt7B65GFd9Yh3foStT4x4kcfnOl26ubiPhYilJLn3dR2g4i4qt+XjEX9SN74XehiHZYRSTEUpRWOoWjOG17pc87Zvhgjl3wPAm3jiJt8n9CGfGwqJ/QhJzU0jfUOWlZ1E9oUuUYb4mHvdl5RDaJDmnOYKubEMPeraWv871pWdT5gz+c4y7py64FK0IR7bBqmBDDntTST2T3pGfRML7JH9yjZmgcH0NWmZ9rO9N3/GGhJKphPTr17cJPX/0QiniHRWRCDAVl9nV+ahZ1E2IcTBQ6DRKakF3muWenZ9HggNd5g/gmZKeX/uzLTsuiQULNPRYyMneQEFf6x3Z8XFMyMqv/dM2kpHi2bEndfz11azqJSQmVjn1u2sMsWTqbW2/7R6jiHTbxiXGkbc3Yfz0tNYOExLgK48bffh0vPPNf8vMKQhnvsAiLa0pJeun7tJJt2wmvpIDUYNhQWsx8lZgbr2THQ8+EMqLUUlozxTm9gSJr7f7Jrdba1cYYlzHmYeAswAvcZ60tNynQGBMJPAt0AYqB8dbaBcaYkcD5QDQQBvQ88IsaY1oDM621J/rHDwXqAW2B9621txhjHgSijDGrgB+ttZcZYy4HrgfqAN8A11prS4wxOcCTwNlAPnCOtTbDGHMhcBdQAuy21p5hjOkFTADGAWOBEv/j/gP4L3CstbbIGNMQWL3v+iF/hw+z4rXLKV65GEqKCe/an7oX30DBczWnNf5gGp/bi6iOx7Bh2O1ORwmZrNdmkfXaLBoN7Umz64ax9ebHnY4kh1nTC84gulNb1px/p9NRJATcYW7G/vtGPntlFpmbMw5+BxE54l1xxQ2kpWYQHV2fN998lksvPZ8333zv4Hesxo4/0dCqdUvum/QIzVsmHfwONUT2jI/InvER9c/qTeOrLmX7nQ87HUlqOHWmOOdEoLKP9M8HkoFOwJnAw8aYxAPGXAd4rbUdgEuAV/0FFoCTgL9ZaysUUqqQDAwDOgDDjDEtrbW3AfnW2mR/IeV4/5jTrbXJ+Aokl/nvXx9Yaq3tBCwCrvLf/k9ggP/2oWW/oLX2d2Aa8Lj/aywGFgKD/UMuBt5zspDi3ZOFq3FpxdvVKBbv7gPm2OZlQ0kxAMXffEZY86NDGfGwKMrYQURS6fOOSIylKKPi3OLo0zsRN+4ifr/yPrx7i0MZ8bAoSt9BRGJpa3B4YtNKn/c+uz9eRMP+XavcXl3kpu8kOqn00+roxBhy03dWOcYV5qZOg3oU7MwJac5gK0zPok7z0td5ncQY9qZX3N+NenSkxQ0X8POIB6rt6zzl7/0YO/t+xs6+n+xtu2iYVNqR0TAhhj0ZO//g3tVXn+EDuWf2I9wz+xF2b9tJTJmfa00SYtlZyf4GGPnAWDJ+S2PeS7NCFfWwKEjPIrLMvo5KiqEwvfpP66jKSX8/k1GzpzBq9hRytu2iQZnn3iAhhuwDXufZGTtpUKZTp0FiDNnpNfNYAIhvFkv6ttJOlIxt24lvVvFT/erg6jHDWbJ0NkuWziY9fRstWpQWCpKaJ5CWml7hPmmpvsJoTk4ub7/9ESd36RSyvMEyfPQwZi2cwayFM8jMyCSxeWkje2JSPOlp28qNPymlIx06n8DilbN5Z/YrtGnbiukfvhDq2EFTsm07YWWmcIXFNaU4o+ruqtw5C6nf+/RQRKsRvNXg35FKxZQjT3dgurW2xFqbAXwBpFQy5nUAa+3PwEZg31or86y1gbxjmm+t3W2tLQDWAq0qGdMXOBlY5u9W6QvsqxzsBWb6L38HtPZf/gp4xRhzFb4umYN5Adi3GuIo4OUAnkPQeTb/grtpIq4mcRAWTnhyd0rWLis3xtWgtCU4rH0Knm1bQh0z6PJW/0Kd1klEtIjHFRFO4yFnsGfet+XGRLY/mub3X8fvV95LyY7dDiUNrvzv11G3zPNudPYZZH9W/swWdVqXvmFr0DuFvb+nHvgw1c621Rto1DqBBi2b4Y4I45ihXfltXvnpLL/PW8Fxf+sBQNvBp7D1q7VORA2qnFXriWqTSN2Wcbgiwml6TneyPl1ebkz9E9vQ9l9j+HnEgxTt2ONQ0r9u2X/nMW3QRKYNmsjPc5fT6QLfvmzR+RgKs/Nr1NooZX3+2hzuGjSBuwZNYMXcbzntfN/nC0d3bkd+dh67Mys+7/NvuoSoBvWZPtnRXz9BsXvlr9Q/OoGoo5rhiggj8dzTyPi0+k/JrMqK/37Gy4Pu4OVBd/DL3O848YLuACR1bkthdh65B7zOc7ftojAnn6TObQE48YLu/DKv5n5/enXvykdz5uP1elm95ieio+vTrGn1nPb1n+de27+Q7Mcfz+XSy84HICWlM3v2ZJOeXv6sa2FhYcTG+t6vhYeHM/CsPqxduy7kuf+q116cweBewxjcaxhzZy/g/GFDAEju0oHsPTlkHlBYeOPld+javh89Og/iwkEj+e3XjVxyTvVdOL/wR0vEUc0Jb54A4eHUH9iLvC+WlBsTflTpIttRZ5xK0aatoY4ptZCm+TjnR+DPrF0SqNwAxxeWuVxC5a8JF/Cqtbay+RxF1tp9BcP997fWjjXGnIqv2+Q7Y8zJldx3P2vtV/5FdnsBYdbav7zY7l/i8VD4wfNEXXWX/9TI8/FkbKZO/0so2bKekrXLiOg+mLATUsBTgjcvh4IZTzkaOShKPKT+cxpH//ceCHOz8+3PKPxlE/E3Xkb+D7+w57NvSbx9FO56kbR65jYAirZm8vtVVZ9FoFoo8ZB69zRavzoZl9vNznfmUfjLJuL+z/e8s+d/S8zws4k+vRPe4hJKduewZUL1n+LjLfGw+M5XGfL6LbjC3Pw84wt2rttKyk0XkPn9b/w+bwU/vfUFfZ8Yy2WLH6VgVw7zrqsBZ4Eo8bBh4gucMP1OXGFuMt76nPx1m2l588XkrF7PzrnLaXXn33HXj8T85yYACrdu5+eRDzoc/K/55fNVtOudzPWLHqMofy8fTnhu/7axs+9n2iDfUln9br+EDuecRkRUHcYvfYoVby1g4RPVtyX++wUr6Nj7JB764mn25hfy4s1P7992z+xHuGvQBJokxDDkH38jdf0W7p7lawuf/+onLJox36nYf4m3xMOPt7/MKW9NhDA3W6YvIMduod0tF7J79Qa2ffodjZKP5qSXbyKicX3i+p9Eu5v/xuKeNzsd/S/79fNVHN27E2MWPUpR/l5mTyhd32rU7Cm8POgOAOZOeoXBj15NeGQdNixczYYFq52K/JfdfNeDLFv5Pbt27aHvuZdz7ejhFBf7uumGnTeYM7qlsHjJMs666AqiIiO5d+KNDicOjk/nLGDAgN78sOYL36mRx5a+fpcsnU23roOoW7cOH370XyLCw3GHhbFwwVe8/NJ0B1P/dQvmLaZ3v+4sXD6T/PwCbvlH6RTzWQt9RZcap8TDjgemkvDsA+B2k/3BpxT9upHG145g74/ryPtiCQ0vPoeorp3xFpXgyc4m885/OZ1aagGXVysdO8K/AO1S4EVr7X/8t3UEzsO3MOsgIAZYDpwKRFK61sl4oL21drT/7D/z8HWmXAJ0sdaO+4Ov25rya6bsH2+MmQk8Yq1daIzZCcT51zA5AfgQ3zSfbcaYGKCBtXajMSbHWhvtv//fgLOttSONMW2ttb/6b1+Gb/pPY2CCtfZsY8xNQENr7V1lst0E3ATca6199mDfw5ybz6t1L94N71TPqQZ/ldtd63Y1AIuKKp5ppaZLLs4/+KAaaG6dyIMPqoE2uqr/woiH4sL8CKcjOOL7yNr3Gd5N3012OoIjGh/Vx+kIjoiLauR0BEd83qLiAri1QZvV81xOZwiGMa0vPOLfaD/3+ztH5Pda03wc4u/mOA84039q5B+BB4A3ge/xLcD6OXCLtfbACaDPAG5jzA/ADGCktbaQ4PoP8L0x5g1r7VpgEjDXGPM9vuLNgeu4HOhhY8wP/tM5f43v+ZT1MXCeMWaVMaaH/7Y3gCZA9f7IQERERERERGo0dabIEcPf2XKOtXb4nxmvzpTaQ50ptYc6U2oXdabULupMqT3UmVK7qDOlelNnyqGrfb/V5IhkjHkK3+mgBzmdRUREREREpDbwOB2gGlMxpYYyxnQAXjvg5kJr7alO5DkYa+0/nM4gIiIiIiIi8meomFJDWWt/AJKdziEiIiIiIiJS02gBWhERERERERGRAKgzRURERERERKQW8nLErz97xFJnioiIiIiIiIhIAFRMEREREREREREJgKb5iIiIiIiIiNRCOjXyoVNnioiIiIiIiIhIAFRMEREREREREREJgKb5iIiIiIiIiNRCOpvPoVNnioiIiIiIiIhIAFRMEREREREREREJgKb5iIiIiIiIiNRCOpvPoVNnioiIiIiIiIhIAFRMEREREREREREJgKb5iIiIiIiIiNRCHq/O5nOo1JkiIiIiIiIiIhIAFVNERERERERERAKgYoqIiIiIiIiISAC0ZoqIiIiIiIhILaQVUw6dOlNERERERERERAKgYoqIiIiIiIiISAA0zUdERERERESkFvJoos8hU2eKiIiIiIiIiEgA1Jki1daD70Q5HSHkHkz9wukIjrg1qafTERyxnB1ORwi5eu5YpyM44oYuW5yO4IiIo5s4HcERF7612+kIjniqvsfpCCHX+Kg+TkdwxK5NnzsdwRF7H7/V6QiOWPfaXqcjiDhCxRQRERERERGRWsiraT6HTNN8REREREREREQCoGKKiIiIiIiIiEgANM1HREREREREpBaqfatZBY86U0REREREREREAqBiioiIiIiIiIhIADTNR0RERERERKQW8uhsPodMnSkiIiIiIiIiIgFQMUVEREREREREJACa5iMiIiIiIiJSC3k1zeeQqTNFRERERERERCQAKqaIiIiIiIiIiARAxRQRERERERERkQBozRQRERERERGRWsjjdIBqTJ0pIiIiIiIiIiIBUDFFRERERERERCQAmuYjIiIiIiIiUgt5vTo18qFSZ4qIiIiIiIiISABUTBERERERERERCYCm+YiIiIiIiIjUQh40zedQqTNFRERERERERCQAKqaIiIiI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k3wOI3WmiIiIiIiIiIgEQMUUEREREREREZEAaJqPiIiIiIiISC3k0USfQ6ZiilRbx+2tfY1V7WNaOR3BEXGe2revAby18Jdb7dzTEDm0q9MRnJHQwukEjvj62cedjuCI+POOdzpCyKVzIh3f2Ox0jJDb+/itTkdwRJ0bH3I6giMazxzjdAQRR9TW960iIiIiIodVbSykiIjUFiqmiIiIiIiIiIgEQNN8RERERERERGohrZly6NSZIiIiIiIiIiISABVTREREREREREQCoGk+IiIiIiIiIrWQ16tpPodKnSkiIiIiIiIiIgFQMUVEREREREREJACa5iMiIiIiIiJSC+lsPodOnSkiIiIiIiIiIgFQMUVEREREREREJACa5iMiIiIiIiJSC3k1zeeQqTNFRERERERERCQAKqaIiIiIiIiIiARA03xEREREREREaiGvV9N8DpU6U0REREREREREAqBiioiIiIiIiIhIAFRMEREREREREREJgNZMEREREREREamFPDo18iFTZ4qIiIiIiIiISABUTBERERERERERCYCm+YiIiIiIiIjUQjo18qFTZ4qIiIiIiIiISABUTBERERERERERCYCm+YiIiIiIiIjUQjqbz6FTZ4qIiIiIiIiISABUTBERERERERERCYCm+YhUIbFXR1LuHY7L7Wb99IX8OPXjctvjTjV0mTycxse35MtrprJp1jKHkgbfrffdSPe+3SjIL+DOG+7j5x/WVTn2yVcfokWr5lzQ6/IQJgy+Vj070vPu4bjC3Pz41kKWP1N+f4fVCaf/42OJ69CGgp3ZzL5uKtlbtjuUNriuvecaUvqkUJhfyCPjH2X9mvUVxkx57T5i4mIICwtjzbdrmDrpaTwejwNpgyOpV0dSJpce32uernh8p9wznCbHt2TRtTXj+P7q1wz+Ne97PF4v53VqxRWnmXLbH573Pcs2+l7TBcXFZOXu5cubznYialB9tXYj/3pvER6Pl/O6ncAV/bqU256Wlc2dr88jO78Qj9fL9UNOo0f71s6EDbKHHv4n/fv3Ii8/n2vH3MLq1T9WGDPzkzdIiI8jv6AAgPPOGcn2zB2hjho0YcefROT5V4PbTdGSuez97N1y28NP6Uvdc6/Au8v3HIsWz6RoyVwnogbdXQ/cSq8zu1OQX8CEcXfy4/c/Vzn2+defpGXrFgzsfkEIEwZX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rQUhERERERERkaxSMUVEREREREQkgxry6OGGrjh0ABERERERERGRxkTFFBERERERERGROtA2HxEREREREZEM0jSfFV+m1W8AACAASURBVKeVKSIiIiIiIiIidaBiioiIiIiIiIhIHWibj4iIiIiIiEgGaZrPitPKFBERERERERGROlAxRURERERERESkDrTNR0RERERERCSDNM1nxWllioiIiIiIiIhIHaiYIiIiIiIiIiJSByqmiIiIiIiIiIjUgXqmiIiIiIiIiGSQRiOvOK1MERERERERERGpAxVTRERERERERETqQNt8RERERERERDIol6sIHaHR0soUEREREREREZE6UDFFRERERERERKQOtM1HREREREREJIMqNM1nhWllioiIiIiIiIhIHaiYIiIiIiIiIiJSB0W5nJb1SOM07+8nZe6H9483TQ0dIYizyrPZZfygef8LHSFxYzbvGDpCEM3XbRE6giRo78FloSME8XC30AmSV74wm+9bzpzRKnSEIFbqMC90hCBWf/Wu0BGCaNpp3aLQGerDmh03bfDnVN/89FGD/H+dzb/wIiIiIiIiIiIrSMUUEREREREREZE60DQfERERERERkQzSNJ8Vp5UpIiIiIiIiIiJ1oGKKiIiIiIiIiEgdaJuPiIiIiIiISAZpuu+K08oUEREREREREZE6UDFFRERERERERKQOVEwREREREREREakD9UwRERERERERyaAK9UxZYVqZIiIiIiIiIiJSByqmiIiIiIiIiIjUgbb5iIiIiIiIiGRQDm3zWVFamSIiIiIiIiIiUgcqpoiIiIiIiIiI1IG2+YiIiIiIiIhkUE7TfFaYVqaIiIiIiIiIiNSBiikiIiIiIiIiInWgbT4iIiIiIiIiGVShaT4rTCtTRERERERERETqQMUUEREREREREZE60DYfERERERERkQzSNJ8Vp5UpIiIiIiIiIiJ1oGKKiIiIiIiIiEgdqJgiIiIiIiIiIlIH6pkiIiIiIiIikkEV6pmywlRMEVmK4rW602ynQ6GomLKP36Zs9EtL3Kdkg81puvU+QI6Kad9ROvTe5IMWwNFXHE/Pfr35Zf4v3H3ebXw9fkK125u1aMYZd5xPlzVXoaKigvdfGc1j1z8UKG39aNe3F2te+QcoKWbav4cx+R9PVbt9lRP2o9MRu5IrL6ds+iy+PvdWSr//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3+B3kdcui9/r2PmX/5n33h/HzJmz2OWAozjl+KMpK4tWGx124N7suO2WvDnyPfY8dAAtW7Rg4MVnB04sWVDUkLvjSjj5prGLHVsbGBxP+MkfO4IaGtAuNhq5agPa89x9n/g+twGj3f1fZtYTuAVoT1Tku9nd76kt47y/n5S5H94/3jR12XdKobPKK0JHCOKgef8LHSFxYzbP5rtIzddtETqCJGjvwY1/u8GKeLhb6ATJK1+YzUXgM2e0Ch0hiJU6zFv2nVJo9Vcb/6S/FdG007pFoTPUh3at123w51Sz5k5okP+vtTJFarR4ISU+9jVRb5Oqx/4N/LuG+669+L/l7iOAEVWOn1bl8gcsu9+KiIiIiIiISHDZLJeLiIiIiIiIiKwgrUwRERERERERyaAKtf1YYVqZIiIiIiIiIiJSByqmiIiIiIiIiIjUgYopIiIiIiIiIiJ1oJ4pIiIiIiIiIhmUQz1TVpRWpoiIiIiIiIiI1IGKKSIiIiIiIiIidaBtPiIiIiIiIiIZpNHIK04rU0RERERERERE6kDFFBERERERERGROtA2HxEREREREZEMymmbzwrTyhQRERERERERkTpQMUVEREREREREpA60zUdEREREREQkg3Jom8+K0soUEREREREREZE6UDFFRERERERERKQOtM1HREREREREJIM0zWfFaWWKiIiIiIiIiEgdqJgiIiIiIiIiIlIH2uYjIiIiIiIikkHa5rPitDJFRERERERERKQOVEwREREREREREakDFVNEREREREREROpAPVNEREREREREMkgdU1acVqaIiIiIiIiIiNRBkbr3ioiIiIiIiIgsP61MERERERERERGpAxVTRERERERERETqQMUUEREREREREZE6UDFFRERERERERKQOVEwREREREREREakDFVNEREREREREROpAxRQRERERERERkTpQMUVEREREREREpA5UTBEREckYM9vGzFrFl48ws7+Y2RqhcyXJzIrNrF3oHCL1zcxKQmcQEcmColwuFzqDSINlZrcCS/0lcfczEowjCTCzzsAJwNpAk/xxdx8QKlNSsvrYzWwfYCCwFtHjLgJy7p7aE20zGwf0ADYFHgDuAw50974hcxWamT0CnASUA+8B7YC/u/sNQYMlwMzOJPo+zwb+CfQCLnT3l4MGKyAz6w8MdffZZnYp0Bu42t3HBo5WUGY2AXgSuM/dPwmdJ0lm1gfYwN3vi5/T2rj7V6FzFYqZ/QW4GpgPDAU2A85294eCBiswM1sFuBZY1d33NLPuwLbuPihwNMkYrUwRqd1oYEwtH5I+zwLtgVeAF6p8ZEFWH/vNwDHAyu7ezt3bprmQEitz9xywP3Cbu/+dqLCQdt3dfRZwAPAisA5wdNhIiRkQP/bdgA5Ej/vPYSMV3GVxIaUP8FtgEHBH4ExJ6AF8DvzTzN41sz9mYRWWmV0OXABcFB9qCqS6qADsFv9e7wN8DawPnB80UTL+BbwErBpf/xw4K1gayawmy76LSHa5+/1Vr5tZm/j4nDCJJAGt3P2C0CECyepj/xYYHxcXsmKumZ0PHAX0NbNiohOPtGtqZk2Jiim3uftCM8vK970o/rwX8KC7f2xmRbV9QQqUx5/3Bu529xfM7OqQgZLg7rOBe4B7zGwn4BHgb2b2H2Cgu38ZNGDhHEi04mosgLv/YGZtw0YquPy53N7AE+7+s5mFzJOUTu7+uJldBODuZWZWvqwvEqlvKqaILAcz2wR4EOgIFJnZj8Dv3f3jsMkKw8xmU/v2pjS/wzXYzPZy9yGhgwSQ1cf+J2CImb0O/JI/6O43hYtUcIcRFVJOcvdJZrYmkObHm3cX0bu3HwJvmNlawKygiZIzxsxeJlqNc1F8klkROFOhfW9mdwG7AtebWXMysCo77pmyN3Ac0bbNG4GHgR2AIcCGwcIVVqm75/IFUjNrHTpQAgab2WdE23xOjrc2LQicKQlzzWxl4teqZrYN8HPYSJJF6pkishzM7B3gEncfHl/vC1zr7tsFDVZgZjYQmERUSCoCjgS6ufv/BQ1WAFUKSEVAa6KT6oVko39GZh87QHyCOQf4iConl+5+ZbBQkhgza+LuZaFzFFq8+qgnMMHdZ8YnIqu5+7jA0QombrK8B/CRu39hZt2ATdPcJwYW9UwZDgxy93cWu+2WtPZ7M7PzgA2IimfXAQOAR9z91qDBCszMOgI/u3t5XEBq6+6TQ+cqJDPrDdwKbAKMBzoDh6T575k0TCqmiCwHM/vQ3Xss61jaZPVxS7aY2Xh33yR0jiSY2QxqXnWWL5x1TDhSIszsnNpuT/MqpPikY6ky0Iy1BFiF6k21vwmXqPDMrI+7v7XYse3d/e1QmZJiZrsS9QUqAl5y92GBIxVUXDA8B1jT3f9oZhsA5u6DA0crODNrAhjR99rdfWHgSJJB2uYjsnwmmNllRCs0IFoePyFgnqTMNbMjgUeJTsCOAOaGjVRYZrY98IG7zzWzo4imP9yc9hffkOnHPsTMdkv7u9WxTqEDBJLvm2DAlsBz8fV9gVFBEiXnxlpuywE7JxUkaWZ2OnA5MIXKVWc5ooknaXYL0d/vqm6t4VjqxMWTVBdQFnMf0UCE/Erp74EngNQXU4CtqJw+2NvMcPcHwkaSrFExRWT5DACuBJ6Kr78ZH0u73wF/jz9ywNvxsTS7A+hhZj2Ac4lGiD4I7BQ0VTKy+thPBs4zs9Rvb3L3RQ36zGxjoh4KAG+keYRqfsuWmb0B9I4bdGJmV5DyiVXu3i90hoDOJHqXfnroIEkws22JTqo7L7Yaqx1QEiZVchbr99aMqKn23DT+La9iPXc/zMyOAHD3eRloLI2ZPQisB3xAZaPpHKBiiiRKxRSR5eDuM4BU7jGujbt/TTQ6NUvK4gZ2+ZGxg8zs+NChEpLJx+7uaZ/2sAQzOw04BXgmPvSEmf3D3W8PGCsJqwClVa6XxsdSL55idDKwY3xoBHBXypfGf0u2mlI2A9oQvb6v+ndtFnBIkEQJqvq3PC4o7A9sEy5RIkrNrCWVjVjXo0oj9RTbgmjUvfpVSFAqpogsBzPbEDiPyuWEALh7KpdHm9mf3P0vZnYrNfRXSGvzutjseNTe0cAOcdPGrPytzD/2o4AdszIu18x2rOm4u7+RdJYE/RHYKj/m3cyuBd4B0l5MeQAYZWZPx9cPAP4VLk6i7iD6fc5/j4+Oj/0hWKLCmwCMMLMXyMCkLnd/HXjdzP7l7hND5wkpPsl+xswuBy4MnaeALgeGAmuY2cPA9sCxQRMlYzzQlWhIgkgwWTlBEPm1ngDuJNr2kIU59p/Gn0cHTRHGYURbmY5z98nxiXYWxitC5WM/Pn7sawI3BM6UhPOrXG5BtA97DCnuJUG0lanqCo389qZUc/drzOxFKrc3Hefu74fMlKAtF2se/pqZfRgsTTK+iT+axR+pZmY3u/tZwG358cBVuft+AWIlxswOqnK1mGj1QqrHBLv7MDMbS7QCpwg4092nBY6VhE7AJ2Y2iuqF0lT/jEvDo2KKyPIpc/c7QodIirs/H3++P3SWpMVFhOHA78zsIeAr4ObAsRIRj1K8qcr1b8jA/mN337fqdTNbg/R/zx8E/mtmT8bXDwRS+/tuZu3cfVY8QvTr+CN/W0d3/ylUtgSVm9l67v4/ADNbl5S/OZDB8eb5Jvl/DZoinKp/y8uIfs+zsFW5BTCD6Lyue9yINc0rKwGuCB1ABDQaWaRW8QtviPqlTAWepnoFPNUvwM1sGNDf3WfG1zsAj7r77mGT1b94K9cR8cc04DHgPHdfK2iwBJnZNkQTHzYiehe3BJjj7u2DBktYvNf+Y3fvHjpLIZnZ1kRLwgHedPf3QuYpJDMb7O77mNlXRFsXq67Cybn7uoGiJcbMdiGa/DGB6PGvRbQyZ3jQYAWQX6FhZs9T81bVzLx7HT9vr+Hu40JnkfpnZtcTrSr9mCoTq7L0My4SklamiNRuDNVfeFfdDpAD0v4CvHO+kAJRI14z6xIyUAF9RjSlaR93/xLAzM4OGylxtwGHE21r2wL4PbBh0EQJWKw3UDHQExgbLlFiRhGtvGoCYGaruvsPYSMVhrvvE39eJ3SWUNz9VTPbgGg8dHzI09qoMtMrNMxsBLAf0e/2GGCqmb3t7ufU+oWN1NL6u+WlvM/bAUQTq9L6u1yNmb3l7n0Wm9wEKZ7CJw2biikitcjyC+9YuZmtGW/3wMzWopYXLI3cQUSFhOFmNhR4lAz0kFicu39pZiXxCN37zOx94KLQuQqsam+gMuDf7v52qDBJMLNTgKuA6URbPYqIfrdTvRoHwMz2o8pEG3cfHDJPwjanspF6z3g7QOq28rn7mPjz66GzBNI+3tb2B+ABd7/czNK8MqXq3/AriZqyZsUEosbSmSimuHuf+HPmpvBJw6RiishyyOhISYBLgLfM7HWik60diKaApI67P0PU+b810R7rs4AuZnYH8LS7vxw0YDLmmVkz4AMz+wtRl/ziwJkKLou9gYBzgI3c/cfQQZJkZn8GtgQejg+daWbbufvFAWMlwsweBNYDPqCyV0qOFPdFMrPtiXorrEX0mjf/7nXaV5U2MbNuwKFEz+OpVvVvuJmdlbG/6fOInrNfpfo29FSuxqmy/b5Gad9+Lw2PiikiyyeLIyVx96Fm1puoSzzAWWnvEu/uc4FHgEfiveb9gQuALBRTjiYqnpwGnA2sARwcNFEBmdnj7n6omX1EzcuFNwsULQnfAVl80bkX0NPdKwDM7H7gfSD1xRSirXvd45GxWTGI6G/ZGFLebHcxVwEvAW+5+3txs+EvAmdKSpZ+vgGeiz+yYvHt91VlYfu9NDAqpogsnyyOlMwrJ2q+24LsdIkHoh4xwN3xR+q5+8T44gKipdLVmNmT7p6m4sqZ8ed9gqYI40uiv2ODqf5u5i3hIiVmJSoLSVlqrjwe6Eq04iwrfnb3F0OHSJq7P0HU+yp/fQIpLoxnWcZW4Wj7vTQ4KqaILJ/MjZQEiPdbnwmsTrQ0fBtgJLBzyFwSTKrenDPI5AAAIABJREFU8XH3/EnlNGC+u1fEU51+A6T9BGxS/JG1Zn3XAe/H48+LiLZuXhg2UmI6AZ+Y2SiqF9DSPPVjuJndADxF9cec6gbTZtYZOIHK/jgAuPuAUJkKabFmpK3MbFZ8ObVNSWtZWQlAyldWApnvfyUNhIopIsvnfKIXZdVGSoaNlIgzifoLvOvu/czsN8C1gTNJOGldPv0GsEO8retl4D2iUZNHBk1VQO5+GYCZNc/KFAgAd/93POlky/jQBe4+OWCkJF0ROkAAW8eft6hyLEf63xB4lmg63Stk4I2fjDYjzfLKykz3v5KGRcUUkeWQsZGSVS1w9wVmlj/p+szMbNlfJtKoFLn7PDM7Hrjd3f9iZh+EDlVIZrYVUT+J9sCaZtYD+IO7nx42WSKKiVYjNQE2NLMNs7B10d1fjyeybeDur5hZK6AkdK5Ccvd+oTME0srdLwgdQgqnysrK3wJvuHtWeuLkZbn/lTQgKqaILAczOxV42N3Hxdc7mNnx7n77Mr60sfvOzFYCngGGmdkMYOIyvkbSK62joovMbFuilSjHx8dSfZIJ3EL0juYzAO7+oZml/sTTzK4nWnX0MVARH84RrU5KNTM7gWgaW0eiqT6rAXcCu4TMVWhmtjewMVHfLwDc/apwiRIx2Mz2cvchoYNIwa0J3GVmaxM1Z30DeNPdU/2GQCyr/a+kAVExRWT5nODu/8hfcfcZ8QvTVBdT3P3A+OIVcY+B9sDQ/O1m1iFu0iqNmJm96u67mNn1y3g3M63vdJ4FXEQ0AvvjuCfS8MCZCq3Y3ScuttAs9dsBgAMAy8jKwsWdCmwF/BfA3b8wsy5hIxWWmd0JtAL6Af8EDgFGBQ2VjDOBi82sFCglxb1Dss7dLwcws5ZEfXLOB24m/W8IZLn/lTQgKqaILJ8SMyvKj5Q0sxKgWeBMiXL312s4/CrQO+ksUu+6mdl2wH5m9iiLrUDJN2t091SOh45/tl+Ptz3kJ1+cETZVwX0bb/XJxX/PTgc+D5wpCROIxtxnsZjyi7uX5gtoZtaE9PZBytvO3Tczs3HufqWZ3Uj6m0tntYdIJpnZpcD2QBuibS7nEfXLSS0zKwLeIhqKkMX+V9KAqJgisnyGAo+Z2V3x9ROpskIjw9K67SNr/g+4jGhq002L3Zb6Zo3xFp9BRC9G8/1DTnT3U8ImK6iTibb6rAlMIWpUeXLQRMmYB3xgZq9SfbpL2otnEBUMLwZamtmuwCnA84EzFdr8+PM8M1sVmA50C5gnEfHJ5pHAOu4+0MzWALq5exZW5WTNQUAZ8ALwOjAy7Svv3D1nZkPcfVPgudB5JNtUTBFZPhcQFVDyJxvDiJYMZ13a39XMBHf/D/AfM7vM3QeGzhPAzcDuxC/K4v4hO9b+JY2bu08FDg+dI4DnyO6L7wuJegJ9RPR8NoT0P48Njvt+3QCMJXrOuidspETcTtQTaGdgIDAH+AeV7+JLSrh7bzNrR7Q6ZVfgbjOb6u59AkcrtLFmtqW7vxc6iGSbiikiyyHuFn5H/CGSSvE7mPsR7T0GGOHug0NmSoq7f5ul/iFm1gkYAKxNldcC7v7HUJmS4O73h84QSvw8dg/ZKCYA0d+0+OKTZjYYaOHuP4fMlJCt45Ps92FRn7dMbU3OCjPbBNgB2IloBPi3pHybT2xr4Cgz+xqYS2VfoM1ChpLsUTFFpBZm9hFLX32Rc/ceSeZpgLTNJ0XM7DqiBpUPx4fONLPt3D3towa/jXvG5MysKVHzxk8DZyq0Z4F3ifadp7pwVFU84v46oDvVp7usGyxUQsxse+AKYC2i13/5k4/UPnYzGwPcCzwSN0tP9faHKhbGvZDyfd46Uzm9StLlz0QTfG4B3nP3hYHzJGX30AFEQMUUkWXZp4ZjRcAaRNM/Us3MtgE+dvfZ8fV2wEbu/t/4LqkeqZlBewM943ewMbP7iRrapb2YchLwd6JRsd8DLxNNPkmz1u5+bugQAdwHXA78jWjCy3FAcdBEyRkEnE00PjUrBbTDiL7H75nZaKLv/8v5ZvIpdgvwNNDFzK4hmmJ0WdhIUgjuXtPr1EXM7El3PzipPIVmZi2InrPXJ9qyOMjdy8KmkixTMUWkFu4+MX/ZzHoBvwP6A18BT4bKlaA7qD6tZ07VY+7+U4hQUlArAfnva/uQQZLi7tOImjVmyYtmtltaJzTVoqW7vxpPZ5tINPZ9DFET5rT72d1TP8mmKnf/ErjEzC4jenPkXqDczO4D/p7W5zB3fzj+ud6F6A2gA9w97avtpGZpW3l2P7CQaCvTnkSrDM8MmkgyTcUUkVqY2YbAEfHHNOAxoMjd+wUNlpyiqu/guXtFPE5T0uk64H0zG070AnxHoqaVqRYvgT+BJfuHDAiVqVDMbAbR0v8i4AIzmweUUrnlo2PIfAn4xcyKgS/M7DSilUhtAmcqKDPLF8SHm9kNwFNUn2Q0NkiwhJjZZkSrU/YiehPkYaAP8BrQM2C0gjGzB939aOCzGo5JtqRtFVb3eIoPZjYI0IQqCUonRSK1+4yo+r1P/A4XZnZ22EiJmmBmZ1DZePcUYELAPFJA7v5vMxtB5cSHC9x9cv52M9vY3T8OEq6wniX6PX+F9G9/6BQ6QGBnAq2AM4imnPQDjgmaqPBuXOz6FlUup3r0ebw6YybRFqcLq4yM/W/cQyatNq56Je6fsnmgLCL1aVFPGHcvW6xxvEjiVEwRqd1BRONDh5vZUOBRstV09SSivdeXEr3ofhVI9bSPrHP3SSx9dOyDVN/2lRat3P2C0CGS4O6LikXx5KY+RL/bb2ZkclO5u88h2rJ4XOgwScjQSsqa9Hf3Gt8AcPeDkg5TaGZ2EVGPq5ZmNovK1yulwN3BgklIaXvN2iP+2YbosVX9Wc+5e7tw0SSLinK5tK3+Eql/ZtYa2J9ou8/OwAPA0xnsNyAZZmbvu3uv0Dnqm5ldDbzj7kNCZ0mKmd1KtNf80fjQocCn7n5GuFSFF29h6wr8B3jM3ccHjpQYM1uZqPluvoD2FnCVu08PGqyAzOxa4C/uPjO+3gE4190vDZussMzsOndPfZN8WbaM9sYSSYyKKSJ1FL8Y6w8c5u6pnGZjZn9y97/EJ1xL/JFI+wmX1MzMxrp76lammNlsoDVRH4mFZOAdLjP7lGjveX50agkw3t03Cpus8MysK1Hx6DCgHVFR5eqwqQrPzIYRjVB9KD50JNDX3X8bLlVh1VQATuvfscWZ2WpUjsEGwN3fCJdI6pOZfUQt/VDcfbME44hklrb5iNSRu88gWi6b5iWz+a7/o4OmEEmAu7cNnSGAr4DVgW/j692A/4WLk5y4D9At8SqVPxFN8kl9MQXo5u4Dq1y/2swOC5YmGSVm1jzfK8XMWgLNA2cqODP7M9EW5U+o7AOVIyqmSTrkRyKfGn9+MP6ctcl0IkGpmCIiS3D35+PP94fOIg1KaegAhVBl2klVPwMT3b0s6TwJaQF8ambvEp1kbQOMMrOnIJ39JADMbCOiFSkHA9OJJrSdGzRUcl42s8OBx+PrhwAvBcyThIeBV+NRyBD1ycnC89qBgFVpuCspE492x8x2XWz11YVmNpYMTOITaQhUTBGRJZjZ89S+fHS/BONIQuIT6UHAi+5esfjt7r5N8qkScTtRY92P4uubAuOB9mZ2ckr3m18TOkAg9xL1idnd3X8IHSZhJwBnUfkOdgkw18xOJKXb2tz9ejP7EMhvZRro7mkvIEE0da8pVUZgS2oVmdn27v42gJltBxQHziSSGSqmiEhN/ho6gARxO9E7t7eY2RPAfe7ugTMl4Qfg+PzYZzPrDlxFtAXkKSB1xRR3f7W2283sLXfvk1SepLj7tqEzhLKs7WwpHn3+PlFhIRdfzoJ5wAdm9ipVCirqd5ZKxwP3mln7+PpMYEDAPCKZomKKiCzB3V8PnUGS5+6vAK/EL8qOiC9/C9wDPOTuC4MGLJwNq55EuvsnZvYbd59gZiFzhdQ6dIBCMLMNgOuIJhm1yB9393WDhWo4Ujf63MwOBW4ARhA1lr7VzM539/8EDVZ4z7H0EfeSIu4+hmhccPv4+s+BI4lkioopIrJUOvHInnh86lHA0UTv4j5MNEr1GKBvuGQF9bGZ3UHlmODDgE/MrDnRdJ8sSuuov/uIxgP/DehHtBJLS+IjRaEDFMAlwJbuPhXAzDoDrxCNxk4t9TvLDjNbBbgWWNXd94xXVm7r7oMCRxPJBBVTRKQ2OvHIEDN7GjCid6j3dfdJ8U2PmVmaJzsdC5xC1E8C4G3gPKJCSr9AmaQwWrr7q2ZWFDdwvMLMxhBN9Mm6NBbQivOFlNh0UvwcZmaPu/uhSxubq3G5qfQvotdql8TXPydqrK1iikgCVEwRkdroxCNb7nH3IVUP5MeKuvsWoUIVmrvPB26MPxY3J+E4DUUaVykA/GJmxcAXZnYa8D3QJnAmKZyhZvYS8O/4+mHAkFru39idGX/ep9Z7SZp0cvfHzewiAHcvM7PyZX2RiNQPFVNEpDY68ciWq1nyRGMkKeujsDhtZ6vRsaEDFMiZQCvgDGAgsDPRFjZJ4ehzdz/fzA4Gto8P3e3uT4fMVEj51YT5sblLY2Yjs9yMOWXmxttzcwBmtg2gvikiCVExRURqoxOPDDCzrsBqQEsz60XlqoR2RN//tMvMdjYzm0HN2zmKiMbjdgRw9w8TDZYQd38vvjiH6PucemZWazHU3cfGn1M5+tzdnwSeDJ2jgWmx7LtII3EOUbPh9czsbaAz0D9sJJHsUDFFRJYqiyceGbU70UqE1YGbqhyfDVwcIlDCsrSdrVPoACGY2fPU0hPE3fdLME7S8tvXWgBbAB8SFc82A0YDqV2hYGYHAdcDXYgec75o2C5osPDS2B8nqz4GdiLqd1YEOCl9M0CkIVIxRUSWYGa1jlRM+YlH5sSTH+43s4Pjd3GzJjPb2dy92l56M+tI9Xepf0g2UWL+GjpAKO7eD8DMngJ6u/tH8fVNgCsCRkvCX4iaaX8aOohIgYx0995ERRUAzGwsKd+eK9JQqJgiIjXZFviWqGnff0lvM0oBzOwod38IWNvMzln8dne/qYYvS5PMbWczs72JtjWtTjThZDWiKRC/CZmrgL5y929ChwjM8oUUAHcfb2YbhQyUgCkqpNRIz+mNnLbnijQMKqaISE26ArsCRwC/A14A/u3uH9f6VdJYtY4/p3I1xrJkdDvbNURNOV92915mtitwaOBMhfQM8Tu1Zvakux8cOE8I48zsn8BD8fUjgXEB8xRMvL0HYLSZPUb0/f8lf7u7PxUkWALMrAR4Jb8iaSmOTiqPFEzWt+eKNAhFuZy2TYrI0plZc6Kiyg3Ale5+W+BIIvUiy9vZzGy0u29hZh8CPd09Z2YfunuP0NkKwczed/dei1/OEjNrAZwM7BgfegO4w90XhEtVGGZ2Xy0359x9QGJhAjCzV4GD3F1TXVIuw9tzRRoErUwRkRrFRZS9iQopawO3AKkdKSlgZp2BE4i+34ueH1J84pHl7Ww/m1kb4C3gATObCswPnKmQcku5nBlx0eRv8UequftxAGa2vbu/XfU2M9u+5q9KlTnAR2Y2DJibP+juZ4SLJAWyiZltvPhBd78qRBiRrFExRUSWYGYPAJsAQ4hWo4wPHEmS8SzwJvAKUL6M+6ZBlrezHUBUPDkL+D3QHtgnaKLC6mFms4gKZi3jy5CB6S5m9ri7H2pmH1FDIcndNwsQKym3smQjzpqOpc1T8Yek35wql1sQ/R1XnyCRhGibj4gswcwqqHw3q+ofidSfeGSZmX3g7j1D5wgha9vZzOxad794Wcek8TOzbu4+yczWqun2eBx4qpjZtsB2RMXCqitx2gEHpnU7W1Vm1gzYML7q7r4wZB5JRvxc9pK79w2dRSQLtDJFRJbg7sWhM0gQg81sL3cfEjpIUjK8nW0PlmxSuHcNx6SRc/dJ8eeJZrYKsGV80yh3nxouWUE1I2qo3QRoW+X4LOCQIIkSZGZ9gfuBr4neBFnDzI5x9zdC5pJEtCJqSisiCdDKFBERAcDMZhNN9vkFWEjKVyIttp3t0SxsZzOzE4GTiN6x9io3tQXGuPvhQYJJwZnZoUQrr0YQ/W7vAJzv7v8JmauQzGytNK68WRYzGwP8zt09vr4h0RbGzcMmk/q22Pa9EqAzcFXaV1eKNBRamSIiIgC4e9tl3ytVjiLaznYmcIaZ5Y+nuYj0OPAqcB1wYZXjs1O8SkEilwBb5r/PccPpV4DUFlOA5mZ2N0s21d45WKJkNM0XUgDc/XMzaxoykBRM1V5XZcAUdy8LFUYka1RMERHJODP7jbt/ZmY1NmV097FJZ0pCFrezufsMYAbQP54AsUN805uAiinpVrxYwWw6kPbfgSeAO4F/ko2m2nmjzeyfwEPx9SOB0QHzSD0zs47xxdmL3dTOzHD3n5LOJJJFKqaIiMi5RCORb6zhthyQ9ndxM8fMTgVOBZ6JDz1uZv9w99sDxpLCGmpmLxGNAgc4jGiLW5qVufsdoUMEcDLR73d+FPKbgH6302UM0fNzUQ235YB1k40jkk3qmSIiIpIxZjYO2M7d58TX2wDvpHxMbuaZ2cHA9vHVN9091c2WzewKohVXTxP1ggLQu/YiIlIvtDJFRCTjzOyg2m5396eSyiKJKQJKq1zPNxyWFHP3J4EnQ+dI0DHx5/OrHEvtu/aLNSNdgoql6ZHV7bkiDY2KKSIism8tt+UAFVNSwsyaxM0JHwT+a2b5E+sDiUapSkrFRdPrgS5EhbM0N1oGwN3XCZ0hYfss+y6SEtqeK9IAaJuPiIhIRpjZWHfvHV/eCugT3/Smu78XLpkUmpl9Cezr7p+GzpIkM9sE6A60yB9z9wfCJUqGma0CbBlfHaVpXSIi9U8rU0REZBEz2xvYmOonHleFSyT1bNFWHncfBYwKmEWSNSWDhZTLgb5ExZQhwJ7AW0CqiylmdihwAzCC6Hf+VjM7393TPAY7U7Q9V6RhUDFFREQAMLM7gVZAP6JRooegk+206Wxm5yztRne/KckwkqjRZvYY0QSnqs1Y03zSdQjQA3jf3Y+LV2s8tIyvSYNLgC3zq1HMrDPwCqBiSnrkt+d2AbYDXouv9wPeQdtzRRJRHDqAiIg0GNu5+++BGe5+JbAtsGHgTFK/SoA2QNulfEh6tQPmAbsRnYjtS/p7bMx39wqgzMzaEU32WSNwpiQUL7atZzp6zZ8q7n6cux8HNAW6u/vB7n4w0crSpmHTiWSHVqaIiEje/PjzPDNblegFeLeAeaT+TdK2rWyKT7yyZrSZrQTcA4wB5gAjw0ZKxFAzewn4d3z9MKJtTpI+a7j7pCrXpwBrhgojkjUqpoiISN7g+MTjBmAs0USAf4aNJPVM448zysxaAMezZE+kAcFCFZi7nxJfvNPMhgLt3H1cyEyFZGbrA6u4+/lxT418g+mRwMPhkkkBvVpD4eyVgHlEMkXFFBERAcDdB8YXnzSzwUALd/85ZCapd7uEDiDBPAh8BuwOXAUcCaS+Ia2Z7QfsGF99HUhtMQW4GbgIFvXCeQrAzDaNb9t36V8qjZG7n2ZmB1L5M363uz8dMpNIlmj/pIiIAGBmp8YrU3D3X4BiMztlGV8mjYi7/xQ6gwSzvrtfBsx19/uBvYGtA2cqKDP7M3Am8En8cYaZXRs2VUGt4u4fLX4wPrZ28nEkCe7+tLufHX9UK6SYWRa2tYkEo2KKiIjkneDuM/NX3H0GcELAPCJSfxbGn2ea2SZAe6JJIGm2F7Cru9/r7vcCe5Duprsr1XJby8RSSEPSYtl3EZEVpWKKiIjklZjZop4aZlYCNAuYR0Tqz91m1gG4DHiOaKXG9WEjJaJqgaF9sBTJGG1mSxTAzewPRA14JXtyoQOIpJl6poiISN5Q4DEzuyu+fmJ8TEQav/vcvZyob8i6ocMk5DrgfTMbTtR8eUfgwrCRCuos4GkzO5LK4skWREXxA4OlEhFJKRVTREQk7wKiAsrJ8fVhaJqPSFp8FU+0eQx4zd1T/Y51vMruLWAbYMv48AXuPjlcqsJy9ynAdmbWD9gkPvyCu78WMJYUgJk1j3ubLYsmuIkUUFEul+rnUhEREZHMM7NWRP1CDgc2B54HHnX3t4IGKyAz+8jdNw2dQ6S+mdlYd+9tZg+6+9G13G8Tdx+fZDaRLFExRUQk48zsI5a+rzrn7j2SzCMihRX3Tvk7cKS7l4TOUyhmdj9wm7u/FzqLSH0ys/HAtcBA4PzFb49HY4tIgWmbj4iI1DTdoghYA7go4SwiUiBmthNwGNFUm9HAoWETFdzWwFFm9jUwl+jvWs7dNwsZSqQenAQcSdRged/FbssBKqaIJEDFFBGRjHP3ifnLZtYL+B3QH/gKeDJULhGpP3FB4X3gceB8d58bNFAydg8dQKQQ4u15b5nZaHcfFDqPSFapmCIiknFmtiFwRPwxjahBZZG79wsaTETq02buPit0iCSYWQuid+7XBz4CBrl7WdhUIgXxoJmdQTSpCqJpXXe6+8KAmUQyQ8UUERH5DHgT2MfdvwQws7PDRhKRelZqZqcCGwMt8gfdfUC4SAVzP7CQ6O/ankB34MygiUQK43agafwZ4GjgDuAPwRKJZIiKKSIichDRhI/h8ejUR9E4RZG0eZCocLo7cBVRv4VPgyYqnO75KT5mNggYFTiPSKFsuViT+NfM7MNgaUQypjh0ABERCcvdn3H3w4HfAMOBs4AuZnaHme0WNp2I1JP13f0yYK673w/sTdSgNY0WbXHQ9h5JuXIzWy9/xczWBcoD5hHJFK1MERERAOKGlI8Aj8SjU/sDFwAvBw0mIvUhX2CYaWabAJOBLgHzFFIPM8v3hykCWsbX89N82oWLJlKvzidaVTqB6Od7LeC4sJFEsqMol8uFziAiIiIiBWRmfyCazrUZcB/QBvg/d78zaDAR+VXMrDlg8VV391+q3Laruw8Lk0wk/VRMERERERERSRkzG+vuvUPnEEkrbfMRERERSSkzO6e22939pqSyiEji1ExepIBUTBERERFJr7ahA4hIMNqCIFJAKqaIiIiIpFcrd7/AzPq7+xOhw4iIiKSFRiOLiIiIpNdeZlYEXBQ6iIgk7uvQAUTSTA1oRURERFLKzG4ATiCa3jOvyk0aEyySEma2DtAL+MTdPwudRyQrVEwRERGR/2/vXkMtLas4gP/HrDRSKbEUlSjJlWlFpUUXijStzFITo2yyMiqiYsooqQ99SKRSI8WiMFGLrlJiRZqhYRfCD5rZRV0VBJVo0IU0y25z+rD3wfEwSmec2W/vfn8/OOz9rpcD/y+HYRbrWQ9Lrqq+1t3HDp0DeOCq6rLuPm7+/dgk5yS5Jsmzk3youy8eLh1Mh2M+AABLTiMFlspjtvh+WpLDu/sNSZ6T5F3DRILpsYAWAGDJVdUrknwkyaMyO+LjmA+M15ZHC3bu7l8nSXf/oao2D5QJJkczBQBg+Z2Z5GXdffPQQYAH7ClVdUdmTdGHVtU+3X1bVT0kyYMGzgaToZkCALD8fq+RAsuhu++rYfKwJG9ZZBaYMgtoAQCWXFWdm2TvJJcl+cdqvbsvHSwUAIyYBbQAAMtv98yuRj4qycvmP8cMmgjY7qrqp0NngKlwzAcAYMnNb/oAlsB8ofTWbMhsAg1YAM0UAIAlV1X7JTkvs6tTk+T7STZ19++GSwVsoy8n+XzufavPql0WnAUmSzMFAGD5XZTkC0lOnD9vnNeOHCwRsK1+kuTs7v7Z2hdV9cIB8sAkaaYAACy/vbr7oi2eL66qdw6WBngg3pnkjvt4d/wig8CUuc0HAGDJVdXVmU2ifHFeenWSN3T3EcOlAoDxMpkCALD8TslsZ8rHMtuz8MMkltLCCFXVw5K8PbO/5fOSvCrJK5LckuSD3f3XAePBZJhMAQAAGImquiTJb5PsmqSS3JzZUtqXJ9m7u187YDyYDJMpAABLqqo+cD+vV7r79IWFAbaXA7v7lVW1IcltSV7Y3StV9YMkNw6cDSZjp6EDAACww9y1lZ8keWOS04YKBTxw3b2S5PL55+qzYwewICZTAACWVHd/dPV7Ve2WZFNmu1K+lOSj9/V7wP+166rq4d391+4+ZbVYVQckuXPAXDApdqYAACyxqnpkklOTvCbJZ5Kc291/HjYVsCNU1YbVSRVgxzKZAgCwpKrqrMxu+Tg/yZPc8gHLoar2THJSkifMSzcn+WJ3/3G4VDAtJlMAAJZUVW1O8o8k/869dylsyGwB7e6DBAO2WVUdlOQ7Sa5MckNmf89PTXJkksO7+5YB48FkmEwBAFhS3e2yAVg+pyfZ1N2XbFmsqhOSnJHkhEFSwcT4BxYAAGA8nrS2kZIk3f3VJIcMkAcmSTMFAABgPO7axnfAduSYDwAAwHg8qqpO3Up9Q5K9Fh0GpkozBQAAYDw+nWS3+3h3wSKDwJS5zQcAAABgHUymAAAAjEhVvSTJ+5I8cV76eZKPdPflw6WCaTGZAgAAMBJV9aYkb0ny3iTXzcuHJvlwkgu6+/yhssGUaKYAAACMRFXdlOS53f2nNfU9k/yguw8aJhlMi6uRAQAAxmPD2kZKknT3H4cIA1OlmQIAADAed1TVU9YW57U7B8gDk2QBLQAAwHi8O8nXq+qiJNfPa4cmeV2SjYOlgomxMwUAAGBEqurRSd6W5OB56aYkn+ju24dLBdOimQIAADASVXV+kiuSXNXdjvXAQDRTAAAARqKqnpnkJUmOSPLPJN9O8q3uvnHQYDAxmikAAAAjNL8O+ajMmitPTvKjzBorlwwaDCZAMwUAAGAJVNXTk7y4u88YOgssO80UAACAEamqFyU5Lsm+89KtSS7r7iuHSwXTopkCAAAwElV1TpIDk3w2ye/m5f2SnJzkl929aahsMCU7Dx0AAACA/9nR3X3g2mJVfTnJL5JopsAC7DR0AAAAAP5nd1fVYVsa3cmVAAADEElEQVSpH5bk7kWHgakymQIAADAer0/yyaraLfcc89k/yV/m74AFsDMFAABgZKpq72yxgLa7bx8yD0yNYz4AAAAjUlXPS7JHd1+fZJckG6vq6IFjwaSYTAEAABiJ+W0+z8hsZcOVSY5IckWS5ye5obvfM2A8mAw7UwAAAMbjyCSHJNk1ya1J9u3uv1XVh5PckEQzBRbAMR8AAIDxWOnulSSbV5/nn5vj/3ewMCZTAAAAxuObVfX9zHalXJDkkqq6NrNjPt8bNBlMiJ0pAAAAI1JVz8psQuXaqjogyfFJfpPkK929+f5/G9geNFMAAAAA1sExHwAAgJGoqv2TnJVk38xu8Tmru/81f3dZdx83ZD6YCguKAAAAxuPCJNckeUeSfZJ8t6r2nL97zFChYGpMpgAAAIzHXt39qfn3d1TVxiTfq6qX556bfYAdzGQKAADAeDy4qnZZfejuzyXZlOTKzCZVgAXQTAEAABiPC5I8c8tCd1+V5MQkPxskEUyQ23wAAAAA1sHOFAAAgBGpqhdktoC25qWbk3y8u68ZLBRMjGM+AAAAI1FVL83sRp9vJDkpyWuSXJ7kwqo6eshsMCUmUwAAAMbjPUmO6+4bt6j9uKquS3JeZo0VYAczmQIAADAee69ppCRJuvsnSR49QB6YJM0UAACA8bhrG98B25FjPgAAAONxQFV9fSv1DUket+gwMFWaKQAAAONx7Pxz1ySPT7KS5FdJ/p7k7KFCwdRopgAAAIzHD5OckeSUJL+Z1/ZPcnGS9w+UCSbHzhQAAIDxODPJI5I8truf1t1PS3JAkj1iMgUWRjMFAABgPI5J8ubuvnO10N13JHlrkqMHSwUTo5kCAAAwHivdvbK22N3/yWx/CrAAmikAAADjcVNVnby2WFUbk9wyQB6YpA0rK5qXAAAAY1BV+ya5NLPbe66flw/N7Haf47v71qGywZRopgAAAIxMVR2e5OD5403dffWQeWBqNFMAAAAA1sHOFAAAAIB10EwBAAAAWAfNFAAAAIB10EwBAAAAWAfNFAAAAIB1+C8/SSfDsl20AQAAAABJRU5ErkJggg==
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>There is a correlation between Total_phenols - Flavanoids =&gt; 0.9 which is strong.
Typically I would delete one of the correlting features, but for now I won't do it.
Let's plot these feautes to see the correlation.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[14]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">sns</span><span class="o">.</span><span class="n">lmplot</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="s1">&#39;Total_phenols&#39;</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span><span class="s1">&#39;Flavanoids&#39;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">fit_reg</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[14]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>&lt;seaborn.axisgrid.FacetGrid at 0x7f1973292d68&gt;</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Modelling-and-Predicting">Modelling and Predicting<a class="anchor-link" href="#Modelling-and-Predicting">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>As I mentioned before there are several ways in which you can improve your ML model.</p>
<p>Today I'll focus on <strong>feature selection</strong>, a very basic way to improve your model's score.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[15]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># initialize a random seed, this will help us make the random stuff reproducible.</span>
<span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">64</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Let's load the 'train_test_split' function, and separate our data into only the feature vectors and the target vector.
We will split our data into 25% test and 75% train.</p>
<p>The 'stratify' parameter will ensure equal distribution of subgroups.
It will keep the ration between the classes in the train and test data as they were in the actual full data.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[16]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn.model_selection</span> <span class="k">import</span> <span class="n">train_test_split</span>
<span class="n">X</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s1">&#39;label&#39;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s1">&#39;label&#39;</span><span class="p">]</span>
<span class="n">x_train</span><span class="p">,</span> <span class="n">x_test</span><span class="p">,</span> <span class="n">y_train</span><span class="p">,</span> <span class="n">y_test</span> <span class="o">=</span> <span class="n">train_test_split</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">stratify</span><span class="o">=</span><span class="n">y</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>I'll start with a very simple classifier called [knn (k-nearest neighbors)](http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html).</p>
<p>Knn classifies an object (a new data point) by the majority vote of its k nearest neighbors in the feature space.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[17]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn.neighbors</span> <span class="k">import</span> <span class="n">KNeighborsClassifier</span>
<span class="kn">from</span> <span class="nn">sklearn</span> <span class="k">import</span> <span class="n">metrics</span>
<p><span class="n">model</span> <span class="o">=</span> <span class="n">KNeighborsClassifier</span><span class="p">()</span>
<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
<span class="n">pred</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">x_test</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'score on training set:'</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'score on test set:'</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_test</span><span class="p">,</span> <span class="n">y_test</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">metrics</span><span class="o">.</span><span class="n">classification_report</span><span class="p">(</span><span class="n">y_true</span><span class="o">=</span><span class="n">y_test</span><span class="p">,</span> <span class="n">y_pred</span><span class="o">=</span><span class="n">pred</span><span class="p">))</span>
</pre></div></p>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>score on training set: 0.8045112781954887
score on test set: 0.6888888888888889
             precision    recall  f1-score   support
<pre><code>      1       0.78      0.93      0.85        15
      2       0.70      0.39      0.50        18
      3       0.59      0.83      0.69        12
</code></pre>
<p>avg / total       0.70      0.69      0.67        45</p>
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>As we can see this is a pretty bad result.</p>
<p>The key question which will help us decide in which way we should improve our model is "whether our model is [overfitting or underfitting](https://en.wikipedia.org/wiki/Overfitting)?"</p>
<p>Before I'll answer this question, there is something we didn't do and it's essential in this case:
When we are using KNN or any other algorithm which is based on distances (like the [Euclidean distance](https://en.wikipedia.org/wiki/Euclidean_distance) in our case), normalization of the data is necessery.
I'll be using the mean normaliztion method, which is subtracting the feature's mean and dividing by it's standard deviation. This is basically converting each data point into it's [Z-score](https://en.wikipedia.org/wiki/Standard_score).</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[18]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn.pipeline</span> <span class="k">import</span> <span class="n">Pipeline</span>
<span class="kn">from</span> <span class="nn">sklearn.preprocessing</span> <span class="k">import</span> <span class="n">StandardScaler</span>
<p><span class="n">model</span> <span class="o">=</span> <span class="n">Pipeline</span><span class="p">(</span>
<span class="p">[</span>
<span class="p">(</span><span class="s1">'scaler'</span><span class="p">,</span> <span class="n">StandardScaler</span><span class="p">()),</span> <span class="c1"># mean normalization</span>
<span class="p">(</span><span class="s1">'knn'</span><span class="p">,</span> <span class="n">KNeighborsClassifier</span><span class="p">(</span><span class="n">n_neighbors</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
<span class="n">pred</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">x_test</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'score on training set:'</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'score on test set:'</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_test</span><span class="p">,</span> <span class="n">y_test</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">metrics</span><span class="o">.</span><span class="n">classification_report</span><span class="p">(</span><span class="n">y_true</span><span class="o">=</span><span class="n">y_test</span><span class="p">,</span> <span class="n">y_pred</span><span class="o">=</span><span class="n">pred</span><span class="p">))</span>
</pre></div></p>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>score on training set: 1.0
score on test set: 0.8888888888888888
             precision    recall  f1-score   support
<pre><code>      1       0.79      1.00      0.88        15
      2       1.00      0.72      0.84        18
      3       0.92      1.00      0.96        12
</code></pre>
<p>avg / total       0.91      0.89      0.89        45</p>
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Great improvment!</p>
<p>I used a "Pipeline" in this part. "Pipeline" is a function in sklearn that combines several other functions and enables us to use other sklearn functions with only one fit command. More on this you can read [here](http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html) and in a future blog post.</p>
<p>So as I mentioned before, we need to understand if our mode is over or under fitting.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[19]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn.model_selection</span> <span class="k">import</span> <span class="n">learning_curve</span>
<p><span class="k">def</span> <span class="nf">over_underfit_plot</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span></p>
<pre><code>&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;xlabel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;Training examples&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ylabel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;Score&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;train_sizes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;train_scores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test_scores&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;learning_curve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cv&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n_jobs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;train_scores_mean&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mean&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;train_scores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;axis&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;test_scores_mean&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mean&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test_scores&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;axis&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;grid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plot&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;train_sizes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;train_scores_mean&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;o-&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;r&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
         &lt;span class=&quot;n&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;Training score&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plot&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;train_sizes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test_scores_mean&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;o-&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;color&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;g&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
         &lt;span class=&quot;n&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;Cross-validation score&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;legend&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;loc&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;best&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;plt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;yticks&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;sorted&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;train_scores_mean&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;test_scores_mean&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))))&lt;/span&gt;
</code></pre>
<p><span class="n">over_underfit_plot</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
</pre></div></p>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZUAAAEGCAYAAACtqQjWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmYjeUbwPHvLGbGMBj7zox4kH1fsmXfU5L6EVlCCZFCm0qpZKuELEUpRSkiO1lS1oS40djGzlhnxqzn98d5ZxrMMMM5c2a5P9flct713O97Zs49z/I+j5vNZkMppZRyBHdXB6CUUirj0KSilFLKYTSpKKWUchhNKkoppRxGk4pSSimH8XR1AK50/vw17fqmlFIplC+fn1tS27SkopRSymE0qSillHIYTSpKKaUcRpOKUkoph9GkopRSymE0qSillHIYpyYVY8xsY8w5Y8zeJLa7GWM+NsYcNsb8bYyplmBbD2PMIetfjwTrqxtj9ljHfGyMcbPW5zbGrLL2X2WM8XfGNXkvWoh/o7rkLeSPf6O6eC9a6Iy3yVD0niWP3qeU03uWcs6+Z84uqXwJtLrD9tZAaevfs8BUsCcI4E2gNlALeDNBkpgK9E1wXNz5RwBrRKQ0sMZadijvRQvJ0a8Xnvv34RYTg+f+feTo10t/kO9A71ny6H1KOb1nKZca98zN2UPfG2NKAr+ISIVEtk0H1ovIt9ayAI3j/olIv4T7Wf/WiUhZa/2TcfvFHSsip40xhazzmjvFltKHH/0b1cVz/77b1tuyZCG2YKGUnCrTcD9zGreoqNvW6z27md6nlNN7lnJJ3bPo8hW4tP73ZJ8nLT/8WAQ4kWA52Fp3p/XBiawHKCAip63XZ4ACjg7W4+CBxDck8iEpS1L3Ru/ZzfQ+pZzes5RL4t4k+d12DzLkMC0iYjPGOLwIFlOmbKIllZgUZvnMJKnSnd6zm+l9Sjm9ZymX5D0rU9Zh7+HqkspJoFiC5aLWujutL5rIeoCzVrUX1v/nHB1s2JBhia8fPNTRb5Vh6D1LHr1PKaf3LOVS4565OqksBp62eoHVAa5YVVgrgBbGGH+rgb4FsMLadtUYU8fq9fU08HOCc8X1EuuRYL3DRHTqzNXps4kuXwGbpyfR5StwdfpsIjp1dvRbZRh6z5JH71PK6T1LudS4Z05tqDfGfIu90T0vcBZ7j64sACIyzUoMn2LvwRUGPCMi261jewGjrFO9KyJfWOtrYO9VlhX4FXjBqu7KA3wPFAeOAV1EJORO8ekoxUoplXJ3aqh3eu+vtEyTilJKpVxa7v2llFIqA9GkopRSymE0qSillHIYTSpKKaUcRpOKUkoph9GkopRSymE0qSillHIYTSpKKaUcRpOKUkoph9GkopRSymE0qSillHIYTSpKKaUcRpOKUkoph9GkopRSymE0qSillHIYTSpKKaUcRpOKUkoph9GkopRSymE0qSillHIYTSpKKaUcRpOKUkoph9GkopRSymE0qSillHIYTSpKKaUcRpOKUkoph9GkopRSymE0qSillHIYTSpKKaUcRpOKUkoph9GkopRSymE0qSillHIYTSpKKaUcRpOKUkoph9GkopRSymE0qSillHIYTSpKKaUcRpOKUkoph9GkopRSymE0qSillHIYT2ee3BjTCpgMeAAzReT9W7aXAGYD+YAQoJuIBBtjmgATE+xaFugqIj8ZYwKA+UAeYAfQXUQijTHewFygOnAReEJEjjrz+pRypEWHFjJpx3gOXjpAGf+yDKk+jE6lO7s6LJXBOPvnzGklFWOMBzAFaA2UB540xpS/ZbePgLkiUgl4GxgLICLrRKSKiFQBHgbCgJXWMR8AE0XkAeAS0Nta3xu4ZK2faO2nVLqw6NBC+q3qxf6QfcTYYtgfso9+q3qx6NBCV4emMpDU+DlzZvVXLeCwiASJSCT20kXHW/YpD6y1Xq9LZDtAZ+BXEQkzxrhhTzJxd2AO8Ij1uqO1jLW9qbW/UmnepB3jE10/eeeEVI5EZWQTdoxLdL0jf86cmVSKACcSLAdb6xLaDTxqve4E+Blj8tyyT1fgW+t1HuCyiEQncs7497O2X7H2VyrNO3jpQKLrD1z8h51nt2Oz2VI5IpVRXIm4zAKZT89f/4eE7E90n6R+/u6FU9tUkuEl4FNjTE9gA3ASiInbaIwpBFQEVrgkOqVSSVG/Yhy7evS29bHE0uqHhymcrQhtAtvRNrADtQvVxdPd1b+6Ki07F3aO5UeWsjRoMRtP/kZ0rP3vcC93LyJjI2/bv4x/WYe9tzN/Mk8CxRIsF7XWxRORU1glFWNMduAxEbmcYJcuwCIRibKWLwK5jDGeVmkk4Tnj3i/YGOMJ5LT2VypNOxt6hks3LiW6bUDlF7gQfp6Vx5Yzc890Zu6ZTh6fPLQKaEu7wA48VLQR3h7eqRyxSotOXDvOsqAlLA1awp+nt2DDXrqtlK8KbQPa0zawA/su7qHfql63HTu42lCHxeHMpLINKG311jqJvRrrqYQ7GGPyAiEiEguMxN4TLKEnrfUAiIjNGLMOezvLfKAH8LO1ebG1vMXavlZEtM5ApWlRMVH0XdmTq5FXeLzME+y7uC++V87gakPje+VExkSy+eRGlgYt4dcjvzBv/1zm7Z+Ln1cOmpdoSdvADjxcvBnZsmRz8RWp1HTo0kGWBi1madASdp/fBYAbbtQqVIe2ge1pE9Ce4jlKxO9fJrcB7G0oif2cOYKbM+tqjTFtgEnYuxTPFpF3jTFvA9tFZLExpjP2Hl827NVfz4tIhHVsSWAzUMxKOnHnDMSeUHIDu7B3Q44wxvgAXwFVsXdP7ioiQXeK7/z5a5p0lEu9uflVpu7+hPalHmFmizm4ud29b0lMbAzbzm5ladBilgUt4cS14wD4ePjQpHgz2ga2p0WJVuTy8Xd2+CqV2Ww29lzYHZ9IDl4SADzdPXmoSEPaBnagVUBbCvgWcGoc+fL5JfmD6tSkktZpUlGutOTfn+i94mkeyFWalZ3Xk93LL8XnSCtfMsp50uIfEZpUkqBJRbnK4UuHaL6wETabjRWd12FyO6ah9GCIsOzIkmRXh6i0KSomik0nN8RXd54PPweQZqo7NakkQZOKcoXrUddpvfBh5NIBpjef7bSn5o9fPcavR365Y8NtXB27cr3w6HDWn1jL0qDFrDj6K1ci7H2W8vjkoXVAO9oGtk8zHTM0qSRBk4pKbTabjQGre/PjoYX0rdifdxt8mCrvm1QX09K5ytA2sAPtSnWgYt7KyWrTUY5zLfIqq46tYGnQEtYcW0lYdBgAhbMVoW2gPfHXKlQnzXUh16SSBE0qKrXN/Hsaoza9TM2CtVnUcSleHl6pHsPlG5fiv8jWnVhNeHQ4AMX8itPG+iKrWaAWHu4eqR5bZnAh/AIrjixjadBiNgSvj39uJCBnIO0CO9IusANV8ldL0wlek0oSNKmo1LTtzJ90/Kk1ubxzsebxTRTKXtjVIREaFcra46tZGrSYVcdWcC3yKgD5suaPr3KpX6SBS5JfRnLq+sn4Z0i2nN5MrM3eofXBPBXjSyRlc5dL04kkIU0qSdCkolLL+bDzNFvQgLNhZ1jQ/mcaFG3k6pBuExETwabg3+Ibhy/esD87nNM7Fy1KtKJtYAcaF3sY3yy+Lo40fQi6fJhfgpawLGgxO8/tiF9fo0At2gZ2oE1gOwJyBrowwnunSSUJmlRUaoiOjeaJJZ3YePI3XqvzFoOqvejqkO4qOjaaraf/iO+qfCrUPnCFr6cvDxdvTtvA9jQv0ZIc3jldHGnaYbPZ2Hdxb3zX3/0h/wDg4eZBvSINrN537SiYrZCLI71/mlSSoElFpYZ3/3iLyTvH0yqgLXNafZNuqjji2Gw2/jq3k6VBS/gl6GeCrvwLQBb3LDQs2jj+WZi8WfO6ONLUF2uLZcfZbSwNWsLSoMXx47d5e3jTuNjDtA3sQIuSrcjtk7HGttWkkgRNKsrZfj2ylB6/PklAzkBWdf4t3f9lb7PZkEsH4kswey/8DYC7mzt1CtWLfxamiF9RF0fqPNGx0Ww5tdleIjnyC2dCTwOQLUt2mpdoQdvADjQt3vyeHmZNLzSpJEGTinKmoCv/0mJBY6JiI1n26BoezFvB1SE53NErR1h25Bd++fdntp/dGr++Wv7qtAnsQNvAdpTKVdqFETrGjegbbAhex9KgJSw/spRLEfYBQP29/WkV0Ja2ge1pWLQJPp4+Lo40dWhSSYImFeUsYVFhtPmxGf9c3MunTafTxTzp6pCc7kzoaZZZD1v+fnIjMTb7LBblcpeP76r8YJ4K6ab673rkNdYcX2X1jFtJaNR1AAr4FozvsVW3cP009wxJatCkkgRNKsoZbDYbL6ztz/fyLT0e7M24RhNdHVKqC7lxkZVHl7M0aDHrT6wlIiYCgBI5StI2sANtA9tTvUBN3N2cOU9gyqXXuFObJpUkaFJRzjBn32yG/zaEqvmrsbjTijQxrIYr3ekv/riJx+oWqk8WjywuiS+jlbBSgyaVJGhSUY626+wO2i9qSXav7Kx+fCNF/Yrd/aBM5E5tEy0D2tA2sAONUqFt4uiVI/E9tjJyW5CzaFJJgiYV5UghNy7S7PuGnLwezPx2P9KkeFNXh5Sm3akXVbPiLWgb2J5mJVo4pBfVnXqt1S1Un7aB7Wkd0C5D91pzJE0qSdCkohwlJjaGp5Z2Zt2JNbxS61WG1XjF1SGlK7G2WHae3R7/LEzC5z0aFW1Cu1IdU/y8R8Lna5YeWcy/lw8D9udrGhVtQtvADrQMaJMpn6+5Xy5LKsaYVsBk7DM/zhSR92/ZXgL7FML5sM/W2E1Egq1tMcAea9fjItLhlmM/BnqJSHZreSLQxNrsC+QXkVx3ik+TinKUD7e+x0fb36dZ8RZ83fb7TN+Qez9sNhv/XNzHL0E/3/XJ9EWHFjJpx/j4qXEHVXuRQtkKx5d+Tl4PBnQkAEdzSVIxxngAB4HmQDD2OeufFJF/EuyzAPhFROYYYx4GnhGR7ta263EJI5Fz1wAGA50S28cY8wJQVUR63SlGTSrKEdYcW8lTSx+nmF9xVj3+G/4+uV0dUoby7+VDLA365bYxtAJzlop/uj8xOmaZ89wpqTizg3Ut4HDcPPHGmPlAR+CfBPuUB4Zar9cBP93tpFayGgc8BXRKYrcngTfvLWylku/41WMMWN0HLw8vZrf6ShOKE5TKVZpB1V5kULUXOXktOH7isc2nNia6v7+3P9Oaz9bRlV3EmWX0IsCJBMvB1rqEdgOPWq87AX7GmLhKUx9jzHZjzB/GmEcSHDMQWCwipxN7U6tKLQBYe78XoNSd3Ii+Qe8VT3M54jLvNxhPpXxVXB1ShlfEryh9KvVn0SNL8XBLfL6Xa1HXaFK8qSYUF3F1xe9LQCNjzC6gEXASiLG2lRCRGthLJJOMMaWMMYWBx4FP7nDOrsBCEYm5wz5K3bdXN73M7vO7eKpsd/5X/mlXh5PplPEvm6L1KnU4M6mcBBJ20i9qrYsnIqdE5FERqQq8aq27bP1/0vo/CFgPVLX+PQAcNsYcBXyNMYdved+uwLcOvhalbvLt/q/56p8vqZi3MmMbfuTqcDKlIdWHJbp+cLWhia5XqcOZbSrbgNLGmADsyaQr9lJHPGNMXiBERGKBkdh7gmGM8QfCRCTC2qc+8KHVyF8wwfHXReSBBMtlAX9gixOvS2Vye87v5pUNQ8npnYtZLeeS1TOrq0PKlDqV7gzA5J0T4nt/Da42NH69cg2nJRURiTbGDARWYO9SPFtE9hlj3ga2i8hioDEw1hhjAzYAz1uHlwOmG2NisZem3k/Ya+wOugLzRUR7dSmnuHzjEs+s6M6NmBvMajmXkjkDXB1SptapdGdNImmMPvyoVDLF2mJ5ellXVh5bztDqwxlR+3VXh6SUS9ypS7GrG+qVSjc+3jmBlceW06hoE4bXHOXqcJRKkzSpKJUMv51Yx/tbx1Ake1GmNZ+Nh3vi3VmVyuw0qSh1FyevBdN/VS883DyY2XIOebJmrPnGlXKkzDdlmVIpEBETQZ+VT3PxxkU+aDiB6gVqujokpdI0LakodQdvbh7FjrPb6VzmCXo+2NvV4SiV5mlSUSoJCw9+x+y9MyiX+0E+ajRZZ/5TKhk0qSiViH8u7mPY+kH4eeXgi1Zf6Qi3SiWTtqkodYurEVfotbwb4dHhfNlqFoG5Hrj7QUopIJlJxRjjC4wCAkXkKWs4lLIicteh6pVKT2w2G4PWPkfQlX8ZWHUIbQLbuTokpdKV5FZ/TcWegCpby8HofCUqA5ry18csO7KE+oUbMKr2G64OR6l0J7lJpZKIjAAiAUTkegqOVSpd2HxyI2P+eJOC2QoxvcUXeLpr7bBSKZXcxBCRcMEY45OCY5VK886EnubZlc/g7ubOjBZzyO+b39UhKZUuJTcxbDDGjAK8jTGNge+Bn50WlVKpKComij4renA+/Byj646hdqE6rg5JqXQruUnlVcANuAZ8CGwFRjspJqVS1dt/vMHWM3/wyAOP0rfSAFeHo1S6dteh740xHkBvEfk8dUJKPTr0vfr58I/0XdmTMv6G5Z3XkT1LdleHpFSad19D31tzvfdzaERKpQEHQ4Qh6waSLUt2Zrf8WhOKUg6Q3OqvtcYYnV5NZRjXo67Ta0U3QqOuM6nJp5TJbVwdklIZQnL7TPYEhhljwoFQ7O0rNhHRLjIq3bHZbAxdN5CDl4R+lZ6j4wOPujokpTKM5CaVGk6NQqlUNOPvqfx0+EdqFazDG3XfcXU4SmUoyZ6j3hjjCcTVEYiIRDstqlSiDfWZz5+n/6DTz23w987Nmi4bKZitkKtDUirdue856o0xNYB/gUXAT8AhY0w1x4SnVOo4F3aOvit7YLPZmNHiS00oSjlBchvqJwO9RKSMiJQGegOfOC8spRwrOjaafiuf4UzoaV6tM5p6RR5ydUhKZUjJTSrZRGRN3IKIrAWyOSckpRxv7J/vsPnURtoGduD5KoNcHY5SGVZyk0qYNTwLAMaYRkCYUyJSysGWBf3CJ7smEpizFJObTNEZHJVyouT2/hoMLDTGxA0s6QU85pyQlHKcoMuHeWFtf7J6ZmV2q6/J4Z3T1SEplaElK6mIyDZjzAPc3PsrynlhKXX/QqNCeWZ5d65FXuWzZjMon+dBV4ekVIaX3N5fzQBfEdkrInuBbMaYh50bmlL3zmazMfy3IewP2cczFfrQucwTrg5JqUwhuW0q44CrCZavAh85PhylHOPLfbNYePA7qheowdv1x7o6HKUyjeQmFTcRiX9QUERiAQ/nhKTU/dl5djuvbXqFPD55mNliLt4e3q4OSalMI7lJ5ZoxpnbcgvU61DkhKXXvLoZfpPeKp4mOjWZa89kU8Svq6pCUylSS2/vrZeAnY8w+7INJlgN0FD6VpsTExtB/VS9OXg9mZK3XaVSsiatDUirTSW7vry3GmPJAa8AGHBCRXU6NTKkUGrftPX4LXkeLEq0YXH2Yq8NRKlO6Y/WXMeZrY0xla9EN+1TCrwHLjTF9nB2cUsm16uhyJuwYR4kcJfm06XTc3ZJbs6uUcqS7/eZVE5Hd1uvuwD8i8iBQHRjo1MiUSqZjV4/y3Jpn8fHwYXarr8nl4+/qkJTKtO6WVG4keP0Q9lGKEZFg7NVgSrlUeHQ4vZZ350rEZT5oOIGKeSu5OiSlMrW7tqkYYwoDl4DGwJsJNvk4KSalkm3UxuHsubCbbuV68GS5bq4OR6lM725JZSzwFxAJbBKRfwCMMXWA406OTak7mvfPXObtn0ulfFV4r8E4V4ejlOIu1V8isgCoBLTj5i7Ex4G+ToxLqTv6+/xfjNg4jFzeuZjVci4+nlpwViotSPZ0whmRTiecPl26EULzBY04ce0437RdQNMSLVwdklKZyn1PJ6xUWhFri+X51c9y/NoxhtZ4WROKUmmMJhWVrkzcMY7Vx1fSpFhTXqoxwtXhKKVuoUlFpRvrjq/hw63vUTR7MaY2n4mHu45pqlRao0lFpQsnrh1nwOreZHHPwqyWc8ntk8fVISmlEpHcASWVcpmImAj6rHiakBshjGs0iaoFqrs6JKVUErSkotK81zeNYNe5nTxhnuLp8s+4Ohyl1B1oUlFp2vfyLV/um0X5PBX4oOEE3NyS7MmolEoDNKmoNGvfhb0M/20IObxyMrvVV/hm8XV1SEqpu9A2FZUmXYm4TK8V3QiPDmda69kE5izl6pCUUsmgJRWV5thsNl5YO4AjV4IYVHUorQPaujokpVQyaVJRac4nuyax/MhSGhRpxIjar7k6HKVUCmhSUWnKppMbeO/PtyiUrTDTms/G011raJVKTzSpqDTj9PVTPLvyGdzd3JnZcg75fPO5OiSlVArpn4EqTYiMiaT3iqe5EH6e9x76kJoFa7s6JKXUPdCSikoT3vr9Nbaf3cqjpTvTu2I/V4ejlLpHmlSUyy06tJAZe6Zh/MvyUeOP9QFHpdIxTSrKpSTkAC+ue4FsWbLzRat5ZM+S3dUhKaXug7apKJe5HnmNXsu7ERYdyqyWc3nAv7SrQ1JK3SctqSiXsNlsDFk3kEOXDzKg8gu0L/WIq0NSSjmAJhXlEtP/nsLifxdRp1A9Xqsz2tXhKKUcRJOKSnV/nPqdt35/nfy+BZjR4kuyeGRxdUhKKQfRpKJS1dmws/Rd2ROAGS2+pEC2gq4NSCnlUE5tqDfGtAImAx7ATBF5/5btJYDZQD4gBOgmIsHWtuVAHWCTiLRLcEwAMB/IA+wAuotIpDFmItDE2s0XyC8iuZx5fSp5Fh1ayKQd4zl46QDeHt6ERYcxut671C1c39WhKaUczGklFWOMBzAFaA2UB540xpS/ZbePgLkiUgl4GxibYNs4oHsip/4AmCgiDwCXgN4AIvKiiFQRkSrAJ8CPjrwedW8WHVpIv1W92B+yjxhbDGHRYQAU9NUSilIZkTOrv2oBh0UkSEQisZcuOt6yT3lgrfV6XcLtIrIGuJZwZ2OMG/AwsNBaNQdIrNvQk8C393sB6v5N2jE+0fUf75qYypEopVKDM5NKEeBEguVga11Cu4FHrdedAD9jTJ47nDMPcFlEopM6p1WlFsB/yUq50MFLB1K0XimVvrm6of4loJExZhfQCDgJxNznObsCC0Xkfs+j7tPuc7vwcPNIdFsZ/7KpHI1SKjU4M6mcBIolWC5qrYsnIqdE5FERqQq8aq27fIdzXgRyGWPiOhjcdk7sSUWrvlwoJjaGj3dOpPWPTYmMjUx0n8HVhqZyVEqp1ODMpLINKG2MCTDGeGH/sl+ccAdjTF5jTFwMI7H3BEuSiNiwt710tlb1AH5OcL6ygD+wxSFXoFLs5LVgOi/uwJg/3iSPT16+b/8T05vPpnyeCni6e1I+TwWmN59Np9Kd734ypVS647QuxSISbYwZCKzA3qV4tojsM8a8DWwXkcVAY2CsMcYGbACejzveGLMRKAtkN8YEA71FZAXwCjDfGDMG2AXMSvC2XYH5VvJRqWzx4UUM+20wVyIu0zqgHRMaf0KerPYmMk0iSmUObjZb5v3+PX/+Wua9eAe6HnmNUZteZv6Befh6+vLOQ+/TrVwPHcJeqQwqXz6/JH+5dZRidV+2n9nKgNV9OHb1KJXzVWVa85mUyqWjDSuVWWlSUfckOjaaSTs+Yvz2D4i1xTK42jCG1xyJl4eXq0NTSrmQJhWVYseuHuW51X3ZduZPimQvypSmn1OvyEOuDksplQZoUlHJZrPZWHjwO17ZMIzrUdd45IFH+bDhRHL5+Ls6NKVUGqFJRSXLlYjLvLJhKD8eWkj2LH582nQ6j5fpqo3xSqmbaFJRd/XHqd95bnVfgq+foEaBWnzWbAYlcwa4OiylVBqkSUUlKSominHbxvLxrgkAvFRjBENrvIynu/7YKKUSp98OKlFBlw8zYHUfdp3bSfEcJfms6QxqFart6rCUUmmcJhV1E5vNxjf7v+LVTa8QFh1KF/MkYxuMw88rh6tDU0qlA5pUVLyQGxcZtn4wS4MWk8Mrp47RpZRKMU0qCoANwesZuKYfZ0JPU7dwfaY0/ZyifsXufqBSSiWgSSWTi4iJYOyf7/DZXx/j6e7Ja3VG83yVwXi4Jz4PilJK3YkmlUzsYIjQf3Vv9l74m8CcpZjWfBZV8ldzdVhKqXTM1TM/Khew2WzM3juDZgsasPfC33Qv35PVXTZqQlFK3TctqWQy58POM2Tdc6w6tgJ/b3+mNp9F28D2rg5LKZVBaFLJRNYcW8kLawdwIfw8DYs24dOm0yiYrZCrw1JKZSCaVDKB8Ohw3tnyBjP3TMfL3Yu36r1Hv8rP4e6mtZ9KKcfSpJLB7buwlwGre3MgZD9l/A1Tm8+iYt5Krg5LKZVB6Z+qGVSsLZbpu6fQcmFjDoTsp3fFZ1n1+AZNKEopp9KSSgZ0JvQ0L6zpz2/B68ibNR+Tm0yheclWrg5LKZUJaFLJYJYF/cLQ9QMJuRFCs+ItmPTwZ+T3ze/qsJRSmYQmlQwiNCqUNzaP4qt/vsDHw4exDT6iV4W+OomWUipVaVLJAHaf20X/1b359/JhyuepwLTmsyibu5yrw1JKZUKaVNKxmNgYpvz1Me9vfYfo2Gj6Vx7Iq3XexNvD29WhKaUyKU0q6dTJa8EMXNOPzac2UsC3IJ80nUbjYg+7OiylVCanSSUdWnx4EcN+G8yViMu0DmjHhMafkCdrHleHpZRSmlTSk+uR1xi5cTjfyTf4evoyvvHHdCvXQxvj1X3zXrQQ30nj8Th4gJgyZQkbMoyITvc+QduVK5cZPPg5AEJCLuLu7k6uXP4AzJgxhyxZstz1HO+99xbduvWgePGSSe7zww/f4+fnR4sWre85VuVYbjabzdUxuMz589fSzcVvP7OVAav7cOzqUSrnq8q05jMplau0q8NSGYD3ooXk6NfrtvVXp8++r8QSZ9as6WTN6stTT3W/ab3NZsNms+HunvGewc7I1waQL59fkn/JakkljYuOjWbSjo8Yv/0DYm2xDK42jOE1R+Ll4eXq0FQ6kW30a3gv+SnJ7e5nTie63m9gP7KNGZ3otoj2jxA6ekyKYwkOPsGIEUMpXdpw6JAwceLiwSC5AAAXaklEQVQUZs+ewcGDB4iIiKBp0+Y880xfAAYM6M3QoS8TEFCKdu2a0bHjY/zxx+/4+Pjw/vvj8ffPzeeff0auXLno0uUpBgzoTaVKVdi5cxvXr19n1Kg3qVixMuHh4YwZ8wbHjh2lZMkATp8+zYgRr1G6tLkptilTJrNlyyY8PDyoXbsezz03iIsXLzBu3HucPn0KcOPll1/lwQcrMG/eHJYvXwpAx46P0rlz10Sv7fDhQ3z55UyioiIpWrQ4I0e+QdasWVN839ITTSpp2LGrR3ludV+2nfmTItmLMqXp59Qr8pCrw1IZTVRUytbfp2PHjvLaa29Rtmx5AAYMGEiOHDmJjo5m0KD+NG7clICAwJuOuX79OlWqVGPAgBf45JMJ/PLLYrp373nbuW02GzNmzGXTpt/44ouZTJjwCQsXfkfu3Hl5991xHDp0kN69u912XEjIRbZs2cxXX32Pm5sb165dA2DChA+oWbM2jz32BNHR0URE3GDfvr2sXLmcmTPnEhMTQ9++PahatQbe3t43XdulSyHMmzeHyZOn4uPjw5w5s1iw4Fuefvr2UmFGokklDbLZbCw8+B2vbBjG9ahrPPLAo3zYcCK5fPxdHZpKh0JHj7ljqcK/UV089++7bX1M+QpcWv+7w+MpUqRofEIBWLVqBUuX/kxMTAwXLpzn6NGg25KKt7c3devWB8CYcuzevSvRczdq9HD8PmfOnAJgz56/+N//egBQunSZ284NkCNHTtzd3fjggzHUrfsQ9es3AGDXrp289dZYADw9PfH0zM7ff/9F48YP4+3tA0CDBo3ZvXsXtWrVuena9uz5m6NHg+jf355EoqOjqFixyj3csfRFk0oacyXiMq9sGMqPhxaSPYsfnzadzuNlumpjvHKasCHDEm1TCRs81Cnv5+PzX/XPiRPHWbBgPjNmzMHPz4+3336dyMjI245J2LDv7u5OTExMouf28spy130S4+npycyZX7Ft25+sW7ean35ayMSJU5J9fJyE12az2ahduy6vv/5Ois+TnmXMVqR0asupzTT5rj4/HlpIjQK1WNtlE13Mk5pQlFNFdOrM1emziS5fAZunJ9HlKziskf5uQkND8fX1JVu2bFy4cIGtW7c4/D0qVqzM2rWrAPj338McPXrktn3CwkIJDQ2lfv0GDBo0lEOHBIBq1arz888/ABATE0No6HUqV67Chg3riIi4QVhYGJs2/UblylUTed9K7Nq1k5MngwEIDw/nxInjDr++tEZLKmlAVEwU47aNZfLO8bi5ufFSjREMrfEynu768ajUEdGpc6okkVsZU5aAgACeeqozBQsWpGLFyg5/j8cee4IxY96kW7fHKVkygJIlA8iWLftN+1y/fp1XXx1OZGQUNlssAwe+CMCLL77MBx+8y88//4iHhwfDh4+ifPkKNGvWkj59ngbgkUceo1SpBwgOPnHTOXPnzsPIka/z5pujiLLap/r1e55ixYo7/BrTEu1S7GJBlw8zYHUfdp3bSfEcJfms6QxqFart6rCUyjCio6OJiYnB29ubEyeOM3ToQL799kc8PfWPtnulXYrTIJvNxjf7v+LVTa8QFh1KF/MkYxuMw88rh6tDUypDCQ8PZ/DgAVYbi43hw0dpQnEiLam4QMiNiwxbP5ilQYvJ4ZWTcY0m0ql06lc9KKXUvdCSShqyIXg9A9f040zoaeoWrs+Upp9T1K+Yq8NSSimH0KSSSiJiInjvj7eZuvsTPN09ea3OaJ6vMhgPdw9Xh6aUUg6jSSUVSMgB+q/qzb6LewjMWYppzWdRJX81V4ellFIOp8+pOJHNZmP23hk0X9CQfRf30L18T1Z32agJRSmVYWlScZLzYefptqwLIzYMI6tnVr5oNY/xjT8me5bsdz9YqVS26NBCGs2vS6Gp/jSaX5dFhxbe9zkvXrzAm2+OpEuXjvTq1Y2XXhrE8ePHHBCt43Xu3J7Lly8DxA+rcqt33x3NunWr73ieZcuWcOHC+fjl999/hyNHghwXaDqg1V9OsObYSl5YO4AL4edpWLQJnzadRsFshVwdllKJWnRoIf1W/fdFuj9kX/zyvfZKtNlsjBo1nNat28aPnXXo0EEuXQqhePES8ftFR0enue6906bNvudjly1bQmBgKfLmzQfAiBGvOyosh3LmfU9bn2Y6Fx4dzjtb3mDmnul4uXvxVr336Ff5OdzdtECoXGf076+x5N+kh74/E5r40PcD1/RjzB+jE93WvtQjjK6X9CCVO3dux9PTk0ce+S8plS5dJn7bzJnT8PPz49ixY8yf/yPz53/N0qWL7edu/whdujxFeHg4b7wxgnPnzhEbG0PPnn1o2rQFU6d+wubNG/Dw8KBmzToMHDjkpvf+6aeFnDx5kuefHwzYv+gPHPiHoUNfYeTIYZw9e5bIyEgef7wrHTs+elvszZs3YNWqjdhsNiZO/JBt2/4kf/6CZMny39flF1/MYPPmjURE3KBChcq8/PIo1q9fg8h+3nrrNby9fZg+fTbDhg1i4MAhlC1bnlWrlvPVV19gs9moW/chnntuUPz7de7cld9/34S3tzfvvz+e3Llvnsl1164dTJ48HgA3N5gyZQa+vtn4+usvWbnyV9zc3KlTpx4DBrzAoUPCuHFjiYi4QeHCRRk58g1y5MjBwIHPUrq04e+//6JZs5a0atWWjz56j7NnzwIwaNBQKlW6/wEvNak4yL4LexmwujcHQvZTxt8wtfksKuat5OqwlLqrqNjEh7hPan1yBAX9izFlk9x+8OAB5s79jsKFi3DgwH6WLVvC55/PwWaz8eyzPalSpRqnTp0kb958jBs3GbAPpXLlymU2bFjHN9/8cNMQ9Qk1atSU/v2fiU8qa9asih9u3v4Fm5OIiBv06fM0jRs/TM6cuRKNccOGdRw/foyvv17ApUshdOv2OG3bdgDgsce6xM/78s47r7N580aaNGnGDz98H59EErpw4TxTp37CrFlf4+fnx9ChA9mwYT0NGzYmPDycBx+sSL9+z/PZZ5NZvHgRPXv2uen4b7/9mqFDX6ZSpSqEhYXh5eXFli2b2bRpA59/PgcfHx+uXr0CwJgxbzJkyHCqVq3OzJnT+OKLGQwePAyAqKgoZs36CoDRo1+lS5f/UblyFc6cOcOwYQOZN+/+qz01qdynWFssn//9GWO2jCYyNpLeFZ/ljbrvkNUzY0/Eo9KP0fXG3LFU0Wh+XfaH3D70ffk8FVj/hOOHvgcoV+5BChcuAsDff/9Fw4ZN4ievatSoCbt3/0Xt2nX59NNJfPbZx9Sv34DKlasSHR2Nl5c3Y8e+Tf36DahXr8Ft5/b396dw4SLs3buHYsWKcfz4USpVso8ptmDBfDZsWA/AuXNnOXHiRJJJ5a+/dtGsWUs8PDzImzcf1arVjN+2c+d25s2bS0TEDa5evUrJkqV46KGGSV7v/v37qFq1Ov7+9ukrWrRoxe7dO2nYsDFZsmSJH2rfmHJs2/bnbcdXrFiZTz6ZSIsWrWnUqAn58xdg+/attGnTHh8f+xD8OXLk5Pr161y7do2qVasD0Lp1O15//ZX48zRt2jz+9fbtW28aXDM0NJSwsDB8fX2TvI7kcGpSMca0AiYDHsBMEXn/lu3FgTlALmufESKyzBjzP2B4gl0rAdVE5C9jjBfwKdAYiAVeFZEfrPN1AUYDNmC3iDzl6GtadGghk3aM5+ClAwTmKoWnmyf7Q/4hb9Z8TG4yheYlWzn6LZVyqiHVh93UphJncLV7H/o+ICCQ9evXJLk9ObMfFi9egtmzv2bLls3MmDGV6tVr8swzfZkxYw47dmxl3bo1/PDD90ycOIXeve1TFT/0UEP69OlP06YtWLduFcWLl6Rhw8a4ubmxc+d2tm/fyvTpX+Dj48PAgc8SGRmR4muLiIhg/PgPmDlzLgUKFGTWrOn3dJ44np6e8SORJzVkf/fuPalX7yG2bNnEgAG9mTDh03t6r4T33WaLZfr0L/D29r63wJPgtMp+Y4wHMAVoDZQHnjTGlL9lt9eA70WkKtAV+AxAROaJSBURqQJ0B46IyF/WMa8C50SkjHXe36z3Kw2MBOqLyIPAzRWtDhDXoLk/ZB8xthgOXTrI/pB/qJCnIuuf2KIJRaVLnUp3Znrz2ZTPUwFPd0/K56nA9Oaz72vooOrVaxIZGcnPP/8Yv+7w4UOJTq5VuXJVNm5cz40bNwgPD2fDhnVUrlyFCxfO4+3tQ8uWbXjyye4cPHiAsLAwQkOvU7fuQwwaNIzDhw/h4eHBl19+w5dffkOfPv0BaNiwCRs3/sbq1Sto2rQFAKGh1/Hzy4GPjw/Hjh3ln3/23vEaqlSpytq1q6zJwy6wc+d2gPj5XnLlykVYWNhNydPXNxthYWG3natcuQr89ddOLl++TExMDKtWraRKleQ/WnDyZDClSj1At249KVeuPMeOHaVmzdosW7aEGzduAHD16hWyZ8+On1+O+Pu8fPnSJN+nZs06/PDDd/HLccP93y9nllRqAYdFJAjAGDMf6Aj8k2AfGxA3gmJO4FQi53kSmJ9guRdQFkBEYoEL1vq+wBQRuWRtO+eYy/jPpB3jE10fi438vvkd/XZKpZpOpTs7dPw5Nzc3xo79iMmTxzNv3hy8vLwpVKgQgwYN4/z5m381jSlL69bt6NvXPpR8+/aPUKZMWf78cwuffTYZNzd3PD09eemlEYSFhTFy5FAiIyOx2Wy88MKLib5/jhw5KFkygCNHjlC+fAUAateux08//cj//teZ4sVLxK9PSsOGTdixYxvduj1OgQIFqVChIgB+fn60b/8I3bs/QZ48eShX7sH4Y9q0ace4ce/FN9THyZs3L/37D2TQoH7xDfUNGjRO9v38/vtv2LlzO+7u7pQsGUidOvXw8vLi0KGD9OnTHU/PLNStW59+/Z7ntddGJ2ioL8LIkW8mes4hQ4YzYcIH9OjRlZiYGCpXrsrw4aOSHVNSnDagpDGmM9BKRPpYy92B2iIyMME+hYCVgD+QDWgmIjtuOc+/QEcR2WuMyQXsARZgr/76FxgoImeNMT8BB4H62KvSRovI8jvFmNIBJQtN9SfGdnvR1NPdk1P9Q1JyKqWUSrfuNKCkq/u6Pgl8KSJFgTbAV8aY+JiMMbWBMBGJK6d6AkWB30WkGrAF+CjBttLYk82TwAwrCTlMGf/Ee7MktV4ppTIbZyaVk0DC4XeLWusS6g18DyAiWwAfIG+C7V2BbxMsXwTCgLiK2gVAXIVhMLBYRKJE5Aj2Ukvp+7+M/wypPizR9ffToKmUUhmJM5PKNqC0MSbA6rHVFVh8yz7HgaYAxphy2JPKeWvZHehCgvYUEbEBS7CXRrCOjWuj+SluvTEmL1AGcOj4CM5o0FRKqYzEqZN0GWPaAJOwt3HMFpF3jTFvA9tFZLHVG2wGkB17o/3LIrLSOrYx8L6I1LnlnCWAr7B3Qz4PPCMix40xbsB4oBUQA7wrIgkb+G+TFqYTVkqp9OZObSo686NSSqkUScsN9UoppTIQTSpKKaUcRpOKUkoph9GkopRSymEydUO9Ukopx9KSilJKKYfRpKKUUsphNKkopZRyGE0qSimlHEaTilJKKYfRpKKUUsphNKkopZRyGGdOJ6wcxBhTDJgLFMA+mvPnIjLZGJMb+A4oCRwFusRNp5wRGWM8gO3ASRFpZ4wJwD41Qh5gB9BdRCJdGaOzWBPOzQQqYP8Z6AUImeTzN8a8CPTBfu17gGeAQmTQz98YMxtoB5wTkQrWukR/360R2idjn+gwDOgpIjtdETdoSSW9iAaGiUh5oA7wvDVtwAhgjYiUBtZYyxnZYGB/guUPgIki8gBwCfukbxnVZGC5iJQFKmO/D5ni8zfGFAEGATWsL1gP7PMzZeTP/0vs03gklNTn3Rr7hISlgWeBqakUY6I0qaQDInI67i8PEbmG/QulCNARmGPtNgd4xDUROp8xpijQFvtf61h/nT0MLLR2ybDXb4zJCTQEZgGISKSIXCYTff7Ya1WyGmM8AV/gNBn48xeRDUDILauT+rw7AnNFxCYifwC5jDGFUifS22lSSWeMMSWBqsCfQAEROW1tOoO9eiyjmgS8DMRay3mAyyISbS0HY0+0GVEA9gnpvjDG7DLGzDTGZCOTfP4ichL4CPtMsaeBK9iruzLL5x8nqc+7CHAiwX4uvReaVNIRY0x24AdgiIhcTbjNmmo5Qw7kZoyJq1ve4epYXMQTqAZMFZGqQCi3VHVl8M/fH/tf4wFAYSAbt1cNZSpp+fPWpJJOGGOyYE8o80TkR2v12bhirvX/OVfF52T1gQ7GmKPYG2Yfxt7GkMuqDgEoCpx0SXTOFwwEi8if1vJC7Ekms3z+zYAjInJeRKKAH7H/TGSWzz9OUp/3SaBYgv1cei80qaQDVvvBLGC/iExIsGkx0MN63QP4ObVjSw0iMlJEiopISewNtGtF5H/AOqCztVtGvv4zwAljjLFWNQX+IZN8/tirveoYY3yt34W4688Un38CSX3ei4GnjTFuxpg6wJUE1WSpToe+TweMMQ8BG7F3pYxrUxiFvV3le6A4cAx7F8NbG/cyFGNMY+Alq0txIPaSS25gF9BNRCJcGZ+zGGOqYO+k4AUEYe9S604m+fyNMW8BT2DvCbkLe/fiImTQz98Y8y3QGMgLnAXeBH4ikc/bSrSfYq8SDAOeEZHtrogbNKkopZRyIK3+Ukop5TCaVJRSSjmMJhWllFIOo0lFKaWUw2hSUUop5TA6SrHKMIwxfwLe2LvdlgH2Wpt2icgzKTzXCqCfiBy9y35fADNE5PeUR5x+GGOaAWNEpI6rY1Fpm3YpVhmONT7adhHJe4d9PEQkJvWiSt80qajk0pKKyhSsL8Vx2B8grQyMMMbkBV4AsmAfR2moiKy39g8GmonIAWPMJuB3oB72B+7michr1n6bsH/ZLjfGfA1cBcphHzZjI9BLRGwJ5sTJDxzG/ru3RESmJRJrO+wPt3oDEcBgEdlmjOmJfWjzhla8a4CvRWSmMeZl7E+XewHh2EtZf1vDmEQBrwKPYn9QsDf24dKbW3F0FhGx7tGH2J9WrwpcB3qIyIEUxFgO+ALIin2I+pkiMilZH5LKELRNRWUmlYBPRaSyiPwKLBORWtYgjd2wf+knpSj2L/OqwHPWBGGJeRD7k80PAnWxPxUN9ieeV4jIg8AQ61y3McaUwf5l3UJEqgP9gQUAIvIlcAh4F/sT1qdEZKZ16GzrWqoAbwGf3XLqiyJSA3tyWYJ9qJuqwLfAyAT7VQGmWXF+jn1ej2THCAwEfrDucQX+G6pdZRJaUlGZyX4R2ZpgubQ1HEZh7MN/FDHG5BWRC4kc+72IxAKXjTEClAKOJLLforihQowxu6z91gFNsJcyEJEjxpj1ScTYCngA2PTfUF94GWPyiMhF4Dnsw767ATUSHFfbGDMC8Mdeirk16X1n/b8TiBaR5dbyDuwzBsYREdlkvZ4DTDXG+CY3RmAD8K4xJgewFkjqOlUGpUlFZSbXb1n+DnheRH6xpioOB3ySOPZGgtcxJP27k9z9kuIG/CIivZLYXgj7JFU2wA+4ZozJiv1aHhKRv4wxxbGPD5ZYXDEpiDGpBtc7xfidVSXYAnupqAfQM4nzqAxIq79UZpaT/0obfbG3rTjLeqwRZo0xJfivWuxWK4C2VtsE1sizNa3X3tiTx1BgDPCtlQzj2i/iJmp67j7iNMaYutbr7sBOEQlLQYylgdMi8gXwDlDrPmJR6ZAmFZWZDQF+McbsxN4Af8WJ7zUQaGOM2Ye9fWVrYu9nNYr3BOYYY3ZjbzTvY20eD/wpIgtFZAZwCnjLGpn4bWCHMWY79s4C9+ov7G1Ge4EBJFLKuEuMXYE9VtXfROz3WGUi2qVYqVRgVVFFikiMMaYIsA1oKCKHXRxaPO02rBxB21SUSh1lsc8x74b99+61tJRQlHIULakopZRyGG1TUUop5TCaVJRSSjmMJhWllFIOo0lFKaWUw2hSUUop5TD/B5pIDC6iP08rAAAAAElFTkSuQmCC
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>As we can see from the plot and from the accuracy scores, we are in an overfitting situation - We have a good score on the train, but a low score on the test and by adding data we improve the model's results.
This means the model is bad for unseen data and very good with the data it was trained on.</p>
<p>In an overfitting case there are a few things which need and can be done to improve our model:</p>
<ol>
<li>Add more data - not possible in this case.</li>
<li>Remove unimportant features in order to make the model less complex - aka. feature selection.</li>
<li>Add regulization.</li>
</ol>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Feature-selection">Feature selection<a class="anchor-link" href="#Feature-selection">&#182;</a></h2><p>One of the ways to avoid overfitting is by selecting a subset of features from the data.
There are a lot of ways to do feature selection. The most basic one in my opinion is removing correlating features.</p>
<p>As we checked before 'Total_phenols' and 'Flavanoids' are closely correlating features. Let's see what happens if we drop one of them!</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[20]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">X</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s1">&#39;Total_phenols&#39;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">inplace</span> <span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="c1"># delete one of the correlating features</span>
<span class="n">x_train</span><span class="p">,</span> <span class="n">x_test</span><span class="p">,</span> <span class="n">y_train</span><span class="p">,</span> <span class="n">y_test</span> <span class="o">=</span> <span class="n">train_test_split</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">stratify</span><span class="o">=</span><span class="n">y</span><span class="p">)</span> <span class="c1"># split the data again</span>
<p><span class="c1">#fit the same model again and print the scores</span>
<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
<span class="n">pred</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">x_test</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'score on training set:'</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'score on test set:'</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_test</span><span class="p">,</span> <span class="n">y_test</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">metrics</span><span class="o">.</span><span class="n">classification_report</span><span class="p">(</span><span class="n">y_true</span><span class="o">=</span><span class="n">y_test</span><span class="p">,</span> <span class="n">y_pred</span><span class="o">=</span><span class="n">pred</span><span class="p">))</span>
</pre></div></p>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>score on training set: 1.0
score on test set: 0.9111111111111111
             precision    recall  f1-score   support
<pre><code>      1       0.83      1.00      0.91        15
      2       1.00      0.78      0.88        18
      3       0.92      1.00      0.96        12
</code></pre>
<p>avg / total       0.92      0.91      0.91        45</p>
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Truly as we expected this step improved our model's score, but we are still overfitting.</p>
<p>Another feature selection method (and my favourite) is by using another algorithm's feature importance.
Many algorithms rank the importance of the features in the data, based on which feature helped the most to distinguish between the target labels.
From this ranking we can learn which features were more and less important and select just the one's which contribute the most.</p>
<p>Let's fit the train data in a [Random Forest classifier](http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html) and print the feature importance scores.</p>
<p>Random Forest is an ensamble that fits a number of decision tree classifiers. Ensamble methods use multiple learning algorithms to obtain better predictive performance than could be obtained from any of its learning algorithms alone, in our case from a simple Decision tree.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[21]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn.ensemble</span> <span class="k">import</span> <span class="n">RandomForestClassifier</span>
<p><span class="n">model_feature_importance</span> <span class="o">=</span> <span class="n">RandomForestClassifier</span><span class="p">(</span><span class="n">n_estimators</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span><span class="o">.</span><span class="n">feature_importances_</span>
<span class="n">feature_scores</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span><span class="s1">'score'</span><span class="p">:</span><span class="n">model_feature_importance</span><span class="p">},</span> <span class="n">index</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span><span class="n">x_train</span><span class="o">.</span><span class="n">columns</span><span class="p">))</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="s1">'score'</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">feature_scores</span><span class="p">)</span>
<span class="n">sns</span><span class="o">.</span><span class="n">barplot</span><span class="p">(</span><span class="n">feature_scores</span><span class="p">[</span><span class="s1">'score'</span><span class="p">],</span> <span class="n">feature_scores</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
</pre></div></p>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>                                 score
Nonflavanoid_phenols          0.009979
Ash                           0.014576
Proanthocyanins               0.021702
Magnesium                     0.023280
Alcalinity_of_ash             0.026449
Malic_acid                    0.038564
Hue                           0.084430
OD280/OD315_of_diluted_wines  0.114787
Alcohol                       0.116070
Color_intensity               0.152671
Flavanoids                    0.181141
Proline                       0.216350
</pre>
</div>
</div>
<div class="output_area">
<div class="prompt output_prompt">Out[21]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f196a7c59b0&gt;</pre>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgQAAAEGCAYAAAAaIo0AAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3XmcXFWd/vFPE9BEElChR0GRKOKDkIRAEhRlBwUUWZwoRBATGRRmlFF/iLvgMsriqIBsAwgICNEoiIAgoywRZItkYXsYFUQQMYgigbCF/v1xT0tR9FLprbq6n/frxaurzj3n3u89Vrzfe+6pOm0dHR1ERETE6LZKswOIiIiI5ktCEBEREUkIIiIiIglBREREkIQgIiIigFWbHUBEXz3zzIqOv/3t8WaHMay97GUvIX3Uu/RTY9JPvWuFPmpvn9DWVXlGCKJlrbrqmGaHMOyljxqTfmpM+ql3rdxHGSGIlrX0pHP61nDmHgMbSETECJARgoiIiEhCEBEREUkIIiIigiQEERERwShKCCR1SPrvmveHSjqiH/s7RtJt5e8Rkg4dkED7Hs+6kuZ1s+0qSdP7sM8+tRtux4iIiN6NmoQAeBJ4t6S1B2h/HwKm2P7kAO2vX2z/yfbMZscRERGtaTR97fAZ4H+AjwOfq90gaSLwXWBtYCkwx/a9ks4E/gFMB14JHGZ7nqSLgPHAAklfr9vXgVTJwouA3wLvB1YDFgOvtf2spNWBO4HXAbPr69t+vIdjtwFHA7sCHcBXbc8t53Cx7UmSxgFnAJuW44zrqWMkLQNOBd4O/BnYx/bSsvk9kk4EXgocYHu+pDHAkcB2wIuBE2yfImk74AjgIWASsADYz3aHpB2Bb1B95m4CDrb9ZE0MY4DTy/l2AN+1/a2e4o6IiIEzmkYIAE4A9pW0Zl358cBZtqcA5wLH1WxbB9gK2I3qIojt3YHltqfanlu3rx/bnmF7U+AOqovoI8BCYNtSZzfgcttPd1W/p2MD7wamUl3sdwKOkbROXQwHA4/bfiNwODCtl35ZHbjZ9ibA1aVNp1VtbwF8rKb8AOAR2zOAGcCBkl5btm1W6m5MlfC8VdJY4Exgb9uTqZKCg+timAq8yvakUueMXmKOiIgBNKoSAtv/AL4HHFK3aUvg++X12VQX4U4X2n7W9u3AKxo4zCRJ8yUtAfYFNinlc4G9y+t9yvue6nd37K2A82yvsP0g1QV8Rl0M2wDnlHNeTDU60ZNna+I5h+ef/4/L3wXAxPL67cD+khYCNwBrARuWbTfavs/2s1RJ0ERAwN227yp1ziox1vo98DpJx0vahWp0JCIihsioSgiKb1Pd4a7eYP0na153+fvPdc4EPlLucr8EjC3lFwG7SHo51R37L3up35djD5SOLmJYwXOPmNqAj5YRkqm2X2v753X169v0yPbfqEY9rgIOAk7rY+wREdEHoy4hsP0w8AOePzR/HdVdO1R36fP7cYgJwAOSViv76jzuMqpn58dSPetf0VP9HswH9pY0RlI71Z32jXV1rgHeByBpEjCll32uAnROSHwf8Kte6l8OHFxiRtIbyryI7hiYKOn15f37qUY2/qlM9lzF9o+AzwOb9xJDREQMoFGXEBT/TTWBsNNHgTmSFlNdrP6zH/v+AtUw+rVUE/pqzQX247nh+d7qd+UCqkcAi6hGGQ6z/ee6OicB4yXdAXyZari/J48BW0i6FdihtOnJacDtwG9Km1PoYSTA9hPAHOCH5dHIs8DJddVeBVxVHkOcA3ymlxgiImIAtXV0dPReK0Y0Sctsj292HCtr6Unn9O3DO4oWN2pvn8DSpY82O4xhL/3UmPRT71qhj7L8cURERHRrNP0Owagn6Qaq3w2o9f5WHB0AaD94v2GfiUdEtIokBKOI7Tc1O4aIiBie8sggIiIiMkIQreve4wZ+6YZxs/IDiRExOmWEICIiIpIQRERERBKCiIiIIAlBDCJJe0rqkLRRL/WWDVVMERHRtSQEMZhmUa2LMKvZgURERM/yLYMYFJLGUy2jvD3wU+BwSetQreOwBtVn72Db80v9/wJ2A5YDe5SlnSMiYohkhCAGyx7AZbbvAv4qaRrVSoqX255KtdTxwlJ3deB625tSrdR4YDMCjogYzZIQxGCZBZxfXp9f3t9EtarkEcBk252/O/wUcHF5vQCYOHRhRkQEJCGIQSDp5VTLKJ8m6R7gk8B7gfnANsD9wJmS9i9NnrbduXLhCvIoKyJiyCUhiMEwEzjb9vq2J9peD7ibKhl40PapwGnA5s0MMiIinpM7sRgMs4Cj6sp+BJwJPCbpaWAZsD8RETEstHV0dPReK2IYuve4mQP+4R1paxm0t0/IEtENSD81Jv3Uu1boo/b2CW1dleeRQURERCQhiIiIiMwhiBb2mkPmDfuhuYiIVpERgoiIiEhCEBEREXlkEC3s8tPf0dTjb7773KYePyJiIGWEICIiIpIQRERERBKCiIiIIHMIBoWkFcASqv69A/iA7ccH8XjbAU/Zvq68PxO42Pa8wTrmypA0Hdjf9iHNjiUiIrqWhGBwLLc9FUDSucBBwDc7N0pqA9psPztAx9uOam2A6wZofwPK9s3Azc2OIyIiupeEYPDNB6ZImghcDtwATAPeIektwGeBNuAS258CkHQSMAMYB8yzfXgpvwc4C3gXsBrwHuAJqoRjhaT9gI+W424j6RPAK4HDbM8ricjRwK5AB/BV23PLvj8F7Ac8C/wMOBX4oe3Ny/YNgbm2N5f0xRLDOKok5MO2OyRdVc5ve+ClwAG255cRjENt7ybpCOA1wOvK32/bPk7S6sAPgFcDY4CvdMYWERGDL3MIBpGkVakuvktK0YbAibY3AZ6mWhFwB2AqMEPSnqXe52xPB6YA20qaUrPbh8pF+iSqi+w9wMnAt2xPtT2/1FsH2ArYDTiylL27HGtTYCfgGEnrSNoV2AN4k+1NgaNt/w54RNLU0nYO0Lnyz3dsz7A9iSop2K0mvlVtbwF8DDi8m67ZCNgZ2AI4XNJqwC7An2xvWvZ7WXf9GhERAy8JweAYJ2kh1TD5vcDppfwPtq8vr2cAV9leavsZ4Fxgm7LtvZJ+A9wCbAJsXLPvH5e/C4CJPcRwoe1nbd8OvKKUbQWcZ3uF7QeBq0scOwFndM5zsP1wqX8aMEfSGGBv4PulfHtJN0haQpXQbLKS8V1i+0nbDwF/KfEtAd4m6ShJW9t+pIdzi4iIAZaEYHAsL3frU21/1PZTpfyx3hpKei1wKLCj7SnAJcDYmipPlr8r6PmRz5M1r7tc6rIBP6Ia4dgNWGD7r5LGAicCM21Ppnq0sLLx1ca2gmpU4S5gc6rE4KvlsURERAyRJATNcyPV44C1yx34LKo79jWoEodHJL2C6oLcm0eBCQ3Umw/sLWmMpHaqEYkbgSuoRgJeAiDp5QC2n6Ca93ASzz0u6Lz4PyRpPDCzgeP2StK6wOO2zwGOoUoOIiJiiGRSYZPYfkDSp4EreW5S4U8AJN0C3An8Ebi2gd39FJgnaQ+em1TYlQuALYFFVJMKD7P9Z+CyMlfgZklPAZdSTXaE6lHGXsDPS9x/l3QqcCvwZ+Cmxs+6R5Op5jQ8SzW/4uAB2m9ERDSgraOjo9kxxDAm6VBgTdtfaHYs9S4//R1N/fC2wloG7e0TskR0A9JPjUk/9a4V+qi9fUKXj5EzQhDdknQBsAHVxMGIiBjBkhBEt2zv1ewYIiJiaCQhiJa18wGXDvuhuYiIVpFvGUREREQSgoiIiEhCEBEREWQOQbSwU87eudkhAPDuXYbFKtMREf2SEYKIiIhIQhARERFJCCIiIoIkBC1NUoekc2reryppqaSLmxzXupLyYD0iooUkIWhtjwGTJI0r798G3N/EeACw/SfbA7IKYkREDI18y6D1XQq8E5hHtYTyecDWAJK2AI6lWrJ4OTDHtssyx2cCkwAD6wL/YftmSctKm91Kmz1sP1iWSz4ZeE057sdsXytp21IfqhUUtwHWAi62PUnSbGC67Y+UmC4GvmH7qnKsk4B3AA9QrbB4dDnGx2xfNOC9FRERXcoIQes7H9hH0lhgCnBDzbY7ga1tbwZ8EfhaKf934G+2Nwa+AEyrabM6cL3tTYFrgANL+bHAt2zPAP4VOK2UH0qVTEylSkSWr0TsqwO/tL0J8CjwVapRjr2AL6/EfiIiop+SELQ424uBiVSjA5fWbV4T+KGkW4FvAZuU8q2oEgls3wosrmnzFNA5B2FB2TfATsB3JC0ELgLWkDQeuBb4pqRDgJfafmYlwn8KuKy8XgJcbfvp8npid40iImLg5ZHByHAR8A1gO6rh+k5fAa60vZekicBVDezradsd5fUKnvuMrAK82fYTdfWPlHQJ1bD/tZJ2BmrrPMPzE8+x3RzrWeBJANvPSspnMyJiCGWEYGT4LvAl20vqytfkuUmGs2vKrwXeCyBpY2ByA8f4OfDRzjeSppa/G9heYvso4CZgo7p29wBTJa0iaT1gi0ZOKCIihlbuwkYA2/cBx3Wx6WjgLEmfBy6pKT+xlN9ONc/gNuCRXg5zCHCCpMVUn5trgIOAj0nanuoO/zbgZ8A6Ne2uBe4GbgfuAH6zcmcXERFDoa2jo6P3WjGiSBoDrGb7CUkbAP8LyPZTTQ5tpZxy9s7D4sM7nNcyaG+fwNKljzY7jGEv/dSY9FPvWqGP2tsntHVVnhGC0eklwJWSVgPagH9vtWQgIiIGVhKCUcj2o8D0ZsfRXx9+/+XDPhOPiGgVmVQYERERSQgiIiIiCUFERESQOQTRwuZcsEuzQ+jW0Vv9sNkhRESslIwQRERERBKCiIiISEIQERERJCGIiIgIkhAMGkl7SuqQtFF5P7EsQ9yXfZ0paWZ5fVpZkKin+gdJ2r+8ni1p3b4ct4f9v0fSHZKuHKD9LRuI/URERN/lWwaDZxbwq/L38IHaqe1/a6DOyTVvZwO3An8aqBiAA4ADbf9qAPcZERFNlIRgEEgaD2wFbA/8lLqEoCwudBSwC9UqgafaPl7SF4F3AeOA64AP2+6oa3sVcKjtm8ud9bHAbsByYA/bD0o6AlhGtfTwdOBcScuBz1FdyPcs+3ob1ToGe3VzHrOAz1Ktd3CJ7U+VGLcCTpd0ke1PdtFuInA2sHop+ojt6yStA8wF1qD67B1se35p81/159FDF0dExADLI4PBsQdwme27gL9Kmla3/UPARGCq7SnAuaX8O7Zn2J5ElRTs1stxVgeut70p1XLEB9ZutD0PuBnY1/ZU4FJgI0ntpcoc4Ltd7bg8ZjgK2AGYCsyQtKftL9fs8wXJQPEX4G22Nwf25rmlmd8HXF5i2RRY2Mh5RETE4EtCMDhmAeeX1+eX97V2Ak6x/QyA7YdL+faSbpC0hOpCvEkvx3kKuLi8XkCVZHSrjDacDewn6aXAlsDPuqk+A7jK9tIS57nANr3E02k14NRyHj8EOuc83ATMKSMYk8siSyt9HhERMfCSEAwwSS+nupifJuke4JPAe6mG3XtqNxY4EZhpezJwKjC2l8M9XfNIYQWNPQI6A9iPKkn5YWdSMsA+DjxINQowHXgRgO1rqJKK+4EzOyc+0rfziIiIAZSEYODNBM62vb7tibbXA+4G1qupcwXwYUmrwj+TiM6L/0NlDsLMAYrnUWBC5xvbf6KaYPh5quSgOzcC20pau8x5mAVc3eAx1wQesP0s8H5gDICk9YEHbZ8KnAZsvpLnEhERgyQJwcCbBVxQV/Yj4DM1708D7gUWS1oEvM/236lGBW4FLqcaXh8IZwInS1ooaVwpOxf4o+07umtk+wHg08CVwCJgge2fNHjME4EPlHPbCHislG8HLJJ0C9XcgmNX8lwiImKQtHV0dPReK0YUSd8BbrF9erNj6Y85F+wybD+8w2Vxo/b2CSxd+mjvFUe59FNj0k+9a4U+am+f0OUj7DyrHWUkLaC6Y/9/zY6lv87Y67Jh/w8vIqJVJCEYZWzXfwUSSTcAL64rfr/tJT3tS9LOVF9NrHV3d79rEBERw1cSgsD2m/rY7nKq+Q4REdHiMqkwIiIiMkIQreudFxzT7BAG3ZlbHdTsECJilMgIQURERCQhiIiIiCQEERERQRKCiIiIIAnBiCGpQ9I5Ne9XlbRU0sW9tNuus46k3SV9epDj7PYYkpYN5rEjIqJ7+ZbByPEYMEnSONvLgbdRrSrYMNsXARcNRnBDeYyIiFh5SQhGlkuBdwLzqBZZOg/YGkDSFlSLCY0FlgNzbLu2saTZwHTbH5H0CuBk4HVl88G2r+vqoJIupFrNcSxwrO3/KeW7AF+jWu3wIds71h3jtcD3gfFAowsnRUTEIMgjg5HlfGAfSWOBKcANNdvuBLa2vRnwRaoLdU+OA662vSnVMsW39VD3g+UnkacDh0haS1I71eqN/1r28Z4u2h0LnGR7MvBA76cXERGDJSMEI4jtxZImUo0OXFq3eU3gLEkbAh3Aar3sbgdg/7LfFcAjPdQ9RFLn+gXrARsC7cA1tu8u+3i4i3ZvBf61vD6bF66LEBERQyQjBCPPRcA3qB4X1PoKcKXtScC7qIb3+03SdsBOwJZlJOCWldz3sF3COCJiNElCMPJ8F/hSFysVrslzkwxnN7CfXwAHA0gaI2nNbuqtCfzN9uOSNgLeXMqvB7Yp8wSQ9PIu2l4L7FNe79tATBERMUiSEIwwtu+zfVwXm44Gvi7pFhp7VPSfwPaSlgALgI27qXcZsKqkO4AjqRIBbC8FPgT8WNIiYG43x/iPcoxXNRBTREQMkraOjozYRmt65wXHjPgPb38XN2pvn8DSpY8OUDQjV/qpMemn3rVCH7W3T2jrqjyTCqNlXbLXJ4f9P7yIiFaRhCAaImktqnkF9Xa0/dehjiciIgZWEoJoSLnoT212HBERMTgyqTAiIiIyQhCta7d55zY7hBhCZ2y7e7NDiBjRMkIQERERSQgiIiIiCUFERESQhCAGgaRlde9nS/pOs+KJiIjeJSGIiIiIJAQxtCSdKWlmzftlNa8/KekmSYslfak5EUZEjE752mEMhnGSFta8fznVsszdkvR2YENgC6ANuEjSNravGbwwIyKiUxKCGAzLbf/zVw0lzQam99Lm7eW/W8r78VQJQhKCiIghkIQghtozlEdVklYBXlTK24Cv2z6lWYFFRIxmmUMQQ+0eYFp5vTuwWnl9OfBBSeMBJL1K0r8MfXgREaNTEoIYaqcC20paBGwJPAZg++fA94FfS1oCzAMmNC3KiIhRpq2jo6PZMUT0yW7zzs2HdxQZzLUM2tsnsHTpo4O2/5Ei/dS7Vuij9vYJbV2VZ4QgIiIiMqkwWtfFM/cd9pl4s7XC3UpEDA8ZIYiIiIgkBBEREZGEICIiIsgcgmhhe877RbNDiOjRqdtu0ewQIhqWEYKIiIhIQhARERFJCCIiIoIkBBEREUGDkwolvRo4AdiYKom4GPgk8BbgJ8DvgZcADwJH2764tPsE8G9UK9wtBT5o+w9l29HAO8v+rgD+03aHpGnAmcA44NLO8tLmzcABtg+UtBXwTWCNEuY3bf9PqXcEcGA55urAEuDztm8v20+nWo63DbgLmG17maRtgG8DU4B9bM+r6YMVZT8A99pe6d9RlbQ1cDLwNLCl7eW91D8TuNj2PEmnlXO8XdI9wHTbD/XQdjbwc9t/Won4JpbjTWq0TV37dYHjbM/sS/uIiGieXkcIJLUBPwYutL0h8Aaqter/q1SZb3sz2wIOAb4jacey7RaqC9cUqsVqji77fAvwVqoL7yRgBrBtaXMS1cV8w/LfLjXh7ApcJumVVAvhHGR7I2Ar4MOS3llT91u2p5aY5wK/lNRetn3c9qYlrnuBj5Tye4HZZd/1lpf9Te1LMlDsS7XE79TekoF6tv+tM6Fp0Gxg3ZU5Rn/Z/lOSgYiI1tTICMEOwBO2zwCwvULSx4G7gStrK9peKOnLVBfYX9iu3X49sF953QGMBV5EdZe+GvCgpHWANWxfDyDpe8CewM9Kux2pRgUOBc60/Zty3IckHQYcAVxSfwK255Zk4X3Asbb/UfbfRjUS0VHq3VPKn22gX7pVEqJvUPXvTcDBwPuB9wI7S9rV9r5dtGsDjgfeBvwReKpm21XAobZvrimbSM0dvaRDqZK1W6lGQM6VtJxqVcGNqfpuPPAQ1ajIA2VE5rtllz/v5bwuAT5je7GkW4ALbH+5/G/+R6qRnottTyojFLtTjRxtUOoeVvbzduBLwIuB3wFzygjNkaXNM1SjG4f2FE9ERAycRuYQbAIsqC0oF9R7gdd3Uf83wEZdlB9AubDb/jVVMvFA+e9y23cArwLuq2lzXylD0trA07Yf6Som4OZS3p3nxSXpDODPpez4Htp1GivpZknXS9qzu0qSxlI98tjb9mSqpOBg26cBFwGf7CoZKPYCRHXx3p/qkcxKK486bgb2tT2V6gJ7PDDTdmcC0DnCcwbwUdubNrDr+cDWktYs+3xrKd8auKaL+lOBvYHJwN6S1iv/O34e2Mn25iXOT0hai+r8NykjN19d2fOOiIi+G4xJhS9YVlHSflR3rMeU968H3gi8muqCv0N5vt6Tt9PLHezKxGV7DtWQ+h1UF63erG97OtUow7clbdBNPQF3276rvD8L2KbBGLcBzrO9ojz7/2WD7XojqkczV0haSHVBfrWklwIvtd15MT+7l/3MLzG+lWokZryklwCvte0u6v/C9iO2nwBuB9YH3kyV8FxbYvlAKX8EeAI4XdK7gcf7froREbGyGnlkcDvwvOfCktYAXgP8lupCXWszqotsZ92dgM8B29p+shTvBVxve1mp8zOqYe2zqZKETq8G7i+vd6Ua8u6MaRrVhMZO04DbejiPzajuRv+pPP44HziM6k65W7bvL39/X4bvN6Ma7m6mZ3h+Uje2m3ptwG22t6wtLAnByriJKrH7PdXjgbWp5nvUj9Z0erLm9Qqqz1sbcIXtWfWVJW1B9VhoJtVjpx1WMr6IiOijRkYIfgG8RNL+AJLGAP9NNSz+vLs4SVOAL1B9IwFJmwGnALvb/ktN1XuBbSWtKmk1qgmFd9h+APiHpDeX5+n7Az8pr6cAC0v7E4DZkqaW46wFHEWZtFhP0r9SJS7nSWorIxSdz+x3B+7sqQMkvUzSi8vrtanukLub4GdgYucxqOYOXN3T/mtcQzW0PqbMp9i+l/oPAv8iaa0S32412x4FJtTE1C5py3IOq0naxPbfgb+Xb2xANemxW7afopor8B7g11QjBofS9eOC7lwPvLXmf4PVJb1B0nhgTduXAh8HGnmEERERA6TXhKB85W8v4D2S/o/qa3pPAJ8tVbaWdIskU12oD7Hd+SPzx1BNYvuhpIWSLirl86jurpcAi4BFtn9atv07cBrV6MPvqOYdTANu6fz6YUkc9gNOlXQncB3w3Zp9AHy8HPP/St0dbC+lukM9S9KScvx1gC8DSJoh6T6qC94pkjpHHN4I3CxpEdXchyO7m/FfhsfnlHNeAjxL9VXDRlwA/B9VsvE9qotut2w/XWK/keqOvTaxORM4uQzLj6G66z6qnMNCnpufMAc4odR7weOeLswH/lK+JTGfahRnfiMnV2JeSvUNiPMkLaY6x42okpeLS9mvgE80us+IiOi/to6OjmbH0CtJnwd+a/v8ZscSw8ee834x/D+8MaqNtMWN2tsnsHTpo80OY1hrhT5qb5/Q5c1fS6x2aDszziMiIgZRSyQEw5WkC4DX1hV/yvblvbSbzAtn9D9p+00DGV9fSdqZak5Grbtt79WMeLpz4cwdh30m3mytcLcyHKSfIlrkkUFENzryf+I9y4WuMemnxqSfetcKfdTdI4MsbhQRERF5ZBCt65AL/tjsEFrA35sdQIsY3H76wlYr+5MfEUMvIwQRERGRhCAiIiKSEERERARJCKILkvaU1CFpo/J+oqRb+7ive8rPPTdaf7ak7/TlWBER0XdJCKIrs6h+PvgFCxBFRMTIlG8ZxPOURYa2olpY6afA4XXbx1D9aNEuVOs0nGr7eEk7At+g+kzdBBxcs7rlRyW9C1gNeI/tOyW9HPgu8DqqRbI+ZHvxoJ9gRER0KSMEUW8P4DLbdwF/lTStbvuHgInAVNtTgHMljaVaTGlv25OpkoKDa9o8ZHtz4CSq1REBvkS1YNUUqoWyvjdI5xMREQ1IQhD1ZgGdi0idzwsfG+wEnGL7GQDbDwOi+mnju0qds4Btatr8uPxdQJVMQDUKcXbZxy+BtSStMXCnERERKyOPDOKfyjD+DsBkSR1UyyZ3UC1r3R+djw5WkM9cRMSwlBGCqDUTONv2+rYn2l4PuBtYr6bOFcCHJa0K/0wiDEyU9PpS5/3A1b0caz6wb9nHdlSPFf4xYGcSERErJQlB1JoFXFBX9iPgMzXvTwPuBRZLWgS8z/YTwBzgh5KWUE02PLmXYx0BTJO0GDgS+ED/w4+IiL7KaofRsg654I/58EZLGClrGbTCSn7N1gp9lNUOIyIioltJCCIiIiIzvqN1HbfXesN+aK7ZWmH4cjhIP0VkhCAiIiJIQhARERHkkUG0sJ/NfajZIbSAJ3uvEqSfGvX8fpq+w4ubFEcMhowQRERERBKCiIiISEIQERERJCGIiIgIkhA0laRXSjpf0u8kLZB0qaQ3dFN3oqRbB+CY60qa10C9z/b3WF3sc7qk48rr7SS9ZaCPERERfZNvGTSJpDaqhYTOsr1PKdsUeAVw1wDsf1Xbz9SX2/4T1aqGvfks8LX+xlF37JuBm8vb7YBlwHUDeYyIiOibJATNsz3wtO1/rgpoe5GkNknHALsCHcBXbc+tbShpLHASMB14BviE7SslzQbeDYwHxgDb1h9U0kTgYtuTSv3dgZcAGwAX2D5M0pHAOEkLgdts7ytpP+AQ4EXADcC/214haRlwLLAbsBzYw/aDkt4DHA6sAB6xvU1Z5vhQ4CPAQcCKst+PAt8D3mD7aUlrAIs63/e5hyMiomF5ZNA8k4AFXZS/G5gKbArsBBwjaZ26Ov8BdNieTLVk8VklSQDYHJhp+wXJQDemAnsDk4G9Ja1n+9PActtTSzLwxlLnrbanUl3k9y3tVweut70pcA1wYCn/IrBzKd/7pkZoAAALa0lEQVS99oC276FaHvlb5RjzgauAd5Yq+wA/TjIQETF0khAMP1sB59leYftB4GpgRhd1zgGwfSfwB6Bz7sEVth9eieP9wvYjtp8AbgfW76LOjsA04KYyarAj8Lqy7Sng4vJ6ATCxvL4WOFPSgVSjFb05DZhTXs8BzliJc4iIiH7KI4PmuY3GnuWvrMdWsn7tT4+toOvPRBvVXIfPdLHtadsd9e1tHyTpTVR3/QskTespCNvXlomT2wFjbPd7AmVERDQuIwTN80vgxZI+1FkgaQrwd6qh+zGS2oFtgBvr2s6nDNmXbyW8BvAAx/e0pNXK618AMyX9SznmyyV1NZLwT5I2sH2D7S8CS4H16qo8CkyoK/se8H0yOhARMeSSEDRJuaveC9ipfO3wNuDrVBfExVST6n4JHGb7z3XNTwRWkbQEmAvMtj3QP8b+P8BiSefavh34PPBzSYuBK4D6eQ31jpG0pHxV8jqq86n1U2AvSQslbV3KzgVeBpw3YGcRERENaevo6Oi9VsQQkDST6lsK72+k/s/mPpQPb0QTZXGjF2pvn8DSpY82O4wetbdPaOuqPHMIYliQdDzVVy3f0exYIiJGo4wQjFCSJgNn1xU/aftNzYhnkHQM90y82VrhbmU4SD81Jv3Uu1boo4wQjDK2l1D9xkBERESvMqkwIiIiMkIQreueb9d/+SLqPbbSP0sxOqWfGtOq/bT6vqs3O4SWkBGCiIiISEIQERERSQgiIiKCzCEYUSStAJbUFO1JtdjQobZ3a0pQhaRLgffZ/ntd+RHAMtvfaEpgEREBJCEYaZaX5Yn/SdLEJsXyPLbzg0MREcNYEoJRRNIWwLHAWGA5MMe2JV0PHGD7tlLvKuBQqkdKXdWfDewOvATYALjA9mGl7Szgs1QrJF5i+1Ol/B5guu2HJH0O+ADwF+CPVMsmI+kQ4CDgGeB22/sMZn9ERMRzModgZBlXFgtaKOmCLrbfCWxtezPgi8DXSvlc4L0AktYB1rF9cw/1ofrRo72ByVSrM64naV3gKGCHsn2GpD1rAyjLIO9Ttr8DmFGz+dPAZranUCUGERExRDJCMLK84JFBnTWBsyRtCHQAncsb/wD4OXA4VWIwr5f6AL+w/QiApNuB9YG1gKtsLy3l51It33xhTbutqUYUHi91LqrZthg4V9KFdW0iImKQZYRgdPkKcKXtScC7qB4FYPt+4K+SplDd9c/tqX5Ru9zyCgYmuXwncAKwOXCTpCSsERFDJAnB6LImcH95Pbtu21zgMGBN24sbqN+VG4FtJa0taQwwC7i6rs41wJ6SxkmaQJVoIGkVYD3bVwKfKsce3+B5RUREPyUhGF2OBr4u6RZeeEc/j+rZ/g8arP8Cth+gmgdwJbAIWGD7J3V1fkOVfCwCfgbcVDaNAc6RtAS4BTiu/iuKERExeLL8cbSse77953x4I6JXQ7mWQSsvf5wRgoiIiEhCEBEREfnaYbSwiR975bAfmmu2Vhi+HA7ST41JP41sGSGIiIiIJAQRERGRbxlEC3vw2F/nwxsRo84q75vUr/b5lkFERER0KwlBREREJCGIiIiIJAQRERFBfocguiFpBbCE6jNyB/CBziWLG2x/DzDd9kOSrrP9lkEJNCIiBkRGCKI7y21PLUsfPwUcVLtRUltZobBXSQYiIoa/jBBEI+YDUyRNBC4HbgCmAe+Q9Bbgs0AbcIntT9U3lrTM9nhJ2wFHAA8Bk4AFwH62OyRNA75JteTxQ8DssnpiREQMgYwQRI8krQrsSvX4AGBD4ETbmwBPA0cBOwBTgRmS9uxll5sBHwM2Bl4HvFXSasDxwEzb04DvAv810OcSERHdywhBdGecpIXl9XzgdGBd4A+2ry/lM4CrbC8FkHQusA1wYQ/7vdH2faX+QmAi8HeqEYMrJAGMATI6EBExhJIQRHeW255aW1Au1o/1c79P1rxeQfUZbANus71lP/cdERF9lEcG0R83AttKWlvSGGAWcHUf9mOgXdKWAJJWk7TJAMYZERG9SEIQfVYm/X0auBJYBCyw/ZM+7OcpYCZwlKRFwEIg30yIiBhCWdwoWlYWN4qI0SiLG0VERMSgyQhBtLKOpUsfbXYMw1p7+wTSR71LPzUm/dS7VuijjBBEREREtzJCEBERERkhiIiIiCQEERERQRKCiIiIIAlBREREkIQgIiIiSEIQERERJCGIiIgIsvxxDEOSdgGOBcYAp9k+sm77i4HvAdOAvwJ7276nbPsMcADV0sqH2L58CEMfUn3tJ0kTgTuoVpkEuN72QUMW+BBroJ+2Ab4NTAH2sT2vZtsHgM+Xt1+1fdbQRD20+tlHK4Al5e29tncfmqiHXgP99Ang34BngKXAB23/oWwb9p+ljBDEsFKWUT4B2BXYGJglaeO6agcAf7P9euBbwFGl7cbAPsAmwC7AiWV/I05/+qn4ne2p5b+RnAw00k/3ArOB79e1fTlwOPAmYAvgcEkvG+yYh1p/+qhYXvNZGsnJQCP9dAsw3fYUYB5wdGnbEp+lJAQx3GwB/Nb278uyyOcDe9TV2QPozK7nATtKaivl59t+0vbdwG/L/kai/vTTaNJrP9m+x/Zi4Nm6tjsDV9h+2PbfgCuoEs2Rpj99NJo00k9X2n68vL0eeHV53RKfpSQEMdy8Cvhjzfv7SlmXdWw/AzwCrNVg25GiP/0E8FpJt0i6WtLWgx1sE/XnMzFaPk/9Pc+xkm6WdL2kPQc2tGFlZfvpAOBnfWzbFEkIIkafB4DX2N4M+ATwfUlrNDmmaF3r254OvA/4tqQNmh1Qs0naD5gOHNPsWFZGEoIYbu4H1qt5/+pS1mUdSasCa1JNmmuk7UjR534qj1T+CmB7AfA74A2DHnFz9OczMVo+T/06T9v3l7+/B64CNhvI4IaRhvpJ0k7A54DdbT+5Mm2bLd8yiOHmJmBDSa+l+gezD9WdR62LgA8AvwZmAr+03SHpIqq73W8C6wIbAjcOWeRDqz/91A48bHuFpNdR9dPvhy70IdVIP3XncuBrNZO/3g58ZuBDbLo+91Hpm8dtPylpbeCtlIl0I1Cv/SRpM+AUYBfbf6nZ1BKfpYwQxLBSnnV/hOof0B3AD2zfJunLkjpnMJ8OrCXpt1RD3p8ubW8DfgDcDlwG/IftFUN9DkOhP/0EbAMslrSQarLhQbYfHtozGBqN9JOkGZLuA94DnCLpttL2YeArVBeCm4Avj8R+6k8fAW8Ebpa0CLgSONL27UN/FoOvwX9zxwDjgR9KWlhuUlrms9TW0dHR7BgiIiKiyTJCEBEREUkIIiIiIglBREREkIQgIiIiSEIQERERJCGIiIgIkhBERAy5kboKZ7S2/A5BREQ3JL2EasXITYCnAdt+r6QPAv9Zqj0F7Gb7QUn7A58EOqh+EvrDtv8iaTawH/Ao1S9D7gc8CBwPvAYYB5xn+2tDdnIRdTJCEBHRvZ2BNWxvbHtT4MOStgM+C+xcyrYHHpE0CTgSeLvtKcCtVBf8Tm8GDrU9yfZC4HvAcba3AKYBu0p625CdWUSdrGUQEdG9RcAbJZ1AtXDPJcA7ge/Z/jOA7WUAkrYHLrX9QGl7Smnf6Ve2f1fqrg5sB7RL6tw+geqngK8YxPOJ6FYSgoiIbtj+vaRNgB2BXYGvARf2cXfLal6vQvVYYYbtp/sXZcTAyCODiIhuSHo1sML2hcDHgXbgFmB/Sa8odcZLGku1uM87JL2yND+Qbu72bT8KzOe5BaeQtF5N24ghlxGCiIjuTQaOLMP6Y4Cv2/6+pHHA/0p6FngSeJftWyV9GrhCUgfVktIf7mHf+wLfkrSkvH8U+CDw50E6l4ge5VsGERERkUcGERERkYQgIiIiSEIQERERJCGIiIgIkhBEREQESQgiIiKCJAQREREB/H+TWZgkIupR+QAAAABJRU5ErkJggg==
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>As we can see from the plot there are features that are more important than others and we can see 5-7 features which stand out.
I'll use the feature important scores to put a threshold for my model feature selection function.</p>
<p>["SelectFromModel"](http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html) is a sklearn function which takes an estimator and a threshold, extracts from the estimator the feature importance scores and returns only the features with a score above the given threshold.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[22]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn.pipeline</span> <span class="k">import</span> <span class="n">Pipeline</span>
<span class="kn">from</span> <span class="nn">sklearn.preprocessing</span> <span class="k">import</span> <span class="n">StandardScaler</span>
<span class="kn">from</span> <span class="nn">sklearn.feature_selection</span> <span class="k">import</span> <span class="n">SelectFromModel</span>
<span class="kn">from</span> <span class="nn">sklearn.ensemble</span> <span class="k">import</span> <span class="n">RandomForestClassifier</span>
<p><span class="n">model</span> <span class="o">=</span> <span class="n">Pipeline</span><span class="p">(</span>
<span class="p">[</span>
<span class="p">(</span><span class="s1">'select'</span><span class="p">,</span> <span class="n">SelectFromModel</span><span class="p">(</span><span class="n">RandomForestClassifier</span><span class="p">(</span><span class="n">n_estimators</span><span class="o">=</span><span class="mi">1000</span><span class="p">),</span> <span class="n">threshold</span><span class="o">=</span><span class="mf">0.06</span><span class="p">)),</span>
<span class="p">(</span><span class="s1">'scaler'</span><span class="p">,</span> <span class="n">StandardScaler</span><span class="p">()),</span>
<span class="p">(</span><span class="s1">'knn'</span><span class="p">,</span> <span class="n">KNeighborsClassifier</span><span class="p">(</span><span class="n">n_neighbors</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span>
<span class="p">]</span>
<span class="p">)</span></p>
<p><span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
<span class="n">pred</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">x_test</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'score on training set:'</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'score on test set:'</span><span class="p">,</span> <span class="n">model</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">x_test</span><span class="p">,</span> <span class="n">y_test</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">metrics</span><span class="o">.</span><span class="n">classification_report</span><span class="p">(</span><span class="n">y_true</span><span class="o">=</span><span class="n">y_test</span><span class="p">,</span> <span class="n">y_pred</span><span class="o">=</span><span class="n">pred</span><span class="p">))</span>
</pre></div></p>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>score on training set: 1.0
score on test set: 0.9777777777777777
             precision    recall  f1-score   support
<pre><code>      1       0.94      1.00      0.97        15
      2       1.00      0.94      0.97        18
      3       1.00      1.00      1.00        12
</code></pre>
<p>avg / total       0.98      0.98      0.98        45</p>
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>An improvment of 8-9% in this high scores is super great and difficult.
This is a very good score just by itself! Now we can improve our score in other ways.</p>
<p>My point was to show how I improved my score with this very simple KNN model.
I also wanted to show you how a few simple steps can improve your model and get a high score.</p>
</div>
</div>
</div>
    </div>
  </div>
</body>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Calculator in Java</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-28T08:30:01Z</updated>
    <pubDate>2018-04-28T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/calculator-in-java" />
    <id>https://code-maven.com/calculator-in-java</id>
    <content type="html"><![CDATA[<p>The <a href="/exercise-calculator">Calculator exercise</a> is a basic exercise to show how Input/Output
works in a language, how one can use basic numerical operation. In some languages it is eaier than in others.</p>
<h2 class="title is-4">Arguments on the command line</h2>
<p>In this solution we receive the 2 numbers and the operator on the command line.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/java/ArgsCalculator.java">examples/java/ArgsCalculator.java</a></strong></p>
<pre><code class="language-java">public class ArgsCalculator {
    public static void main(String[] args){

        int x = Integer.parseInt(args[0]);
        String op = args[1];
        int y = Integer.parseInt(args[2]);
        int z;
        
        if (op.equals(&quot;+&quot;)) {
            z = x+y;
        } else if (op.equals(&quot;-&quot;)){
            z = x-y;
        } else if (op.equals(&quot;*&quot;)){
            z = x*y;
        } else if (op.equals(&quot;/&quot;)){
            z = x/y;
        } else{
             throw new java.lang.Error(&quot;Operator not recognized&quot;);
        }
        System.out.println(z);
    }
}


</code></pre>
<p>The command</p>
<pre><code>javac ArgsCalculator.java
</code></pre>
<p>will compile the Java clode and create a file called ArgsCalculator.class</p>
<p>Then we can run it as</p>
<pre><code>java ArgsCalculator 2 + 3
</code></pre>
<p>The result will be 5.</p>
<pre><code>java ArgsCalculator 7 - 3
</code></pre>
<p>works as well and prints 4.</p>
<p>If we would like to multiply numbers we have to be careful.</p>
<pre><code>java ArgsCalculator 7 * 3
</code></pre>
<p>would print an exception like this:</p>
<pre><code>Exception in thread &quot;main&quot; java.lang.NumberFormatException: For input string: &quot;ArgsCalculator.java&quot;
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at ArgsCalculator.main(ArgsCalculator.java:6)
</code></pre>
<p>That's because the <code>*</code> on the command line is interpreted by the shell as a wide-card character and it is replaced by the names of all the files in the current directory. So the shell will actually call something like this:</p>
<pre><code>java ArgsCalculator 7 ArgsCalculator.java ArgsCalculator.class HelloWorld.java 3
</code></pre>
<p>Assuming we have those 3 files in the current directory. That in turn will trigger an exception on our code as it tries
to parse the string &quot;ArgsCalculator.java&quot; into an integer.</p>
<p>This problem is caused by the shell interfering with our businees.</p>
<p>In order to avoid this we need to tell the shell to pass the <code>*</code> as it is. For this we need to but it in quotes:</p>
<pre><code>java ArgsCalculator 7 '*' 3
</code></pre>
<p>will print 21.</p>
<p>Finally we also have to accept that the division as it is in this code will work as an integer division. So</p>
<pre><code>java ArgsCalculator 21 / 3
</code></pre>
<p>is 7, but</p>
<pre><code>java ArgsCalculator 22 / 3
</code></pre>
<p>is also 7 as Java will only keep the integer part of the division.</p>
<h2 class="title is-4">Explanation</h2>
<p>The <code>args</code> array will hold the values passed on the commad line. <code>args[0]</code> is the first element of the array.</p>
<p><code>Integer.parseInt</code> can convert a string into an integer number.</p>
<p><code>int</code> is used to decalare a variable as integer.</p>
<p><code>String</code> is used to declare a variable as string.</p>
<p><code>if</code> has its condition in parentheses and the code in curly braces.</p>
<p><code>else if</code> allows us to attach more, alternative conditions.</p>
<p><code>throw new java.lang.Error(&quot;...&quot;)</code> will raise an exception in case the user supplied an operator we don't handle.</p>
<h2 class="title is-4">Read from Standard Input STDIN</h2>
<p>In this alternative soluton, instead expecting the operands and the operator on the command line,
we ask the user to type the values in during the execution of the program.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/java/InputCalculator.java">examples/java/InputCalculator.java</a></strong></p>
<pre><code class="language-java">import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class InputCalculator {
    public static void main(String[] args){
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.print(&quot;First number: &quot;);
            int x = Integer.parseInt(br.readLine());
            System.out.print(&quot;Second number: &quot;);
            int y = Integer.parseInt(br.readLine());
            System.out.print(&quot;Operator: &quot;);
            String op = br.readLine();

            int z;

            if (op.equals(&quot;+&quot;)) {
                z = x+y;
            } else if (op.equals(&quot;-&quot;)){
                z = x-y;
            } else if (op.equals(&quot;*&quot;)){
                z = x*y;
            } else if (op.equals(&quot;/&quot;)){
                z = x/y;
            } else{
                 throw new java.lang.Error(&quot;Operator not recognized&quot;);
            }
            System.out.println(&quot;Result: &quot; + z);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}



</code></pre>
<p>An interaction would look like this:</p>
<p>First compile the code:</p>
<pre><code>$ javac InputCalculator.java
</code></pre>
<p>Then run the application:</p>
<pre><code>$ java InputCalculator
First number: 23
Second number: 19
Operator: +
Result: 42
</code></pre>
<p>The interesting difference here is the use of
<code>System.in</code> which represents STDIN, the <code>InputStreamReader</code>
and the <code>BufferedReader</code> classes to read from the input channel.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Getting Started with GitHub Pages: with HTML and with Jekyll</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-23T12:30:01Z</updated>
    <pubDate>2018-04-23T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/getting-started-with-github-pages" />
    <id>https://code-maven.com/getting-started-with-github-pages</id>
    <content type="html"><![CDATA[<p><a href="https://github.com/">GitHub</a> is the most popular cloud-based hosting service for Open Source projects using Git.
They also offer a service called <a href="https://pages.github.com/">GitHub Pages</a> with which you can easily build and host a static web site on their servers. Free of charge.</p>
<p>The site is going to be static from the point of view of the server, but you can include any JavaScript code and build a whole client-side application on that site.</p>
<p>By default GitHub provides you with a subdomain in the <strong>github.io</strong> domain, but you can also map a domain name or a hostname you own.</p>
<p>It is a perfect solution for software developers who want to show their work and make themselves look more attractive to prospective employers. It is also a fun way to experiment with front-end development.</p>
<h2 class="title is-4">GitHub Pages writing HTML</h2>
<ol>
<li>
<p>If you don't have one yet, create an account on <a href="https://github.com/">GitHub</a></p>
</li>
<li>
<p>On GitHub create a repository on GitHub called USERNAME.github.io with your USERNAME. As my username is <strong>szabgab</strong>, I've creted a repository called <a href="https://github.com/szabgab/szabgab.github.io/">szabgab.github.io</a></p>
</li>
<li>
<p>Create a file called index.html in the repository with some HTML content. It can be as simple as <strong>&lt;h1&gt;Hello World&lt;/h1&gt;</strong> You can either clone the repository to your local disk and then push it out or you can create the file using the online editor of GitHub</p>
</li>
<li>
<p>Once the index.html is in your GitHub repository the page will be shown at the URL USERNAME.github.io. For me it is  <a href="https://szabgab.github.io/">szabgab.github.io</a>. Note: there might be up to <strong>10 minutes delay</strong> between you submitting the changes till they appear on the web site. So be patient. There is no process log, but if there is a major error you'll get an e-mail notification.</p>
</li>
</ol>
<p>Once you created one html page you can add more content to this page, you can improve the HTML and add some CSS to enhance the look of it.</p>
<p>You can also add more html pages.</p>
<p>Soon, however, you'll recognice that if you'd like to have all the pages look the same you'll need to copy and paste all the HTML around your content and that's not easy.</p>
<h2 class="title is-4">GitHub Pages using Jekyll</h2>
<p>This is where static site-generators, such as <a href="https://jekyllrb.com/">Jekyll</a> can be useful. You create a single HTML template file and for each page you put the content in a separate .md file using <a href="https://daringfireball.net/projects/markdown/syntax">Markdown</a> format.
Then, you run the static site-generator that will combine the content of each Markdown file with the template and generate an HTML page.</p>
<p>Even better, you don't have to run the site-generator yourself as GitHub will run it on your behalf.</p>
<ol>
<li>
<p>Assuming you already have GitHub pages set up with HTML files as explained above.</p>
</li>
<li>
<p>Assuming you don't have an about.html yet, create a file called about.md with some Markdown in it. e.g <strong># About me</strong></p>
</li>
<li>
<p>Save that md file in the same GitHub repository. After a few minutes you will be able to visit your GitHub page adding the name of the file to the end of the request (without the .md) and you'll see the content of your page converted into HTML.</p>
</li>
<li>
<p>For example the <a href="https://github.com/szabgab/szabgab.github.io/blob/master/about.md">about.md</a> in my repository is converted to <a href="https://szabgab.github.io/about">szabgab.github.io/about</a>. One warning though: if you already have an .html file with the same name, that will take precedence and you'll spend hours trying to understand why the content of your .md file does not show up. It happened to me. Don't fall in the same trap.</p>
</li>
<li>
<p>At this point I'd convert all the .html files to .md files in my repository though you might be wondering where are you going to put your HTML template.</p>
</li>
</ol>
<h2 class="title is-4">HTML templates for Jekyll</h2>
<p>When I started to create my GitHub pages I did not have any HTML and creating a nice design was not my forte. This probably won't change any time soon so even if you read this years after I've written it this is still probbaly true.</p>
<p>When we start using .md files instead of .html file and let GitHub run Jekyll and convert them to HTML pages, it, I mean Jekyll, will use some very simple HTML template. You can create your own templates, but before doing that try one of the <a href="https://pages.github.com/themes/">Jekyll themes GitHub pages already support</a>.</p>
<p>In your Git repository create a file called <strong>_config.yml</strong> with the following content: <strong>theme: jekyll-theme-cayman</strong>. That will enable the Cayman theme. Once the file reaches GitHub, that is.</p>
<p>There are lots of other ways to improve your site. For now just get started and start writing some content.</p>
<h2 class="title is-4">Linking to my sites</h2>
<p>Oh and don't forget to include a link to my <a href="https://perlmaven.com/perl-tutorial">Perl Tutorial</a> or to the <a href="https://code-maven.com/">Code Maven</a> site. Those links will get me some extra points at the various search engines. In Markdown you can create a link by writing <a href="https://perlmaven.com/perl-tutorial">Perl Tutorial</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: ROT13</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-21T13:10:01Z</updated>
    <pubDate>2018-04-21T13:10:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-rot13" />
    <id>https://code-maven.com/exercise-rot13</id>
    <content type="html"><![CDATA[<p>Implement <a href="https://en.wikipedia.org/wiki/ROT13">ROT13</a>: given a string return the rot13 of it. Given a file, replace with the rot13 of it.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Implement Reverse Polish Calculator</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-21T12:45:01Z</updated>
    <pubDate>2018-04-21T12:45:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-reverse-polish-calculator" />
    <id>https://code-maven.com/exercise-reverse-polish-calculator</id>
    <content type="html"><![CDATA[<p>Implement <a href="https://en.wikipedia.org/wiki/Reverse_Polish_notation">Reverse Polish Calculator</a></p>
<p>We are used to write calculations using the infix notation where the operator is between the two operands. e.g. <b>3 + 4 * 7</b>. In order to implement a calculator that knows how to calculate this
one needs to implement the order of operations.</p>
<p>In the Reverse Polish Notation the operator comes after the two operands. e.g. <b>3 4 +</b> instead of <b>3 + 4</b>.</p>
<p>In this notiation there are no preferences between operators.</p>
<p>The above expression can be written in RPN as:</p>
<pre><code>3
4
7
*
+
=
</code></pre>
<p>The task is to implement RPN in your favorite language.</p>
<h2 class="title is-4">Python</h2>
<p>In order to make it easer for you I've prepared a module that implements the low-level calculations.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/python/calc.py">examples/python/calc.py</a></strong></p>
<pre><code class="language-python">def calc(a, op, b):
    '''
        from calc import calc
        calc(2, '+', 3)
    '''
    if op == '+':
        return a + b
    if op == '*':
        return a * b
    if op == '-':
        return a - b
    if op == '/':
        return a / b
    raise Exception(&quot;Operator '{}' not supported&quot;.format(op))


def test_calc():
    assert calc(2, '+', 3) == 5
    assert calc(2, '*', 3) == 6
    assert calc(8, '-', 3) == 5
    assert calc(8, '/', 2) == 4

    import pytest
    with pytest.raises(Exception) as exinfo:
        calc(2, '**', 3)
    assert exinfo.type == Exception
    assert str(exinfo.value) == &quot;Operator '**' not supported&quot;

# To test this module, run pytest calc.py

</code></pre>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://code-maven.com/slides/python/solution-stack">Python with list</a></li>
<li><a href="https://code-maven.com/slides/python/solution-stack-deque">Python with deque</a></li>
<li><a href="https://code-maven.com/slides/perl-programming/stack-implementation">Perl</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Check if number is prime</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-21T12:35:01Z</updated>
    <pubDate>2018-04-21T12:35:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-number-is-prime" />
    <id>https://code-maven.com/exercise-number-is-prime</id>
    <content type="html"><![CDATA[<p>Write a program that gets a number on the commnad line a prints &quot;True&quot; if the number is a prime number or &quot;False&quot; if it isn't.</p>
<pre><code>$ is_prime 42
False

$ is_prime 19
True
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Queue</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-21T12:30:01Z</updated>
    <pubDate>2018-04-21T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-queue" />
    <id>https://code-maven.com/exercise-queue</id>
    <content type="html"><![CDATA[<p>The application should manage a queue of people.</p>
<ul>
<li>It will prompt the user for a new name by printing <code>:</code>.</li>
<li>The user can type in a name and press ENTER.</li>
<li>The app will add the name to the queue.</li>
<li>If the user types in &quot;n&quot; then the application will print the first name in the queue.</li>
</ul>
<p>A sample interaction will look like this:</p>
<pre><code>: Foo
: Bar
: Moo
: n
  next is Foo
: n
  next is Bar
: Peter
: n
  next is Moo
: n
  next is Peter
: n
  the queue is empty
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>MasterMind</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-20T18:30:01Z</updated>
    <pubDate>2018-04-20T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/mastermind" />
    <id>https://code-maven.com/mastermind</id>
    <content type="html"><![CDATA[<p>Implement the <a href="https://en.wikipedia.org/wiki/Mastermind_(board_game)">MasterMind</a> game.</p>
<p>The computer &quot;thinks&quot; a string with 4 different digits. You guess which digits.
For every digit that matched both in value, and in location the computer gives you a *.
For every digit that matches in value, but not in space the computer gives you a +.</p>
<p>Try to guess the given number in as few guesses as possible.</p>
<pre><code>Computer: 2153
You:      2467  *
You:      2715  *++
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>One dimensional spacefight (aka. The spaceship operator)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-20T16:30:01Z</updated>
    <pubDate>2018-04-20T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/one-dimensional-spacefight" />
    <id>https://code-maven.com/one-dimensional-spacefight</id>
    <content type="html"><![CDATA[<p>You are the pilot of a spaceship and your task is to fire upon and hit the enemy spaceship.</p>
<p>You are in one-dimensional space.</p>
<h2 class="title is-4">Level 0</h2>
<ul>
<li>The computer creates a random integer number between 0-100 &quot;the space&quot; which is the distance of the spaceship from you</li>
<li>You guess the distance by typing in a number.</li>
<li>The computer write if it is a hit or not</li>
</ul>
<h2 class="title is-4">Level 1</h2>
<ul>
<li>The computer can tell you if your shot was too short or too long.</li>
<li>The computer will allow you to shoot multiple times.</li>
</ul>
<h2 class="title is-4">Level 2</h2>
<ul>
<li>If the user hits x, s/he leaves the game without finishing it.</li>
</ul>
<h2 class="title is-4">Level 3</h2>
<ul>
<li>If the user presses 's', show the hidden value (cheat)</li>
<li>If the user presses 'd' the game gets into debug mode: the system starts to show the current number to guess every time, just before asking the user for new input. Pressing 'd' again turns off debug mode. (It is a toggle.)</li>
</ul>
<h2 class="title is-4">Level 4</h2>
<ul>
<li>The 'm' button is another toggle. It is called 'move mode'. When it is 'on', the object move a little bit after every step (+/-2). Pressing 'm' again will turn this feature off.</li>
</ul>
<h2 class="title is-4">Level 5</h2>
<ul>
<li>
<p>Let the user guess several times.</p>
</li>
<li>
<p>Pressing 'n' will skip this game and start a new one (generate new number to guess).</p>
</li>
</ul>
<pre><code>Allow the user to type
n   - skip this game and start a new one (generate new number to guess)
s   - show the hidden value (cheat)
d   - debug mode 
      (It is a toggle. 
       Pressing once the system starts to show the current
       number to guess every time before asking the user for new input
       pressing again, turns off the behavior.
       )
m   - move mode
      (It is a toggle.
       Pressing once the object will start to move a little bit after
       every step. Pressing again will turn this feature off.)
x   - exit
</code></pre>
<ul>
<li>Make the size of the space configurable.</li>
<li>Make sure the enemy does not wander off the training field.</li>
<li>Give warning if the user shoots out of space.</li>
<li>Keep track of the minimum and maximum number of hits (in a file or database).</li>
</ul>
<h2 class="title is-4">Level</h2>
<p>Refactor the code to be nice small functions e.g. for</p>
<ul>
<li>moving of the spaceship</li>
<li>checking the hit</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>YAML - YAML Ain&#39;t Markup Language</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-17T10:00:01Z</updated>
    <pubDate>2018-04-17T10:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/yaml" />
    <id>https://code-maven.com/yaml</id>
    <content type="html"><![CDATA[<p><a href="http://yaml.org/">YAML</a> that stands for <b>YAML Ain't Markup Language</b> is a human friendly data serialization format with implementations in many programming languages. (See <a href="https://en.wikipedia.org/wiki/YAML">Wikipedia on YAML</a>.)</p>
<p>It is similar to <a href="/json">JSON</a>, but looks much nicer and much more readable.</p>
<p>It is usually used for configuration files that need more power that an INI file.</p>
<h2 class="title is-4">Example</h2>
<p>This is a sample configuration file used for the code running the Code Maven web site:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/code_maven_config.yml">examples/data/code_maven_config.yml</a></strong></p>
<pre><code class="language-yaml"># This is the main configuration file of the Code-Maven web site
appname: &quot;Code::Maven&quot;
layout: &quot;system&quot;

# when the charset is set to UTF-8 Dancer will handle for you
# all the magic of encoding and decoding. You should not care
# about unicode within your app when this setting is set (recommended).
charset: &quot;UTF-8&quot;

mymaven_yml: &quot;config/mymaven.yml&quot;

template: &quot;template_toolkit&quot;
engines:
  template:
    template_toolkit:
      encoding:  'utf8'
      INCLUDE_PATH:
        - 'views'
        - 'config/templates'
      start_tag: '&lt;%'
      end_tag:   '%&gt;'

session: &quot;JSON&quot;


</code></pre>
<h2 class="title is-4">Implementations and examples</h2>
<ul>
<li><a href="https://perlmaven.com/yaml">YAML in Perl</a></li>
<li><a href="/python">Python</a></li>
<li><a href="/ruby">Ruby</a></li>
<li><a href="/php">PHP</a></li>
<li><a href="/java">Java</a></li>
<li><a href="/javascript">JavaScript</a></li>
<li><a href="/nodejs">NodeJS</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Improve the compilation time of your project!</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-04T11:30:01Z</updated>
    <pubDate>2018-04-04T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/improve-compilation-time" />
    <id>https://code-maven.com/improve-compilation-time</id>
    <content type="html"><![CDATA[<p>In order to improve the speed of software development one needs to be able to create faster development cycles and provide a shorter feedback loop. One of the ways to improve the development cycles is to reduce the time it takes to compile the project - if it is in a language where compilation is necessary.</p>
<p>The Linux kernel has 20 million lines of C code and I've just compiled in in 36 minutes on an old 4-core machine. PostgreSQL has 1 million lines of code and most of the build farm machines report 8-12 minute build time.</p>
<p><b>How long does it take to compile your software?</b></p>
<p>For comparison here are two Open Source projects:</p>
<h2 class="title is-4">How long does it take to compile the Linux kernel?</h2>
<p>The Linux kernel has about 20 million lines of C code according to both the
<a href="https://www.linuxcounter.net/statistics/kernel">Linux counter</a> and the
<a href="https://www.openhub.net/p/linux">OpenHub for Linux</a>.</p>
<p>The compilation time will largely depend on the the configuration you have, so this number
is not representative but I've just compiled it on an old 4-core machine and this is what <code>time</code> reported:</p>
<pre><code>real    36m49.545s
user    130m15.245s
sys     9m35.052s
</code></pre>
<p>So it used the 4 cores very well and it took 36 minutes to compile the kernel.</p>
<h2 class="title is-4">How long does it take to compile PostgreSQL?</h2>
<p>According to the <a href="https://www.openhub.net/p/postgres">OpenHub on PostgreSQL</a> it has about 1 million lines of C code.</p>
<p>Most of the machines in the <a href="https://buildfarm.postgresql.org/">PostgreSQL build farm</a> report around 12-14 minutes. That includes both compilation and testing! Some machines took longer and a few ran in 8 minutes. I assume the differences are primarily due to the number of cores used in parallel.</p>
<h2 class="title is-4">Some related articles</h2>
<ul>
<li><a href="https://medium.com/tripaneer-techblog/reducing-compilation-times-ca524484beeb">Reducing compilation times for D</a></li>
<li><a href="https://gcc.gnu.org/wiki/Visibility">Why is the new C++ visibility support so useful?</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Accept GET and POST parameters in PHP - use htmlspecialchars</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-02T16:30:01Z</updated>
    <pubDate>2018-04-02T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/accept-get-and-post-parameters-in-php" />
    <id>https://code-maven.com/accept-get-and-post-parameters-in-php</id>
    <content type="html"><![CDATA[<p>Once we know how to <a href="/php-development-environment-on-centos">create output from our PHP code</a> we also need to see how
to accept input.</p>
<p>In HTTP there are two ways to send parameters to the server. Using a <code>GET</code> method the parameters are in the URL after a <code>?</code> character. Using the <code>POST</code> the parameters are sent in the body of the request.</p>
<p>Accordingly PHP has two separate ways to access these parameters. Via the <a href="http://php.net/manual/en/reserved.variables.get.php">$_GET</a> and <a href="http://php.net/manual/en/reserved.variables.post.php">$_POST</a> variables.</p>
<h2 class="title is-4">GET</h2>
<p>In this example we have a small HTML snippet that makes the browser display an entry box and a button. In the opening of the <code>form</code> tag we explicitly said we would want the browser to use the <code>GET</code> method to send the parameters. We actually don't have to set this explicitly as this is also the default, but it is clearer this way.</p>
<p>After the HTML form there is a PHP snippet that takes a string and using the <code>.</code> concatenation operator, concatenates the value if the <code>$_GET</code> associative array for the the &quot;person_name&quot; key. We used this key as this is the &quot;name&quot; of the input field we are interested in.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/php/get_params.php">examples/php/get_params.php</a></strong></p>
<pre><code class="language-php">&lt;form method=&quot;GET&quot;&gt;
&lt;input name=&quot;person_name&quot;&gt;
&lt;input type=&quot;submit&quot; value=&quot;Echo&quot;&gt;
&lt;/form&gt;

&lt;?php
    echo &quot;Hello &quot; . htmlspecialchars($_GET[&quot;person_name&quot;]);
?&gt;

</code></pre>
<p>If we visit the page we see:</p>
<p><img src="/img/php-echo-before.png" alt="" /></p>
<p>That &quot;Hello&quot; at the bottom is there because our PHP code will run no matter what. So even when  <code>$_GET[&quot;person_name&quot;]</code> it will still be displayed.</p>
<p>Once we type in our name (&quot;Foo&quot; in this case) and click on the &quot;Echo&quot; button, we will see that the page now shows &quot;Hello Foo&quot;
and we can also see as the parameters was passed in the URL that can be found in the address bar.</p>
<p>&lt;img src=&quot;/img/php-echo-get.png&quot;&quot;&gt;</p>
<h2 class="title is-4">What is htmlspecialchars</h2>
<p>What is htmlspecialchars and why do we need it? The user can enter any characters in that form. For example the user can type in &quot;&lt;Foo&gt;&quot;. If we printed the characters back as we have received them we would print back <code>&amp;lt;Foo&amp;gt;</code>. That however would be invisible as that looks like an unknown HTML tag.</p>
<p>Without htmlspecialchars it would look like this:</p>
<p><img src="/img/php-echo-without-htmlspecialchars.png" alt="" /></p>
<p>You can see the parameter in the URL, but not on the page.</p>
<p>If we clicked on &quot;view source&quot; for this page we would see:</p>
<p><img src="/img/php-echo-without-htmlspecialchars-source.png" alt="" /></p>
<p>As you can see in the source we see the text as we typed it in, but
that does not show up on the web page.</p>
<p>In order to make sure the browser can display every character as we typed them in
we need to call <code>htmlspecialchars</code> on every value we get from the users.</p>
<p>With htmlspecialchars it would look like this:</p>
<p><img src="/img/php-echo-with-htmlspecialchars.png" alt="" /></p>
<p>aka. What we expected.</p>
<p>Now if we look at the source of that page we'll see this:</p>
<p><img src="/img/php-echo-with-htmlspecialchars-source.png" alt="" /></p>
<p>We received back special strings that represent the less-than and greater-than characters
so our browser will know it has to display them instead of interpret them as HTML.</p>
<h2 class="title is-4">POST</h2>
<p>In order to see how the POST method works we changed the source code of our PHP file in two places from
GET to POST. In the HTML form and in the variable name.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/php/post_params.php">examples/php/post_params.php</a></strong></p>
<pre><code class="language-php">&lt;form method=&quot;POST&quot;&gt;
&lt;input name=&quot;person_name&quot;&gt;
&lt;input type=&quot;submit&quot; value=&quot;Echo&quot;&gt;
&lt;/form&gt;

&lt;?php
    echo &quot;Hello &quot; . htmlspecialchars($_POST[&quot;person_name&quot;]);
?&gt;

</code></pre>
<p>If we look at the page with our browser it will look exactly the same as what we had when had GET there.
The difference can be seen after we typed in the name and clicked on &quot;Echo&quot;.</p>
<p>The content of the page is still the same, but now the URL does not contain the parameters.</p>
<p><img src="/img/php-echo-post.png" alt="" /></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>PHP development environment on CentOS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-02T14:30:01Z</updated>
    <pubDate>2018-04-02T14:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/php-development-environment-on-centos" />
    <id>https://code-maven.com/php-development-environment-on-centos</id>
    <content type="html"><![CDATA[<pre><code>vagrant init centos/7
</code></pre>
<p>Edit the <code>Vagrantfile</code> and add the following line to be able to access the web server
on the guest from the host machine.</p>
<pre><code>config.vm.network &quot;forwarded_port&quot;, guest: 80, host: 8080
</code></pre>
<p>Then run the following commands:</p>
<pre><code>vagrant up
vagrant ssh
</code></pre>
<p>That will land you at the prompt inside the guest operating system.</p>
<p>There we need to update the packages and install Apache and PHP:</p>
<pre><code>sudo yum -y update
sudo yum -y install httpd
sudo yum -y install php
</code></pre>
<p>Then we want to start the Apache web server and also make sure that it will start automatically
every time we boot the machine:</p>
<pre><code>sudo systemctl start httpd.service
sudo systemctl enable httpd.service
</code></pre>
<p>By default CentOS has configured Apache to serve files from the <code>/var/www/html/</code> directory.
We'll have to create files there and then edit them.
In order to make this more convenient we would like to allow our current user called <code>vagrant</code>
to be able to do that.</p>
<p>So we change the ownership of that directory:</p>
<pre><code>sudo chown vagrant.vagran /var/www/html/
</code></pre>
<h2 class="title is-4">Try the web server</h2>
<p>At this point the web server is read to serve your files. We just have not created any files yet.
So let's see what happens?</p>
<p>From inside the Vagrant virtual Linux machine try the following:</p>
<pre><code>curl http://localhost/
</code></pre>
<p>Or from the host machine visit <a href="http://localhost:8080">http://localhost:8080</a></p>
<p>This will print the default CentOS missing file page.</p>
<p>If you use a real browser you will see something like this:</p>
<p><img src="/img/centos-apache-default-web-page.png" alt="" /></p>
<h2 class="title is-4">First HTML page</h2>
<p>Before we try PHP, let's create a simple HTML page!
Create <code>/var/www/html/index.html</code> and put in it:</p>
<p><code>Hello World!</code></p>
<p>Use <code>curl</code> again</p>
<p>On the terminal inside the Vagrant VirtualBox: <code>curl http://localhost/</code>.</p>
<p>On the host machine: <code>curl http://localhost:8080/</code> or visit <code>http://localhost:8080/</code> with a regular browser on your desktop.</p>
<p>They should all display <code>Hello World!</code>.</p>
<h2 class="title is-4">First PHP page</h2>
<p>Now we can remove <code>/var/www/html/index.html</code> and create <code>/var/www/html/index.php</code> instead with the following content:</p>
<pre><code>&lt;?php phpinfo() ?&gt;
</code></pre>
<p>Then use <code>curl</code> or your regular browser again with the same address as earlier.</p>
<p>The output will be some HTML, that will look like the following image if you use a regular browser:</p>
<p><img src="/img/php-info-centos7.png" alt="" /></p>
<p>That looks quite good.</p>
<p>However normally you'd not want to display all this information for a random visitor, but this can be very useful to understand the environment you code runs on.</p>
<p>If we look at the error log of our web server using:</p>
<pre><code>sudo less /var/log/httpd/error_log
</code></pre>
<p>Then we'll see a warning:</p>
<pre><code>PHP Warning:  phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /var/www/html/index.php on line 1
</code></pre>
<p>In order to avoid this warning we can change the <code>index.php</code> file to contain the following:</p>
<pre><code>&lt;?php
    date_default_timezone_set('UTC');
    phpinfo();
?&gt;
</code></pre>
<p>After the change we can setup a continuous monitoring on the <code>error_log</code> file by using:</p>
<pre><code>sudo tail -f /var/log/httpd/error_log
</code></pre>
<p>In one terminal, while we edit the files in another terminal.</p>
<p>Reload the web page. The content of the page looks the same, but there is no
new warning in the error_log file.</p>
<h2 class="title is-4">Hello World in PHP</h2>
<p>Change the <code>/var/www/html/index.php</code> file again to the following content and reload the
page or rerun <code>curl</code>.</p>
<pre><code>&lt;?php
    echo &quot;Hello PHP World!&quot;;
?&gt;
</code></pre>
<p>The output will only contain the text <code>Hello PHP World!</code>.</p>
<p>So we managed to print some text from our PHP code.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>PHP</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-04-02T14:02:00Z</updated>
    <pubDate>2018-04-02T14:02:00Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/php" />
    <id>https://code-maven.com/php</id>
    <content type="html"><![CDATA[<p>Articles about PHP.</p>
<ul>
<li><a href="/php-development-environment-on-centos">PHP development environment on CentOS</a></li>
<li><a href="/accept-get-and-post-parameters-in-php">Accept GET and POST parameters in PHP - use htmlspecialchars</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Java</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-31T08:02:00Z</updated>
    <pubDate>2018-03-31T08:02:00Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/java" />
    <id>https://code-maven.com/java</id>
    <content type="html"><![CDATA[<p>Slides about <a href="/slides/java-programming/">Java</a></p>
<p>A few articles about Java:</p>
<ul>
<li><a href="/hello-world-in-java">Hello World in Java</a></li>
<li><a href="/calculator-in-java">Calculator in Java</a></li>
<li><a href="/calling-java-from-python">Calling Java from Python</a></li>
<li><a href="/slides/java-programming/">Java programming slides</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Survey: Configuration Management Tools</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-28T20:30:01Z</updated>
    <pubDate>2018-03-28T20:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/configuration-management-tools" />
    <id>https://code-maven.com/configuration-management-tools</id>
    <content type="html"><![CDATA[<p>Does your company use any Configuration Management tools? Which one(s)?</p>
<p>The survey had 59 responses. It ran in the beginning of 2018.</p>
<h2 class="title is-4">Links to the CM systems in the survey</h2>
<ul>
<li>We don't use any CM tool  19 (32.2%)</li>
<li><a href="https://www.ansible.com/">Ansible</a> 18 (30.5%)</li>
<li><a href="https://cfengine.com/">CFEngine</a> 1 (1.7%)</li>
<li><a href="https://www.chef.io/">Chef</a> 6 (10.2%)</li>
<li><a href="https://www.docker.com/">Docker</a> 19 (32.2%)</li>
<li><a href="https://docs.microsoft.com/en-us/powershell/dsc/overview">PowerShell DSC</a> 3 (5.1%)</li>
<li><a href="https://puppet.com/">Puppet</a> 9 (15.3%)</li>
<li><a href="https://www.rexify.org/">Rex</a> 8 (13.6%)</li>
<li><a href="https://saltstack.com/">SaltStack</a> 4 (6.8%)</li>
<li><a href="https://github.com/melezhik/sparrowdo">Sparrowdo</a> 2 (3.4%)</li>
<li><a href="http://www.quattor.org/">Quattor</a> 1 (1.7%)</li>
<li><a href="https://www.microfocus.com/products/change-management/starteam/">StarTeam</a> 1 (1.7%)</li>
<li><a href="https://en.wikipedia.org/wiki/Environment_Modules_(software)">Environment Modules</a> 1 (1.7%)</li>
<li>planned copy</li>
</ul>
<h2 class="title is-4">Other Surveys</h2>
<ul>
<li><a href="/3-most-important-programming-languages">The 3 most important Programming languages to you</a></li>
<li><a href="/continuous-integration-systems">Continuous Integration Systems</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Jenkins</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-24T07:30:01Z</updated>
    <pubDate>2018-03-24T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jenkins" />
    <id>https://code-maven.com/jenkins</id>
    <content type="html"><![CDATA[<p><a href="https://jenkins.io/">Jenkins</a> is an automation server. It allows for all kinds of automations. It is primarily used for Build automation, Continuous Integration, and Continuous Deployment.</p>
<h2 class="title is-4">Installations</h2>
<ol>
<li><a href="/install-jenkins-on-ubuntu">Install Jenkins on Ubuntu</a> (using Vagrant)</li>
<li><a href="/vagrant-for-jenkins-on-ubuntu">Vagrant for Jenkins on Ubuntu</a></li>
<li><a href="/jenkins-in-docker">Jenkins in Docker</a></li>
</ol>
<h2 class="title is-4">Examples</h2>
<ol>
<li><a href="/jenkins-pipeline-hello-world">Jenkins Pipeline - Hello World</a> (pipeline, agent, stages, stage, stpes, echo)</li>
<li><a href="/jenkins-pipeline-running-external-programs">Jenkins Pipeline: running external programs with sh or bat</a>, returnStdout, trim</li>
<li><a href="/jenkins-send-email-notifications">Jenkins Pipeline: Send e-mail notifications</a></li>
<li><a href="/jenkins-pipeline-short-text">Jenkins Pipeline: Add some text to the job using manager.addShortText</a></li>
<li><a href="/jenkins-cli-create-node">Jenkins CLI: create node</a></li>
<li><a href="/jenkins-pipeline-builduser">Jenkins Pipeline BuildUser plugin</a></li>
<li><a href="/jenkins-pipeline-environment-variables">Jenkins Pipeline - set and use environment variables</a></li>
<li><a href="/jenkins-git-check-out-using-reference">Jenkins Pipeline: git checkout using reference to speed up cloning large repositories</a></li>
<li><a href="/jenkins-report-failed-stage-name">Jenkins report the name of the stage that failed</a> (STAGE_NAME)</li>
<li><a href="/jenkins-triggers">Jenkins Pipeline: triggers from Version Control Systems</a> (pollSCM)</li>
<li><a href="/jenkins-pipeline-set-job-name-and-description">How to set the job number and description for a Jenkinsfile in a Jenkins Pipeline?</a> (currentBuild, displayName, description)</li>
<li><a href="/jenkins-readfile-writefile">Jenkins Pipeline: read a file, write a file - readFile, writeFile</a></li>
<li><a href="/jenkins-separate-jobs-for-development-and-production">Separate jobs for development and production</a> currentBuild, projectName</li>
<li><a href="/jenkins-get-current-user">Jenkins pipeline: get current user</a> (currentBuild, getBuildCauses)</li>
<li><a href="/jenkins-pipeline-parameters">Jenkins parameters</a></li>
<li><a href="/jenkins-arbitrary-code-execution">Arbitrary code execution in the shell</a> (sh, parameters)</li>
<li><a href="/jenkins-pipeline-parallel-stages">Jenkins pipeline: parallel stages</a></li>
<li><a href="/jenkins-pipeline-collect-exit-code-from-external-commands">Jenkins Pipeline: Collect exit code from external commands</a> (sh, bat, returnStatus)</li>
<li><a href="/jenkins-pipeline-get-previous-build-status">Jenkins pipeline: Get previous build status - currentBuild, getPreviousBuild</a></li>
<li><a href="/jenkins-pipeline-interactive-input-during-process">Jenkins pipeline: interactive input during process</a> (input)</li>
<li><a href="/jenkins-pipeline-list-agents-by-name-or-by-label">Jenkins pipeline: List agents by name or by label</a></li>
<li><a href="/jenkins-pipeline-add-badges">Jenkins pipeline: add badges</a></li>
<li>Report failures.</li>
<li>Send alerts</li>
<li>Collect test coverage data.</li>
<li><a href="/slides/jenkins/">Jenkins slides</a></li>
<li><a href="/jenkins-pipeline-unicode">Jenkins printing Unicode characters</a></li>
</ol>
<h2 class="title is-4">Run external code, capture output</h2>
<pre><code>script {
      v = sh(script: 'echo &quot; 42&quot;; echo', returnStdout: true).trim()
      echo v
      echo &quot;a${v}b&quot;
}
</code></pre>
<p><code>bat</code> for windows.</p>
<h2 class="title is-4">catch and print error in jenkins</h2>
<p>jenkins exception try - catch</p>
<p><a href="https://fraaargh.wordpress.com/2018/06/20/get-a-jobs-console-logfile-from-a-jenkins-pipeline/">https://fraaargh.wordpress.com/2018/06/20/get-a-jobs-console-logfile-from-a-jenkins-pipeline/</a></p>
<pre><code>pipeline {
   agent none
   stages {
       stage ('Catch crash') {
           agent { label 'master'}
           steps {
               echo &quot;before crash&quot;
               script {
                   try {
                       sh 'exit 1'
                   } catch (err) {
                       echo &quot;exception caught, going on&quot;
                       println err // java.lang.ClassCastException:
org.jenkinsci.plugins.workflow.steps.EchoStep.message expects class java.lang.String but received
class hudson.AbortException
                   }
               }
               echo &quot;after crash&quot;
           }
       }
       stage ('Continue after crash') {
           agent { label 'master'}
           steps {
               echo &quot;stage after crash&quot;
           }
       }
   }
}
</code></pre>
<pre><code>                    try {
                        //sh &quot;ls -l no_such&quot;
                        a = 10
                        b = 0
                        c = a/b
                    }
                    catch(Exception ex) {
                         //currentBuild.result = 'FAILURE'
                        println(&quot;exception&quot;)
                        println(ex) // hudson.AbortException: script returned exit code 2
                        println(ex.toString())
                        println(ex.getMessage())
                        println(ex.getStackTrace())
                    }
</code></pre>
<h2 class="title is-4">dir and tmp are problematic</h2>
<pre><code>  stages {
       stage ('Run external exe') {
           agent { label 'master'}
           steps {
               sh 'pwd'
               dir('/tmp/gabor') {
                   echo &quot;inside&quot;
                   sh 'pwd'
                   //sh 'sudo ./do-something.py'
               }
               sh 'pwd'
               //sh &quot;sudo sh -c 'cd /tmp; ./do-something.py; cd -'&quot;
           }
       }
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/mkdir_exception.txt">examples/jenkins/mkdir_exception.txt</a></strong></p>
<pre><code class="language-txt">java.io.IOException: Failed to mkdirs: /tmp@tmp/durable-e569697c
        at hudson.FilePath.mkdirs(FilePath.java:1170)
        at org.jenkinsci.plugins.durabletask.FileMonitoringTask$FileMonitoringController.&lt;init&gt;(FileMonitori
ngTask.java:156)
        at org.jenkinsci.plugins.durabletask.BourneShellScript$ShellController.&lt;init&gt;(BourneShellScript.java
:198)
        at org.jenkinsci.plugins.durabletask.BourneShellScript$ShellController.&lt;init&gt;(BourneShellScript.java
:190)
        at org.jenkinsci.plugins.durabletask.BourneShellScript.launchWithCookie(BourneShellScript.java:111)
        at org.jenkinsci.plugins.durabletask.FileMonitoringTask.launch(FileMonitoringTask.java:86)
        at org.jenkinsci.plugins.workflow.steps.durable_task.DurableTaskStep$Execution.start(DurableTaskStep
.java:182)
        at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:229)
        at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:153)
        at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)
        at sun.reflect.GeneratedMethodAccessor1989.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
        at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:157)
        at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
        at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterc
eptor.java:133)
        at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
        at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)
        at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)
        at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:129)
        at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
        at WorkflowScript.run(WorkflowScript:16)


</code></pre>
<h2 class="title is-4">Jenkins / Groovy -  define functions and call them with parameters</h2>
<pre><code>def report(status) {
   println &quot;status=${status}&quot;
}
</code></pre>
<p>and call them</p>
<pre><code>report(&quot;text&quot;)
</code></pre>
<h2 class="title is-4">Environment variables on Linux</h2>
<pre><code>sh 'printenv'
sh 'env'
</code></pre>
<h2 class="title is-4">git Backup</h2>
<p><a href="https://gist.github.com/cenkalti/5089392">gist</a></p>
<h2 class="title is-4">Other</h2>
<pre><code>echo bat(returnStdout: true, script: 'set')

build(job: 'RevertServerAutomationCloud', parameters: [
     string(name: 'VM_SNAPSHOT', value: 'CleanDb')
])
</code></pre>
<p>how to include one jenkinsfile in another one?</p>
<p>how to avoid repetititon?</p>
<pre><code>stage('Revert agent 100')
         {
             steps
                     {
                     }
         }

 stage('Revert agent 102')
         {
             steps
                     {

                     }
         }
</code></pre>
<p>how do try - catch and repeat interact?</p>
<pre><code>vSphere buildStep: [$class: 'RevertToSnapshot', snapshotName: &quot;${params.VM_SNAPSHOT}&quot;, vm: &quot;${params.VM_NAME}&quot;], serverName: '192.168.1.1'

httpRequest authentication: 'df8-b86d-3272', consoleLogResponseBody: true, httpMode: 'POST', ignoreSslErrors: true, responseHandle: 'NONE', url:
&quot;http://192.168.1.1:8080/computer/${params.AGENT_NAME}/doDisconnect?offlineMessage=bye&quot;, validResponseCodes: '100:404'
</code></pre>
<h2 class="title is-4">Active Choices Parameter</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/array_list.txt">examples/jenkins/array_list.txt</a></strong></p>
<pre><code class="language-txt">try {
   List&lt;String&gt; subnets = new ArrayList&lt;String&gt;()
   def subnetsRaw = &quot;gcloud compute networks subnets list --project=${GCE_PROJECT} --network=corp-development --format=(NAME)&quot;.execute().text
   for (subnet in  subnetsRaw.split()) {
       subnets.add(subnet)
   }
   return subnets
} catch (Exception e) {
   print e
   print &quot;There was a problem fetching the artifacts&quot;
}


</code></pre>
<h2 class="title is-4">Options</h2>
<pre><code>   options {
       ansiColor('xterm')
       timestamps()
   }
</code></pre>
<h2 class="title is-4">Scripts</h2>
<p><strong>Scripts not permitted to use method groovy.lang.GroovyObject invokeMethod java.lang.String java.lang.Object
(org.jenkinsci.plugins.workflow.cps.EnvActionImpl keys). Administrators can decide whether to approve or reject this
signature.</strong></p>
<h2 class="title is-4">archiveArtifacts can be called multiple times</h2>
<pre><code>archiveArtifacts artifacts: 'mydata.json', onlyIfSuccessful: true
writeJSON(file: 'otherfile.log', json: data, pretty: 4)
archiveArtifacts artifacts: '*.log', onlyIfSuccessful: true
</code></pre>
<h2 class="title is-4">Environment variable values must either be single quoted, double quoted, or function calls.</h2>
<p>They cannot be earlier defined environment variables or parameter values.
We can however overcome this limitation by calling a function and passing the values to it.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/exceptions.jenkinsfile">examples/jenkins/exceptions.jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent none
   options {
       ansiColor('xterm')
       timestamps()
   }
   parameters {
       string(name: 'machine', defaultValue: 'asos', description: 'Some text input')
       string(name: 'size',   defaultValue: '23', description: 'Some number input')
   }
   environment {
       answer = 42
       // machine_name = params.machine  // -&gt; Environment variable values must either be single quoted, double quoted, or function calls.
       machine_name = set_machine_name(params.machine)
   }
   stages {
       stage('try') {
           agent { label 'master' }
           steps {
               script {
                   sh &quot;hostname&quot;
                   print(&quot;params.machine=${params.machine}&quot;)
                   print(&quot;params.size=${params.size}&quot;)
                   print(&quot;env.answer=${env.answer}&quot;)
                   print(&quot;env.machine_name=${env.machine_name}&quot;)

               }
           }
       }
       stage('try-agent') {
           agent { label 'jenkins-simple-agent' }
           steps {
               script {
                   sh &quot;hostname&quot;
               }
           }
       }
   }
}

def set_machine_name(value) {
   return value
}



</code></pre>
<h2 class="title is-4">Jenkins environment</h2>
<p>Even if there is an exception in the environment section Jenkins will still run the &quot;success&quot; part of the post section.
Same problem if there is an exception on one of the functions.</p>
<p>To overcome this we create an environment variable as the last step in the environment section
and then we check that variable using</p>
<p>if (! binding.hasVariable('environment_is_set')) {
error(&quot;Environment failed to set properly&quot;)
}</p>
<p>That does not help in case there is an exception in the functions.</p>
<h2 class="title is-4">http_request</h2>
<pre><code>response = httpRequest discovery_url
println response
config_str = response.getContent()
for (item in config.sources) {
  item.value
  item.key
</code></pre>
<h2 class="title is-4">Sending e-mail problem fixed</h2>
<p><a href="https://stackoverflow.com/questions/20188456/how-to-change-the-security-type-from-ssl-to-tls-in-jenkins">https://stackoverflow.com/questions/20188456/how-to-change-the-security-type-from-ssl-to-tls-in-jenkins</a></p>
<ul>
<li>
<p>Sending e-mail
In Manage Jenkins - Configure System in the
Extended mail section set the
SMTP:  smtp.office365.com
Domain name: @company.com
Advanced:
Use SMTP Authentication: +
User Name: <a href="mailto:cicdserver@company.com">cicdserver@company.com</a>
Password:              SMTP port: 587
E-mail notification section:
SMTP server: smtp.office365.com
Default user e-mail suffix: @company.com
Advanced
User Name: <a href="mailto:cicdserver@company.com">cicdserver@company.com</a>
Password:               SMTP port: 587</p>
</li>
</ul>
<p>Shut down Jenkins (via the Windows services)
Open the file: C:\Program Files (x86)\Jenkins\jenkins.xml
and change the arguments line to be:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/arguments.txt">examples/jenkins/arguments.txt</a></strong></p>
<pre><code class="language-txt">&lt;arguments&gt;-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle  -Dmail.smtp.starttls.enable=true -jar
&quot;%BASE%\jenkins.war&quot; --httpPort=8080 --webroot=&quot;%BASE%\war&quot;&lt;/arguments&gt;


</code></pre>
<p>(specifically add:  -Dmail.smtp.starttls.enable=true  )
Then start Jenkins again.</p>
<p>Client was not authenticated to send anonymous mail
Error sending to the following VALID addresses</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/variables.Jenkinsfile">examples/jenkins/variables.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent none
   stages {
       stage('try') {
           agent { label 'master' }
           steps {
               script {
                   //some_strange_name = null
                   //print(some_strange_name)
                   if (true) {
                       print(&quot;creating variable&quot;)
                       some_strange_name = 1
                   }
                   print(some_strange_name)

                   if (binding.hasVariable('some_strange_name')) {
                       print(&quot;has some_strange_name&quot;)
                       print(some_strange_name)
                   } else {
                       print(&quot;DOES NOT have some_strange_name&quot;)
                   }
               }
           }
       }
       stage('try again') {
           agent { label 'master' }
           steps {
               script {
                   if (binding.hasVariable('some_strange_name')) {
                       print(&quot;has some_strange_name&quot;)
                       print(some_strange_name)
                   } else {
                       print(&quot;DOES NOT have some_strange_name&quot;)
                   }
               }
           }
       }
   }
}


</code></pre>
<h2 class="title is-4">Skip steps</h2>
<p>Jenkins pipeline stop early with success
How to indicate that a job is successful
<a href="https://stackoverflow.com/questions/37690920/jenkins-pipeline-conditional-step-stage">pipeline conditional step stage</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/skip_step.Jenkinsfile">examples/jenkins/skip_step.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent none
   options {
       ansiColor('xterm')
       timestamps()
   }
   parameters {
       booleanParam(defaultValue: false, description: 'Checkbox', name: 'yesno')
   }
   stages {
       stage('first') {
           agent { label 'master' }
           steps {
               script {
                   println(&quot;first before&quot;)
                   println(params.yesno)
                   done = true
                   return
                   println(&quot;first after&quot;)
               }
           }
       }
       stage('second') {
           agent { label 'master' }
           when {
               expression {
                  return ! done;
               }
           }
           steps {
               script {
                   println(&quot;second&quot;)
               }
           }
       }
   }
}


</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/worker_job.Jenkinsfile">examples/jenkins/worker_job.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">import java.text.SimpleDateFormat
pipeline {
   agent none
   options {
       ansiColor('xterm')
       timestamps()
   }
   parameters {
       string(name: 'machine', defaultValue: '', description: 'Name of the machine')
       string(name: 'size',   defaultValue: '23', description: 'The size')
       choice(choices: ['Mercury', 'Venus', 'Earth', 'Mars'], description:  'Pick a planet', name: 'planet')
   //}
   stages {
       stage('try') {
           agent { label 'master' }
           steps {
               script {
                   sh &quot;hostname&quot;

                   def data = readJSON text: '{}'
                   data.name = &quot;test-529&quot; as String
                   data.date = new java.text.SimpleDateFormat('yyyyMMddHHmmss').format(new Date())
                   writeJSON(file: 'mydata.json', json: data, pretty: 4)
                   archiveArtifacts artifacts: 'mydata.json', onlyIfSuccessful: true

                   //error(&quot;Fail after first artifact&quot;)

                   writeJSON(file: 'otherfile.log', json: data, pretty: 4)
                   archiveArtifacts artifacts: '*.log', onlyIfSuccessful: true
               }
           }
       }
   }
}


</code></pre>
<h2 class="title is-4">jenkins sh commnad fails - jenkins stops</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/sh_fails.jenkinsfile">examples/jenkins/sh_fails.jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
   agent { label 'master' }
   stages {
       stage('only') {
           steps {
               println(&quot;one&quot;)
               sh &quot;ls -l&quot;
               println(&quot;two&quot;)
               sh &quot;ls -l no_such&quot;
               println(&quot;three&quot;)
           }
       }
   }
}


</code></pre>
<h2 class="title is-4">Repository branch filter for Git</h2>
<p>It will start multiple jobs if more than one branch was pushed out.
It is triggered even if there were no new commits in the branch that was pushed out</p>
<p>By default it will run every branch matching the filter, even if that branch was last changed 2 years ago.
This can be a problem if for some reason your have hundreds or thousands of historical branches.</p>
<pre><code>:^origin/(work|dev)-.*
</code></pre>
<p>You can limit this by selecting another option and setting the ancestry date to limit how many days
you are ready to go back in time.</p>
<ul>
<li>Strategy for choosing what to build</li>
<li>Choosing strategy: Ancestry</li>
<li>Maximum Age of Commit: 1</li>
</ul>
<p>In a pipeline</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/branch_filter_age_limit.jenkinsfile">examples/jenkins/branch_filter_age_limit.jenkinsfile</a></strong></p>
<pre><code class="language-txt">
checkout([
    $class: 'GitSCM',
    branches: [[name: '*/master']],
    doGenerateSubmoduleConfigurations: false,
    extensions: [[
        $class: 'BuildChooserSetting',
        buildChooser: [$class: 'AncestryBuildChooser', ancestorCommitSha1: '', maximumAgeInDays: 1]
    ]],
    submoduleCfg: [],
    userRemoteConfigs: [[]]
])

</code></pre>
<h2 class="title is-4">Jenkins Pipeline code reuse</h2>
<p><a href="https://cleverbuilder.com/articles/jenkins-shared-library/">https://cleverbuilder.com/articles/jenkins-shared-library/</a>
<a href="https://jenkins.io/doc/book/pipeline/shared-libraries/">https://jenkins.io/doc/book/pipeline/shared-libraries/</a></p>
<h2 class="title is-4">Exceptions</h2>
<p>When you encounter one of those 40-lines long Java stack-traces, look for <b>WorkflowScript</b> to locate the source of the problem.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/exception_catching.jenkinsfile">examples/jenkins/exception_catching.jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
    agent { label 'master' }
    stages {
        stage('only') {
            steps {
                script {
                    println(&quot;one&quot;)
                    sh &quot;ls -l&quot;
                    println(&quot;two&quot;)

                    try {
                        //sh &quot;ls -l no_such&quot;
                        a = 10
                        b = 0
                        c = a/b

                    }
                    catch(Exception ex) {
                         //currentBuild.result = 'FAILURE'
                        println(&quot;exception&quot;)
                        println(ex) // hudson.AbortException: script returned exit code 2
                        println(ex.toString())
                        println(ex.getMessage())
                        println(ex.getStackTrace())
                    }

                    //} catch(ArrayIndexOutOfBoundsException ex) {
                    //println(&quot;Catching the Array out of Bounds exception&quot;);
                    //}catch(Exception ex) {

                    println(&quot;three&quot;)
                    is_it_the_answer(42)
                    echo &quot;try again&quot;
                    is_it_the_answer(23)
                }
            }
        }
        stage('second') {
            steps {
                script {
//                    if (manager.logContains(&quot;three&quot;)) {
//                        manager.addWarningBadge(&quot;tres&quot;)
//                    } else {
//                        manager.addWarningBadge(&quot;nem harom&quot;)
//                    }

                }
            }
        }
    }
}

def is_it_the_answer(n) {
    if (n == 42) {
        return 'yes'
    }
    throw new Exception('Nope')
}


                    try {
                        is_it_the_answer(23)
                    } catch (err) {
                        print(err)
                        print(err.getMessage())
                    }




</code></pre>
<h2 class="title is-4">Jenkins parse console output</h2>
<p>The <b>logContains</b> can parse the log created be the previous stages (but not the current stage)
It can also be used in a post-action.</p>
<p>&quot;manager&quot; is org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder$BadgeManager@41fe3861</p>
<p><a href="https://wiki.jenkins.io/display/JENKINS/Groovy+Postbuild+Plugin">Postbuild plugin</a></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/parse_console_output.jenkinsfile">examples/jenkins/parse_console_output.jenkinsfile</a></strong></p>
<pre><code class="language-txt">        stage('second') {
            steps {
                script {
                    if (manager.logContains(&quot;three&quot;)) {
                        manager.addWarningBadge(&quot;drei&quot;)
                    } else {
                        manager.addWarningBadge(&quot;kein drei&quot;)
                    }
                }
            }
        }


         print(&quot;A disk image was created: zorg-1552278641&quot;)

         def matcher = manager.getLogMatcher(/.* (zorg-\d+).*/)
         print(matcher)
         if (matcher?.matches()) {
             def image_name = matcher.group(1)
             print(image_name)
             manager.addShortText(image_name)
         }



</code></pre>
<h2 class="title is-4">readJSON</h2>
<p><a href="https://stackoverflow.com/questions/46841877/java-lang-nosuchmethoderror-no-such-dsl-method-readjson">no such dsl method</a></p>
<h2 class="title is-4">jenkins build step</h2>
<p><a href="https://jenkins.io/doc/pipeline/steps/pipeline-build-step/">https://jenkins.io/doc/pipeline/steps/pipeline-build-step/</a></p>
<p>jenkins collect status from invoked jobs</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/status_from_build.Jenkinsfile">examples/jenkins/status_from_build.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">
pipeline {
    agent { label 'master' }
    stages {
        stage('only') {
            steps {
                script {
                    println(&quot;BEFORE&quot;)
                    results = []
                    try {
                        def result = build job: &quot;experiment-subproject&quot;, wait: true
                        println(result) // org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper
                        println(result.getId())
                    } catch(err) {
                        println(&quot;ERROR caught&quot;)
                        println(err) // hudson.AbortException: experiment-subproject #4 completed with status FAILURE (propagate: false to ignore)
                        // https://javadoc.jenkins-ci.org/hudson/AbortException.html
                        println(err.getMessage())
                        println(err.getStackTrace())
                        println(err.getCause())
                        println(err.getLocalizedMessage())
                        println(err.toString())
                    }
                    println(&quot;AFTER&quot;)

                    def res = build job: &quot;experiment-subproject&quot;, wait: false
                    println(res) // null

                    rep = build job: &quot;experiment-subproject&quot;, wait: true, propagate: false
                    println(rep) // org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper
                    println(rep.getId())
                    println(rep.getResult()) // FAILURE
                    println(rep.getDurationString())
                    results.push(rep)

                    //sh &quot;ls -l&quot;
                    //println(&quot;two&quot;)
                    //} catch(ArrayIndexOutOfBoundsException ex) {
                    //println(&quot;Catching the Array out of Bounds exception&quot;);
                    //}catch(Exception ex) {

                    //println(&quot;three&quot;)
                    //print(&quot;A disk image was created: jenkins-agent-1554 and then more&quot;)
                    //is_it_the_answer(42)
                    //echo &quot;try again&quot;
                    //try {
                    //    is_it_the_answer(23)
                    //} catch (err) {
                    //   print(err)
                    //    print(err.getMessage())
                    //}
                }
            }
        }
        stage('second') {
            steps {
                script {
                    echo &quot;hi&quot;
                    println(rep.getId())
                    println(rep.getResult()) // FAILURE
                    println(rep.getProjectName())
                    println(rep.getDisplayName())

                    def res = build job: &quot;experiment-subproject&quot;, wait: true, propagate: false
                    results.push(res)

//                    if (manager.logContains(&quot;three&quot;)) {
//                        manager.addWarningBadge(&quot;tres&quot;)
//                    } else {
//                        manager.addWarningBadge(&quot;nem harom&quot;)
//                    }
                    //def image_name = ''
                    //def matcher = manager.getLogMatcher(/.* (jenkins-agent-(\d+)).*/)
                    //print(matcher)
                    //if (matcher?.matches()) {
                    //    image_name = matcher.group(1)
                    //    println(image_name)
                    //    manager.addShortText(image_name)
                    //    println(image_name.getClass())
                    //}
                    //do_sg(image_name)
                }
            }
        }
        stage ('gitz') {
            agent { label 'build-small' }
            steps {
                script {
                    results.each {
                         println(it)
                         println(it.getId())
                         println(it.getResult()) // FAILURE
                         println(it.getProjectName())
                         println(it.getAbsoluteUrl())
                    }
                }
            }
        }
    }
}

def is_it_the_answer(n) {
    if (n == 42) {
        return 'yes'
    }
    throw new Exception('Nope')
}

def do_sg(name) {
    print(&quot;do_sg with $name&quot;)
}

</code></pre>
<h2 class="title is-4">links</h2>
<p><a href="https://jenkins.io/doc/pipeline/steps/">https://jenkins.io/doc/pipeline/steps/</a></p>
<p><a href="https://jenkins.io/doc/pipeline/steps/pipeline-build-step/#-build-%20build%20a%20job">https://jenkins.io/doc/pipeline/steps/pipeline-build-step/#-build-%20build%20a%20job</a></p>
<p><a href="https://jenkins.io/doc/pipeline/steps/pipeline-input-step/">https://jenkins.io/doc/pipeline/steps/pipeline-input-step/</a></p>
<pre><code>               script {
                    manager.addShortText(&quot;\n${params.cluserName}&quot;, &quot;black&quot;, &quot;yellow&quot;, &quot;0px&quot;, &quot;white&quot;)
                    manager.addShortText(&quot;${params.clusterId}-${params.command}&quot;, &quot;black&quot;, &quot;lightgreen&quot;, &quot;0px&quot;, &quot;white&quot;)
                    manager.addShortText(&quot;${params.services}&quot;, &quot;black&quot;, &quot;AliceBlue&quot;, &quot;0px&quot;, &quot;white&quot;)
                    if (params.usage) {
                        manager.addShortText(&quot;${params.usage}&quot;, &quot;DimGray&quot;, &quot;AliceBlue&quot;, &quot;0px&quot;, &quot;white&quot;)
                    }
                }
</code></pre>
<h2 class="title is-4">Elapsed time</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/elapsed_time.Jenkinsfile">examples/jenkins/elapsed_time.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">import groovy.time.TimeCategory
import groovy.time.TimeDuration

pipeline {
    agent { label 'master' }
    stages {
        stage('first') {
            steps {
                script {
                    start = new Date()
                    echo &quot;in first&quot;
                }
            }
        }
        stage('second') {
            steps {
                script {
                    echo &quot;in second&quot;
                }
            }
        }
    }
    post {
        always {
            echo &quot;in post always&quot;
            script {
                def stop = new Date()
                TimeDuration td = TimeCategory.minus( stop, start )
                println(&quot;Elapsed time: $td&quot;)
            }

        }
        failure {
            echo &quot;in post failure&quot;
        }
    }
}


</code></pre>
<h2 class="title is-4">Serialize regex</h2>
<p>After a regex matching Jenkins sometimes wants to serialize the object, but it cannot do it and thus is raises an
exception. (I have not yet figured out when does this happen.)</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/serialize_regex.Jenkinsfile">examples/jenkins/serialize_regex.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">pipeline {
    agent { label 'master' }
    stages {
        stage('first') {
            steps {
                script {
                    echo &quot;in first&quot;
                    def text = &quot;&quot;&quot;This is some long test
                    with more than 1
                    rows.
                    &quot;&quot;&quot;
                    def match = (text =~ /\bsome\b/)
                    println(&quot;still first&quot;)
                    check_me()
                }
            }
        }
        stage('second') {
            steps {
                script {
                    echo &quot;in second&quot;
                }
            }
        }
    }
    post {
        always {
            echo &quot;in post always&quot;
        }
        failure {
            echo &quot;in post failure&quot;
        }
    }
}

def check_me() {
    println(&quot;in check&quot;)
    def text = &quot;&quot;&quot;This is some long test
        with more than 1
        rows.
    &quot;&quot;&quot;
    def match = (text =~ /\bsome\b/)
}



</code></pre>
<h2 class="title is-4">Send mail</h2>
<pre><code>emailext (
    subject: &quot;Test by Gabor&quot;,
    body: &quot;Test from Gabor&quot;,
    to: 'foo@bar.com',
    from: 'jenkins-noreply@example.com',
    listId: 'gabor-experimental',
)
</code></pre>
<h2 class="title is-4">Jenkins - check if host is accessible</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/ping_host.jenkinsfile">examples/jenkins/ping_host.jenkinsfile</a></strong></p>
<pre><code class="language-txt">// catch exception
// stop process early reporting failure

pipeline {
    agent { label 'master' }
    parameters {
       string(name: 'hostname', defaultValue: 'gabor-dev', description: 'Hostname or IP address')
    }
    stages {
        stage('first') {
            steps {
                script {
                    echo &quot;Checking $params.hostname&quot;
                    try {
                        sh(&quot;ping -c 1 $params.hostname&quot;)
                    }  catch(Exception e) {
                       println(&quot;Exception: ${e}&quot;)
                       error(&quot;Could not find host $params.hostname, is it on?&quot;)
                       return
                    }
                    echo &quot;still in first&quot;
                }
            }
        }
        stage('second') {
            steps {
                script {
                    echo &quot;in second&quot;
                }
            }
        }
    }
    post {
        always {
            echo &quot;in post always&quot;
        }
        failure {
            echo &quot;in post failure&quot;
        }
    }
}



</code></pre>
<h2 class="title is-4">last started stage</h2>
<pre><code>//   last_started = env.STAGE_NAME
</code></pre>
<h2 class="title is-4">Early stop</h2>
<p>jenkins - skip rest of the current stage, early end of current stage  - stop the whole job reporting error</p>
<pre><code>return  // skipping rest of the current stage, running next stage
error(&quot;Some error message&quot;)  // raise an exception stop the whole job
</code></pre>
<h2 class="title is-4">currentBuild</h2>
<pre><code>echo currentBuild.number  // failed expecting number
println(currentBuild.number)  // works

println(&quot;Number: ${currentBuild.number}&quot;)
println(&quot;Result: ${currentBuild.result}&quot;)
println(&quot;Display name: ${currentBuild.displayName}&quot;)
</code></pre>
<p>during the steps the result is null
in the post section it is already 'SUCCESS' or 'FAILURE'</p>
<p><a href="https://jenkins.io/doc/book/pipeline/getting-started/">getting started</a></p>
<h2 class="title is-4">returnStatus instead of stopping the job</h2>
<p>the exit code</p>
<pre><code>def res2 = sh(script: &quot;pwd&quot;, returnStatus: true)
</code></pre>
<h2 class="title is-4">Sample code</h2>
<pre><code>def errors = ''
def res = 'SUCCESS'
def res1 = sh(script: &quot;xyz&quot;, returnStatus: true)
println(&quot;res1 ${res1}&quot;)
if (res1 !=0) {
    res = 'FAILURE'
    errors += &quot;xyz&quot;
}
def res2 = sh(script: &quot;abc&quot;, returnStatus: true)
println(&quot;res2: ${res2}&quot;)
if (res2 !=0) {
    res = 'FAILURE'
    errors += &quot;abc&quot;
}
def res3 = sh(script: &quot;pwd&quot;, returnStatus: true)
println(&quot;res3: ${res3}&quot;)
if (res3 !=0) {
    res = 'FAILURE'
    errors += &quot;pwd&quot;
}
//if (params.expected == 'Success') {
//    sh &quot;pwd&quot;
//} else {
//    sh &quot;xyz&quot;
//}
if (res == 'FAILURE') {
    error(errors)
</code></pre>
<h2 class="title is-4">jenkins error, we need to clean the regex variables</h2>
<pre><code>def output = sh(...)
def version = (output =~ /Version\s*:\s*([\d.]+)/)
def build_number = (output =~ /Build number\s*:\s*([\d]+)/)
currentBuild.description = &quot;${version[0][1]} - ${build_number[0][1]}&lt;br&gt;&quot;
version = &quot;&quot;
build_number = &quot;&quot;
</code></pre>
<h2 class="title is-4">Optional artifacts</h2>
<pre><code>post {
    always {
        script {
            archiveArtifacts artifacts: 'screenshots/*', fingerprint: true, allowEmptyArchive: true
        }
    }
}
</code></pre>
<p><a href="https://www.jenkins.io/doc/pipeline/steps/core/">archiveArtifacts</a></p>
<p><a href="https://stackoverflow.com/questions/34594703/add-build-parameter-in-jenkins-build-schedule">schedule</a></p>
<h2 class="title is-4">multiple cron with parameter</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/jenkins/multiple_cron.Jenkinsfile">examples/jenkins/multiple_cron.Jenkinsfile</a></strong></p>
<pre><code class="language-txt">
// multiple cron with parameter

// There is a plugin and this experiment

    triggers {
        cron(&quot;35,36 * * * *&quot;)
    }

    stages {
        stage('Check disk usage') {
            steps {
                script {
                    echo &quot;--------------&quot;
                    echo &quot;HELLO $BUILD_NUMBER&quot;
                    echo &quot;--------------&quot;
                    String[] ENVS   = [&quot;env1&quot;, &quot;env3&quot;]
                    def ENV_COUNT   = ENVS.length
                    def x           = BUILD_NUMBER.toInteger() % ENV_COUNT
                    echo x.toString()
                    echo ENVS[x]


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Installing Perl and CPAN modules using Ansible</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-21T12:30:01Z</updated>
    <pubDate>2018-03-21T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/installing-perl-and-cpan-modules-using-ansible" />
    <id>https://code-maven.com/installing-perl-and-cpan-modules-using-ansible</id>
    <content type="html"><![CDATA[<p>For a Perl-based application you can either use the version of Perl that comes with the system or you can compile and install another version.</p>
<p>The same with modules from CPAN. You can use the versions that are in the package-management system of your Linux distribution, or you can install them directly from CPAN.</p>
<p>In this article we'll see how to use the system-perl and CPAN modules installed using <code>apt</code>.</p>
<h2 class="title is-4">Ansible inventory file</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/inventory.cfg">examples/ansible/inventory.cfg</a></strong></p>
<pre><code class="language-cfg">[all]
192.168.56.11
192.168.56.12

[all:vars]
ansible_python_interpreter=/usr/bin/python3



</code></pre>
<h2 class="title is-4">Check version of Perl</h2>
<pre><code>$ ansible -i inventory.cfg 192.168.56.11 -a &quot;perl -v&quot;
192.168.56.11 | SUCCESS | rc=0 &gt;&gt;

This is perl 5, version 26, subversion 0 (v5.26.0) built for x86_64-linux-gnu-thread-multi
(with 56 registered patches, see perl -V for more detail)

Copyright 1987-2017, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using &quot;man perl&quot; or &quot;perldoc perl&quot;.  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
</code></pre>
<p>Be less verbose. Print just the version number. Perl stores its version number
in the internal variable <code>$]</code>. We can print it on our command line using</p>
<pre><code>$ perl -e 'print qq{$]\n}'

5.026000
</code></pre>
<p>Here I use the special quoting-style of Perl. Instead of double quotes <code>&quot;$]\n&quot;</code>
I used the <a href="https://perlmaven.com/quoted-interpolated-and-escaped-strings-in-perl">&gt;qq</a>
operator and the curly braces. This will make it easier to pass the whole
command as parameter to the Ansible command without the need of extensive escaping.</p>
<p>We can use the same code with Ansible to execute on the remote server(s).</p>
<pre><code>$ ansible -i inventory.cfg 192.168.56.11 -a &quot;perl -e 'print qq{$]\n}'&quot;

192.168.56.11 | SUCCESS | rc=0 &gt;&gt;
5.026000
</code></pre>
<h2 class="title is-4">Check version of specific Perl Module</h2>
<p>Locally I can execute this code:</p>
<pre><code>perl -mPath::Tiny -E 'say $Path::Tiny::VERSION'
</code></pre>
<p>Here I already use my knowledge about the version of Perl on the system. Knowing that perl is
at least version 5.10 I can use the <code>-E</code> flag and if I use that I can use the <code>say</code>
statement that automatically adds the <code>\n</code> to the end of the output.</p>
<p>The response however is a big blob of error.</p>
<pre><code>$ perl -mPath::Tiny -E 'say $Path::Tiny::VERSION'
Can't locate Path/Tiny.pm in @INC (you may need to install the Path::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.0 /usr/local/share/perl/5.26.0 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base).
BEGIN failed--compilation aborted.
</code></pre>
<p>In our case, as in most of the cases, the <a href="https://perlmaven.com/cant-locate-in-inc">Can't locate ... in @INC</a> error just means we don't have <a href="https://metacpan.org/pod/Path::Tiny">Path::Tiny</a> installed.</p>
<p>Let's see how does the same command work via Ansible?</p>
<pre><code>$ ansible -i inventory.cfg 192.168.56.11 -a &quot;perl -mPath::Tiny -E 'say $Path::Tiny::VERSION'&quot;

192.168.56.11 | FAILED | rc=2 &gt;&gt;
Can't locate Path/Tiny.pm in @INC (you may need to install the Path::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.0 /usr/local/share/perl/5.26.0 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base).
BEGIN failed--compilation aborted.non-zero return code
</code></pre>
<h2 class="title is-4">Install Perl module sing apt</h2>
<p>So far we ran our command on the remote server with the same username as we have locally. (foo in my case). User &quot;foo&quot; cannot install anything on its own. We either need to login to the remote server as user &quot;root&quot; or we need to use &quot;sudo&quot; on the remote server.</p>
<p>If we decide on the latter we can use the <code>-b</code> or <code>--become</code> flag that tells ansible it should &quot;become another user&quot; on the remote server. It defaults to become user <code>root</code> which is rather convenient.</p>
<pre><code>ansible -i inventory.cfg 192.168.56.11 -m apt -a &quot;name=libpath-tiny-perl state=present&quot; -b
</code></pre>
<p>If you get an error with <code>&quot;module_stdout&quot;: &quot;sudo: a password is required\r\n&quot;,</code>, then
either you need to pass the <code>-K</code> parameter as well so Ansible will ask for the password of &quot;foo&quot; on the remote machine, or read and follow the article on <a href="/enable-ansible-passwordless-sudo">passwordless sudo</a>.</p>
<p>The output will be a bit verbose, but at the end we should have the module installed on our remote machine.</p>
<p>Let's check the version number again:</p>
<pre><code>$ ansible -i inventory.cfg 192.168.56.11 -a &quot;perl -mPath::Tiny -E 'say $Path::Tiny::VERSION'&quot;

192.168.56.11 | SUCCESS | rc=0 &gt;&gt;
</code></pre>
<p>The response is successful, but we don't see the version number. I spent more than an hour figuring out that the problem was that the <code>$</code> sign in front of Path::Tiny was already interpreted by the local shell and thus the command did not arrive properly to the remote server.</p>
<p>The solution is to escape the <code>$</code> using a back-slash:</p>
<pre><code>ansible -i inventory.cfg all -a &quot;perl -mPath::Tiny -E 'say \$Path::Tiny::VERSION'&quot;

192.168.56.11 | SUCCESS | rc=0 &gt;&gt;
0.100
</code></pre>
<p>This way we can see that the version number of the Path::Tiny module is 0.100.</p>
<h2 class="title is-4">Playbook to get Perl Module version number</h2>
<p>We can also create a Playbook to retrieve the version of the Perl Module.
In the playbook we don't need to escape the <code>$</code> character,
by default Ansible will hide the output. So we need to add some extra statements
to the playbook to <code>register</code> the output of the command in arbitrary variable
we called <code>out</code>. Then need another step to print out the content in a debug message.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/perl_module_version.yml">examples/ansible/perl_module_version.yml</a></strong></p>
<pre><code class="language-yaml">- hosts: all
  gather_facts: yes
  tasks:
    - name: 'Module version'
      command: perl -mPath::Tiny -E 'say $Path::Tiny::VERSION'
      register: out
    - debug: msg={{out.stdout}}


</code></pre>
<p>This is the command to run the playbook:</p>
<pre><code>ansible-playbook -i inventory.cfg --limit 192.168.56.11 perl_module_version.yml
</code></pre>
<p>This is the output from the playbook:</p>
<pre><code>PLAY [all] ******************************************************************************************

TASK [Gathering Facts] ******************************************************************************
ok: [192.168.56.11]

TASK [Module version] *******************************************************************************
changed: [192.168.56.11]

TASK [debug] ****************************************************************************************
ok: [192.168.56.11] =&gt; {
    &quot;msg&quot;: &quot;0.100&quot;
}

PLAY RECAP ******************************************************************************************
192.168.56.11              : ok=3    changed=1    unreachable=0    failed=0
</code></pre>
<p>If we executed the same command on the other server, the one where we have not installed the module yet, we would get the nasty error we already know from the local execution of the command.</p>
<pre><code>$ ansible-playbook -i inventory.cfg --limit 192.168.56.12 perl_module_version.yml

PLAY [all] ******************************************************************************************

TASK [Gathering Facts] ******************************************************************************
ok: [192.168.56.12]

TASK [Module version] *******************************************************************************
fatal: [192.168.56.12]: FAILED! =&gt; {&quot;changed&quot;: true, &quot;cmd&quot;: [&quot;perl&quot;, &quot;-mPath::Tiny&quot;, &quot;-E&quot;, &quot;say $Path::Tiny::VERSION&quot;], &quot;delta&quot;: &quot;0:00:00.004247&quot;, &quot;end&quot;: &quot;2018-03-21 12:12:43.080453&quot;, &quot;msg&quot;: &quot;non-zero return code&quot;, &quot;rc&quot;: 2, &quot;start&quot;: &quot;2018-03-21 12:12:43.076206&quot;, &quot;stderr&quot;: &quot;Can't locate Path/Tiny.pm in @INC (you may need to install the Path::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.0 /usr/local/share/perl/5.26.0 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base).\nBEGIN failed--compilation aborted.&quot;, &quot;stderr_lines&quot;: [&quot;Can't locate Path/Tiny.pm in @INC (you may need to install the Path::Tiny module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.0 /usr/local/share/perl/5.26.0 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base).&quot;, &quot;BEGIN failed--compilation aborted.&quot;], &quot;stdout&quot;: &quot;&quot;, &quot;stdout_lines&quot;: []}
	to retry, use: --limit @/home/foo/perl_module_version.retry

PLAY RECAP ******************************************************************************************
192.168.56.12              : ok=1    changed=0    unreachable=0    failed=1
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Install and configure Nginx using Ansible</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-21T10:00:01Z</updated>
    <pubDate>2018-03-21T10:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/install-and-configure-nginx-using-ansible" />
    <id>https://code-maven.com/install-and-configure-nginx-using-ansible</id>
    <content type="html"><![CDATA[<p>Probably one of the easiest and most straight forward things we can do using Ansible is to install and configure a web server.
Specifically Nginx.</p>
<p>Let's log in to our management machine and use <code>curl</code> on the command line to check if the web server on
our server is accessible:</p>
<pre><code>curl http://192.168.56.11
</code></pre>
<p>The response is</p>
<pre><code>curl: (7) Failed to connect to 192.168.56.11 port 80: Connection refused
</code></pre>
<p>because there is no web server on that box.</p>
<h2 class="title is-4">Install Nginx on Ubuntu</h2>
<p>We need to have inventory file that lists all the boxes we would like to manage.</p>
<pre><code>[web]
192.168.56.11

[web:vars]
ansible_python_interpreter=/usr/bin/python3
</code></pre>
<p>Here we have a group called &quot;web&quot; (you can have any arbitrary name there) and the single remote machine is listed in that group.
The <code>ansible_python_interpreter=/usr/bin/python3</code> is there so Ansible will use Python 3 on the remote machine.</p>
<p>We create an Ansible Playbook which is just a YAML file:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/nginx_install.yml">examples/ansible/nginx_install.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: all
  tasks:
    - name: ensure nginx is at the latest version
      apt: name=nginx state=latest
    - name: start nginx
      service:
          name: nginx
          state: started


</code></pre>
<p>In this playbook we have one task that has two steps. The &quot;- name: ....&quot; are only there for the humans, to make sense of the commands.
The first step <code>apt: name=nginx state=latest</code> tells the <code>apt</code> module that we want the latest version of the <code>nginx</code> package to be installed.
The next step tells Linux to make sure the <code>service</code> called <code>nginx</code> is <code>started</code>. (The <code>name: nginx</code> is part of the command.)
Interestingly on the current version of Ubuntu you don't need the latter as Ubuntu takes care of it, but it is better to explicitly say what is that state you require. Especially if you will ever want to uninstall and then re-install nginx.</p>
<p>I assume you've already <a href="/enable-ansible-passwordless-sudo">set up passwordless sudo</a> so we don't need to supply the <code>-K</code> or <code>--ask-become-pass</code> flags.</p>
<pre><code>$ ansible-playbook -i inventory.cfg nginx_install.yml -b
</code></pre>
<p>The <code>-b</code> tells ansible to become <code>root</code> on the remote server using <code>sudo</code>. The output looks like this:</p>
<pre><code>PLAY [all] *******************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************
ok: [192.168.56.11]

TASK [ensure nginx is at the latest version] *********************************************************************
changed: [192.168.56.11]

PLAY RECAP *******************************************************************************************************
192.168.56.11              : ok=2    changed=1    unreachable=0    failed=0
</code></pre>
<p>Then we can try <code>curl</code> again. This time we get some HTML output that I have trimmed for brevity.
Apparently the default page.</p>
<pre><code>$ curl http://192.168.56.11

&lt;!DOCTYPE html&gt;
....
</code></pre>
<h2 class="title is-4">Uninstall Nginx</h2>
<p>In order to allow us to see the full cycle we would like to check how to uninstall Nginx. This is the playbook we are going to use.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/nginx_uninstall.yml">examples/ansible/nginx_uninstall.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: all
  tasks:
    - name: stop nginx
      service:
          name: nginx
          state: stopped
    - name: ensure nginx is not installed
      apt: name=nginx state=absent


</code></pre>
<p>Setting <code>state=absent</code> and running the playbook reported <code>changed=1</code> but the web server was still installed and running.
In order to fix that, first we need to stop the nginx service. That's what you see in the above playbook.</p>
<h2 class="title is-4">Configure Nginx</h2>
<p>It is not enough to install Nginx we also need to configure it. This involves a couple of steps.</p>
<ol>
<li>Creating a configuration file.</li>
</ol>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/static_site.cfg">examples/ansible/static_site.cfg</a></strong></p>
<pre><code class="language-cfg">server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /home/foo/static-site;
        server_name _;
        location / {
                try_files $uri $uri/ =404;
        }
}


</code></pre>
<ol start="2">
<li>
<p>Putting it <code>/etc/nginx/sites-available/</code>.</p>
</li>
<li>
<p>Creating a symbolic link from <code>/etc/nginx/sites-enabled/</code> to that file.</p>
</li>
<li>
<p>Creating a directory where we put the pages of the website. For simplicity we are going to create a static web site. Without an application behind it. Just an HTML file and an image.</p>
</li>
</ol>
<p>Locally they look like this:</p>
<pre><code>static-site-src/
   index.html
   ansible-logo.jpg
</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/static-site-src/index.html">examples/ansible/static-site-src/index.html</a></strong></p>
<pre><code class="language-html">&lt;h1&gt;Welcome to Ansible&lt;/h1&gt;
&lt;img src=&quot;/ansible-logo.jpg&quot; /&gt;


</code></pre>
<img src="/img/ansible-logo.jpg" />
<p>On the servers I'd like to put them in the <code>static-site</code> directory of user &quot;foo&quot;.
That is in <code>/home/foo/static-site</code>.</p>
<ol start="5">
<li>Tell nginx to reload its configuration files.</li>
</ol>
<h2 class="title is-4">The Ansible Playbook to set up Nginx</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/nginx.yml">examples/ansible/nginx.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: all
  tasks:
    - name: ensure nginx is at the latest version
      apt: name=nginx state=latest
      become: yes
    - name: start nginx
      service:
          name: nginx
          state: started
      become: yes
    - name: copy the nginx config file and restart nginx
      copy:
        src: /home/foo/static_site.cfg
        dest: /etc/nginx/sites-available/static_site.cfg
      become: yes
    - name: create symlink
      file:
        src: /etc/nginx/sites-available/static_site.cfg
        dest: /etc/nginx/sites-enabled/default
        state: link
      become: yes
    - name: copy the content of the web site
      copy:
        src: /home/foo/static-site-src/
        dest: /home/foo/static-site
    - name: restart nginx
      service:
        name: nginx
        state: restarted
      become: yes

</code></pre>
<p>Then I run this command:</p>
<pre><code>$ ansible-playbook -i inventory.cfg  --limit 192.168.56.11 nginx.yml
</code></pre>
<p>Note, this time I have not supplied the <code>-b</code> flag to become root. Instead for each step where I wanted the command to be executed with <code>sudo</code> I've added the <code>become: yes</code> parameter.</p>
<p>The output looked like this:</p>
<pre><code>PLAY [all] ******************************************************************************************

TASK [Gathering Facts] ******************************************************************************
ok: [192.168.56.11]

TASK [ensure nginx is at the latest version] ********************************************************
changed: [192.168.56.11]

TASK [start nginx] **********************************************************************************
changed: [192.168.56.11]

TASK [copy the nginx config file and restart nginx] *************************************************
changed: [192.168.56.11]

TASK [create symlink] *******************************************************************************
changed: [192.168.56.11]

TASK [copy the content of the web site] *************************************************************
changed: [192.168.56.11]

TASK [restart nginx] ********************************************************************************
changed: [192.168.56.11]

PLAY RECAP ******************************************************************************************
192.168.56.11              : ok=7    changed=6    unreachable=0    failed=0
</code></pre>
<p>Then I could go ahead and check</p>
<pre><code>$ curl http://192.168.56.11
</code></pre>
<p>That printed:</p>
<pre><code>&lt;h1&gt;Welcome to Ansible&lt;/h1&gt;
&lt;img src=&quot;/ansible-logo.jpg&quot; /&gt;
</code></pre>
<p>When I visited the <a href="http://192.168.56.11/">http://192.168.56.11/</a> from my desktop machine, it showed me the web page as I expected it, with the logo of Ansible.</p>
<h2 class="title is-4">Comments</h2>
<p>I got curl: (7) couldn't connect to host</p>
<hr />
<p>Hi,</p>
<p>I configured two EC2 RHL7 machine in AWS.(region - US East (Ohio))</p>
<ol>
<li>control machine</li>
<li>Node machine</li>
</ol>
<h2 class="title is-4">When i am trying to run playbook i get the below error.</h2>
<h2 class="title is-4">fatal: [172.31.18.198]: FAILED! =&gt; {&quot;changed&quot;: false, &quot;msg&quot;: &quot;Repo rhui-REGION-client-config-server-7 forced skip_if_unavailable=True due to: /etc/pki/rhui/cdn.redhat.com-chain.crt\nRepo rhui-REGION-client-config-server-7 forced skip_if_unavailable=True due to: /etc/pki/rhui/product/rhui-client-config-server-7.crt\nRepo rhui-REGION-client-config-server-7 forced skip_if_unavailable=True due to: /etc/pki/rhui/rhui-client-config-server-7.key\nRepo rhui-REGION-rhel-server-releases forced skip_if_unavailable=True due to: /etc/pki/rhui/cdn.redhat.com-chain.crt\nRepo rhui-REGION-rhel-server-releases forced skip_if_unavailable=True due to: /etc/pki/rhui/product/content-rhel7.crt\nRepo rhui-REGION-rhel-server-releases forced skip_if_unavailable=True due to: /etc/pki/rhui/content-rhel7.key\nRepo rhui-REGION-rhel-server-rh-common forced skip_if_unavailable=True due to: /etc/pki/rhui/cdn.redhat.com-chain.crt\nRepo rhui-REGION-rhel-server-rh-common forced skip_if_unavailable=True due to: /etc/pki/rhui/product/content-rhel7.crt\nRepo rhui-REGION-rhel-server-rh-common forced skip_if_unavailable=True due to: /etc/pki/rhui/content-rhel7.key\n\n\nCould not contact any CDS load balancers: rhui2-cds01.us-east-2.aws.c..., rhui2-cds02.us-east-2.aws.c....\n&quot;, &quot;rc&quot;: 1, &quot;results&quot;: []}</h2>
<p>Could you please help me to understand the issue.</p>
<hr />
<p>I am trying to install nginx in node machine.</p>
<ul>
<li>hosts: webservers
tasks:</li>
<li>name: ensure nginx is at the latest version
yum: name=nginx state=latest</li>
<li>name: start nginx
service:
name: nginx
state: started</li>
</ul>
<hr />
<p>Enable ssh between the machines and mention the users: name your user here</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Waiting with Ansible, pausing a Playbook</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-18T19:00:01Z</updated>
    <pubDate>2018-03-18T19:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/waiting-with-ansible-pausing-playbook" />
    <id>https://code-maven.com/waiting-with-ansible-pausing-playbook</id>
    <content type="html"><![CDATA[<p>Sometimes we need to wait some time before we can let our Ansible process to continue.</p>
<p>This playbook will show the current time on the server. Wait 3 second and then show the time again.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/sleep.yml">examples/ansible/sleep.yml</a></strong></p>
<pre><code class="language-yaml">---
- hosts: all
  tasks:
    - name: check date
      command: date
      register: out
    - debug: msg={{out.stdout}}

    - pause: seconds=3

    - name: check date
      command: date
      register: out
    - debug: msg={{out.stdout}}

</code></pre>
<p>The output looks like this:</p>
<pre><code>i$ ansible-playbook -i inventory.cfg --limit 192.168.56.11 -b sleep.yml

PLAY [all] ****************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************
ok: [192.168.56.11]

TASK [check date] *********************************************************************************************************************
changed: [192.168.56.11]

TASK [debug] **************************************************************************************************************************
ok: [192.168.56.11] =&gt; {
    &quot;msg&quot;: &quot;Sun Mar 18 18:35:59 IST 2018&quot;
}

TASK [pause] **************************************************************************************************************************
Pausing for 3 seconds
(ctrl+C then 'C' = continue early, ctrl+C then 'A' = abort)
ok: [192.168.56.11]

TASK [check date] *********************************************************************************************************************
changed: [192.168.56.11]

TASK [debug] **************************************************************************************************************************
ok: [192.168.56.11] =&gt; {
    &quot;msg&quot;: &quot;Sun Mar 18 18:36:02 IST 2018&quot;
}

PLAY RECAP ****************************************************************************************************************************
192.168.56.11              : ok=6    changed=2    unreachable=0    failed=0
</code></pre>
<p>Read more about <a href="http://docs.ansible.com/ansible/latest/pause_module.html">pause</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Reboot using Ansible</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-18T17:00:01Z</updated>
    <pubDate>2018-03-18T17:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/reboot-with-ansible" />
    <id>https://code-maven.com/reboot-with-ansible</id>
    <content type="html"><![CDATA[<p>Sometime we need to reboot the servers using Ansible</p>
<h2 class="title is-4">Ad-hoc command to reboot a single server</h2>
<pre><code>$ ansible -i inventory.cfg  192.168.56.11 -b -a &quot;/sbin/shutdown -r now&quot;
</code></pre>
<p>This reboots the server, but the reboot starts before Ansible finishes its work and thus it gives the following error message.</p>
<pre><code>192.168.56.11 | UNREACHABLE! =&gt; {
    &quot;changed&quot;: false,
    &quot;msg&quot;: &quot;Failed to connect to the host via ssh: Shared connection to 192.168.56.11 closed.\r\n&quot;,
    &quot;unreachable&quot;: true
}
</code></pre>
<h2 class="title is-4">Ad-hoc command for delayed reboot</h2>
<p>We can tell the <code>shudown</code> command to wait 1 minute (or more) and reboot only after that. (Probably 1-2 sec would be enought but as far as I know you cannot specify that for the <code>shutdown command</code>.) This gives enough time for Ansible to return a success report. It returns immediately and the machine shuts down (and because of the <code>-r</code> flag reboots) 1 minutes later.</p>
<pre><code>$ ansible -i inventory.cfg  192.168.56.11 -b -a &quot;/sbin/shutdown -r +1&quot;
</code></pre>
<pre><code>192.168.56.11 | SUCCESS | rc=0 &gt;&gt;
Shutdown scheduled for Sun 2018-03-18 17:01:40 IST, use 'shutdown -c' to cancel.
</code></pre>
<h2 class="title is-4">Reboot in a playbook</h2>
<pre><code>---
- hosts: all
  tasks:
     - command: /sbin/shutdown -r now
</code></pre>
<pre><code>---
- hosts: all
  tasks:
     - name: reboot
      command: /sbin/shutdown -r now
</code></pre>
<pre><code>ansible-playbook -i inventory.cfg --limit 192.168.56.11 -b reboot.yml
</code></pre>
<p>This was also discussed in the <a href="/getting-started-with-ansible-centos">Getting started with Ansible on CentOS</a> article.</p>
<h2 class="title is-4">Forgetting to become root</h2>
<p>With all the explanation, the next time I tried to reboot a server I forgot to tell Ansible to <b>become root</b>.
Or in other words, I've forgotten to supply the <code>-b</code> flag.</p>
<pre><code>$ ansible -i inventory.cfg 192.168.56.11 -a &quot;/sbin/shutdown -r now&quot;
</code></pre>
<p>The response was violent.</p>
<pre><code>192.168.56.11 | FAILED | rc=1 &gt;&gt;
Failed to set wall message, ignoring: Interactive authentication required.
Failed to reboot system via logind: Interactive authentication required.
Failed to open /dev/initctl: Permission denied
Failed to talk to init daemon.non-zero return code
</code></pre>
<p>It took me a while to understand what happened, but afer a while I figure it out:</p>
<pre><code>$ ansible -i inventory.cfg 192.168.56.11 -a &quot;/sbin/shutdown -r now -b&quot;
</code></pre>
<h2 class="title is-4">Comments</h2>
<p>Gabor, you have a typo in last command.
the -b should be outside the &quot; &quot;</p>
<hr />
<p>Thank you for sharing :D This helped me with my jenkins job where I wanted to avoid the unreachable error because I was shutting down a machine.</p>
<h2 class="title is-4">
<p>reboot starts before Ansible finishes its work ... see: <a href="https://stackoverflow.com/questions/29955605/how-to-reboot-centos-7-with-ansible">https://stackoverflow.com/questions/29955605/how-to-reboot-centos-7-with-ansible</a>
for async goodness. Also <a href="https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_async.html">https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_async.html</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Setup for Learning Ansible</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-18T10:30:01Z</updated>
    <pubDate>2018-03-18T10:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/setup-for-learning-ansible" />
    <id>https://code-maven.com/setup-for-learning-ansible</id>
    <content type="html"><![CDATA[<p>In order to Learn Ansible you'll need to be familiar with at least the basics of Linux on the command line and you'll need to have a few Linux boxes to experiment with.</p>
<h2 class="title is-4">Minimum Linux knowledge</h2>
<ul>
<li>File-system operations: creating, listing, moving, removing, editing files.</li>
<li>Using ping, ssh, sudo</li>
<li>Configuring Nginx</li>
</ul>
<p>You can use the <a href="/linux">Linux mini-series</a> of articles to learn these.</p>
<h2 class="title is-4">Linux boxes to experiment with</h2>
<p>You'll need 3 (or more) Linux machines for each setup to use as host and one machine (either Linux or OSX) to run Ansible.</p>
<p>Your Options: Having a local installation or using machines in the cloud.</p>
<h2 class="title is-4">MS Windows</h2>
<p>If you have MS Windows on your computer:</p>
<p>Option one is to create 4 Virtual Machines on the computer you work on. 1 where you'll install and run Ansible and 3 to act as hosts you manage.</p>
<p>Option two is to create 1 Virtual Machine on the computer you work on and use 3 VPS (Virtual Private Server) in the cloud. On the local Virtual Machine you'll install and run Ansible. You will manage the 3 VPS-es.</p>
<h2 class="title is-4">OSX or Linux</h2>
<p>If you run Linux or OSX then it can be used as the machine where you install and run Ansible so you only need the 3 host machines. Those can be either local, inside Virtual Box, or they can be remote. Using some VPS.</p>
<h2 class="title is-4">Virtual Linux boxes locally</h2>
<p>IMHO The best option is to create the 4 Linux boxes in a VirtualBox image locally. That will allow you to use them anywhere and they don't cost you anything.
Follow the <a href="/linux">Linux mini-series</a> explaining how to install Ubuntu Linux on VirtualBox and how to configure the network. If you already have a Linux Box in VirtualBox then start reading how to <a href="/setup-2-ubuntu-boxes-in-virtualbox-to-communicate-with-each-other">setup two Virtual Linux boxes</a>.</p>
<h2 class="title is-4">Virtual Private Server (VPS)</h2>
<p>As for cloud-based VPS, there are several providers. One I use often is <a href="/digitalocean">Digital Ocean</a>.</p>
<p>Visit <a href="/digitalocean">Digital Ocean</a> using this ref-code. If you don't have an account yet, sign up. The ref-code is supposed to give you $10 credit which is plenty as you can run a VPS by the hour and pay only $0.007/hr. I might be mistaken, but as I understand at this point you'll either need to pay $5 via PayPal or provide a Credit Card that will be only charged after you run out of the $10 initial credit.</p>
<p>If you don't have yet, create an <a href="/generate-and-deploy-ssh-private-public-keypair">ssh Private/Public pair</a> on the machine you'll use to run Ansible. (Either your Linux machine or OSX notebook, or the VirtualBox you have created for this.)</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Installing Ansible</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-14T19:40:01Z</updated>
    <pubDate>2018-03-14T19:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/installing-ansible" />
    <id>https://code-maven.com/installing-ansible</id>
    <content type="html"><![CDATA[<p>Before you can start using Ansible you need to install it on the management machine.</p>
<p>Ansible runs on Linux/Unix machines including Mac OSX. (There is no plan to port it to run on MS Windows.) This is the manegement machine.</p>
<p>It can control (manage) both Linux/Unix machines and boxes running MS Windows.</p>
<p>Your notebook or some in-house machine in the company can work. If you only have Windows machines you can install Linux as a virtual
environment. e.g. <a href="/installing-ubuntu-linux-in-virtualbox">Ubuntu Linux in VirtualBox</a>.</p>
<p>One thing you need to remember about security is that the user who can run ansible will have
virtually unlimited control of all your servers. So make sure the account that is set up to run ansible has adequate
authentication set up.</p>
<p>I am setting it up on my Macbook air in my own account. I am going to use my own public key to allow me access to the privileged
user on the servers. I'd better not share my private key with anyone then.</p>
<p>There are a number of ways to <a href="http://docs.ansible.com/ansible/latest/intro_installation.html">install Ansible</a>.</p>
<p>Ansible is written in Python and as I already have Python 3 installed on my machine I went with <code>virtualenv</code> and <code>pip</code> here.</p>
<h3 class="title is-5">Setting up Virtualenv on Ubuntu 17.04</h3>
<p>If you have a bare-bones Ubuntu 17.04 then this is how you set up a virtualenv for python3:</p>
<pre><code>$ sudo apt-get install virtualenv python3-virtualenv python3-pip
$ virtualenv venv --python=python3
</code></pre>
<h3 class="title is-5">Setting up Ansible on Ubuntu 17.04</h3>
<p>Once you have the virtualenv set up you need to activate it and then you can install Ansible using <code>pip</code>.</p>
<pre><code>$ source venv/bin/activate
$ pip install ansible
</code></pre>
<p>After a while I had Ansible installed.</p>
<pre><code>$ ansible --version
</code></pre>
<p>Shows the version number of Ansible. (I have 2.4.1.0) with some additional information.</p>
<pre><code>$ ansible -h
</code></pre>
<p>provides help. It lists many of the parameters we can use with the <code>ansible</code> command.</p>
<p>More to come soon.</p>
<img src="/img/ansible-logo.jpg" alt="Ansible logo">
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Enable passwordless sudo for ansible</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-14T19:30:01Z</updated>
    <pubDate>2018-03-14T19:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/enable-ansible-passwordless-sudo" />
    <id>https://code-maven.com/enable-ansible-passwordless-sudo</id>
    <content type="html"><![CDATA[<p>In order to fully control a remote machine we need to be able to execute command on the remote machines as user <code>root</code>.
There are a number of ways to accomplish this. Each one with a slightly different security implication.</p>
<h2 class="title is-4">Some of our options to execute commands as root</h2>
<p>We can log in to the remote server as user <code>root</code> providing password on each login.</p>
<p>We can log in to the remote server as user <code>root</code> using ssh keys.</p>
<p>We can login as an unprivileged user and then use <code>sudo</code> after providing the password of the user.</p>
<p>We can login as an unprivileged user and then use <code>sudo</code> without providing a password.</p>
<p>We'll try he last two now.</p>
<p>Our inventory.cfg looks like this:</p>
<pre><code>[all]
192.168.56.11
192.168.56.12

[all:vars]
ansible_python_interpreter=/usr/bin/python3
</code></pre>
<p>We are running on our manager machine as user <code>foo</code> and we are accessing the remote machine as user <code>foo</code>.</p>
<p>Let's check if we can use Ansible at all.</p>
<pre><code>$ ansible -i inventory.cfg all -m ping
</code></pre>
<pre><code>192.168.56.11 | SUCCESS =&gt; {
    &quot;changed&quot;: false,
    &quot;ping&quot;: &quot;pong&quot;
}
192.168.56.12 | SUCCESS =&gt; {
    &quot;changed&quot;: false,
    &quot;ping&quot;: &quot;pong&quot;
}
</code></pre>
<h2 class="title is-4">grep ^root: /etc/shadow</h2>
<p>This is not  very sophisticated or useful command. We just want to display the information about user <code>root</code> in the <code>/etch/shadow</code> file using <code>grep</code>. The point is, that only user <code>root</code> has the rights to do this.</p>
<pre><code>$ ansible -i inventory.cfg all -a &quot;grep ^root: /etc/shadow&quot;
</code></pre>
<p>It fails as expected:</p>
<pre><code>192.168.56.12 | FAILED | rc=2 &gt;&gt;
grep: /etc/shadow: Permission deniednon-zero return code

192.168.56.11 | FAILED | rc=2 &gt;&gt;
grep: /etc/shadow: Permission deniednon-zero return code
</code></pre>
<p>Only user <code>root</code> can read the <code>/etc/shadow</code> file.</p>
<h2 class="title is-4">Become user root</h2>
<p>Adding the <code>-b</code> or <code>--become</code> flag tells Ansible to <code>become another user</code> on the remote server.
The &quot;other&quot; can be configured, but defaults to <code>root</code> which is rather convenient.</p>
<pre><code>$ ansible -i inventory.cfg all -a &quot;grep ^root: /etc/shadow&quot;  -b
</code></pre>
<p>It fails now in a different way. It tries to use <code>sudo</code> but fails because <code>sudo</code> needs a password.</p>
<pre><code>192.168.56.12 | FAILED! =&gt; {
    &quot;changed&quot;: false,
    &quot;module_stderr&quot;: &quot;Shared connection to 192.168.56.12 closed.\r\n&quot;,
    &quot;module_stdout&quot;: &quot;sudo: a password is required\r\n&quot;,
    &quot;msg&quot;: &quot;MODULE FAILURE&quot;,
    &quot;rc&quot;: 1
}
192.168.56.11 | FAILED! =&gt; {
    &quot;changed&quot;: false,
    &quot;module_stderr&quot;: &quot;Shared connection to 192.168.56.11 closed.\r\n&quot;,
    &quot;module_stdout&quot;: &quot;sudo: a password is required\r\n&quot;,
    &quot;msg&quot;: &quot;MODULE FAILURE&quot;,
    &quot;rc&quot;: 1
}
</code></pre>
<h2 class="title is-4">Prompt for password</h2>
<p>We can use the <code>-K</code> or <code>--ask-become-pass</code> flag to tell Ansible to ask for the sudo password.</p>
<pre><code>$ ansible -i inventory.cfg all -a &quot;grep ^root: /etc/shadow&quot;  -b -K
</code></pre>
<p>It asks for the SUDO password and then uses that on both machines. I guess if the passwords were different on the two machines then it will notice this and ask for the other password as well. I have never tried that.</p>
<pre><code>SUDO password:
192.168.56.11 | SUCCESS | rc=0 &gt;&gt;
root:!:17596:0:99999:7:::

192.168.56.12 | SUCCESS | rc=0 &gt;&gt;
root:!:17596:0:99999:7:::
</code></pre>
<h2 class="title is-4">Allow passwordless sudo</h2>
<p>Telling ansible ask for the password has the security advantage that only people who know what is the password can execute code
but it can be a bit inconvenient on the long run.</p>
<p>Instead we can configure the the remote user we use to be able to execute all, or certain commands using <code>sudo</code> even without supplying a password. In this case we need to protect the user account of the manager machine that has its public ssh-key installed on the remote server. Anyone who can access this machine would be able to control the remote servers.</p>
<p>Who can run <code>sudo</code> command, what are theses command and whether password is required is controlled in the <code>/etc/suduers</code> file. It can be edited manually using the <code>visudo</code> command or we can ask Ansible to edit it. You can also edit the file with any editor, but if you save an incorrectly formatted version, you can easily lock yourself out from user root. Hence it is strongly recommended that you use the <code>visudo</code> command that will validate the syntax of the file before you save it.</p>
<h3 class="title is-5">Manually editing the sudoers</h3>
<p><code>ssh</code> to the remote server.</p>
<pre><code>$ ssh foo@192.168.56.11
</code></pre>
<p>On the remote server run:</p>
<pre><code>$ sudo visudo
</code></pre>
<p>It will ask for your password and then open the default editor which happens to be <a href="/nano">nano</a> these days.
The default version of file looks like this:</p>
<pre><code>#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path=&quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin&quot;

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root	ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on &quot;#include&quot; directives:

#includedir /etc/sudoers.d
</code></pre>
<p>We need to edit the line</p>
<pre><code>%sudo   ALL=(ALL:ALL) ALL
</code></pre>
<p>and look like this:</p>
<pre><code>%sudo  ALL=(ALL:ALL) NOPASSWD: ALL
</code></pre>
<p>We can save the file and exit.</p>
<p>In order to verify that it works properly log out from the server (e.g. type <code>exit</code> or press <code>Ctrl-d</code>.
Then ssh to the server again and run</p>
<pre><code>sudo grep root /etc/shadow
</code></pre>
<p>We needed to logout and login again for the verification because normally even if sudo requires a password it retains the access rights for a few minutes or until you log out. So we wanted to make sure we can use <code>sudo</code> because of the change in the <code>sudoers</code> file and not because of this grace period.</p>
<p>We can now log out again and on the management machine run the ansible command again with <code>-b</code> but without <code>-K</code></p>
<pre><code>$ ansible -i inventory.cfg all -a &quot;grep ^root: /etc/shadow&quot;  -b
</code></pre>
<p>The result looks promising:</p>
<pre><code>192.168.56.12 | FAILED! =&gt; {
    &quot;changed&quot;: false,
    &quot;module_stderr&quot;: &quot;Shared connection to 192.168.56.12 closed.\r\n&quot;,
    &quot;module_stdout&quot;: &quot;sudo: a password is required\r\n&quot;,
    &quot;msg&quot;: &quot;MODULE FAILURE&quot;,
    &quot;rc&quot;: 1
}
192.168.56.11 | SUCCESS | rc=0 &gt;&gt;
root:!:17596:0:99999:7:::
</code></pre>
<p>One machine where we changed the <code>sudoers</code> file worked as expected, the other one without the passwordless access
failed as expected.</p>
<p>(We could use the <code>-K</code> and then it would ask for a password again, but instead of that we'd like to allow passwordless
<code>sudo</code> commands on the other machine as well.</p>
<h2 class="title is-4">Ansible playbook to set passwordless sudo</h2>
<p>This is the <code>set_sudoer.yml</code> file.</p>
<pre><code>---
- hosts: all
  tasks:
    - lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: 'visudo -cf %s'
</code></pre>
<p>It says: work on the file in the given <code>path</code>.
Replace the line matched by <code>regexp</code> with the string in <code>line</code>.
Before saving the file run the <code>validate</code> command to verify that format is correct.</p>
<p>It will match the following line:</p>
<pre><code>%sudo   ALL=(ALL:ALL) ALL
</code></pre>
<p>and replace it with this line:</p>
<pre><code>%sudo  ALL=(ALL:ALL) NOPASSWD: ALL
</code></pre>
<p>We can run this with the following command:</p>
<pre><code>$ ansible-playbook -i inventory.cfg --limit 192.168.56.12 set_sudoer.yml -b -K
</code></pre>
<ul>
<li>We only run it on the selected host.</li>
<li>We provide the <code>-b</code> as we need to become <code>root</code> for this operation.</li>
<li>We also supply <code>-K</code> because sudo still requires password.</li>
</ul>
<p>The output looks like this:</p>
<pre><code>SUDO password:

PLAY [all] ****************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************
ok: [192.168.56.12]

TASK [lineinfile] *********************************************************************************************************************
changed: [192.168.56.12]

PLAY RECAP ****************************************************************************************************************************
192.168.56.12              : ok=2    changed=1    unreachable=0    failed=0
</code></pre>
<p>Once this is done, we can run the previous command without providing a password and it will run on both servers:</p>
<pre><code>$ ansible -i inventory.cfg all -a &quot;grep ^root: /etc/shadow&quot;  -b
</code></pre>
<pre><code>192.168.56.12 | SUCCESS | rc=0 &gt;&gt;
root:!:17596:0:99999:7:::

192.168.56.11 | SUCCESS | rc=0 &gt;&gt;
root:!:17596:0:99999:7:::
</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>Having passwordless access is great for automation, but you need to be aware of the security implications we discussed above.</p>
<h2 class="title is-4">Comments</h2>
<p>This enables passwordless sudo for all accounts for all commands.</p>
<p>Surely it would be better to follow the recommendation in the /etc/sudoers file and use the lineinfile module to create a file, say, /etc/sudoers.d/ansible containing a line something like (untested)</p>
<p>foo ALL = (root:root) NOPASSWD: ALL</p>
<hr />
<p>I tried this, using 'ansible' instead of 'foo', but Ansible would still says it required a password. I had also made the 'ansible' user usable by <em>my</em> username without password, by using:</p>
<pre><code>- name: Get the username running the deploy
local_action: command whoami
register: username
become: false

- name: Allow using this user without password
lineinfile:
dest: /etc/sudoers.d/ansible
state: present
regexp: &quot;^{{ username.stdout }}&quot;
line: &quot;{{ username.stdout }} ALL=(ansible) NOPASSWD: ALL&quot;
validate: 'visudo -cf %s'
</code></pre>
<p>Works on the command line, not in Ansible...</p>
<hr />
<p>%sudo ALL=(ALL:ALL) NOPASSWD: ALL</p>
<p>should be</p>
<p>%sudo ALL=(ALL:ALL) NOPASSWD:ALL</p>
<p>If you're not careful, that extra space just after <code>NOPASSWD:</code> will ruin your system like it did mine (even when using visudo which was unexpected)</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ansible on Ubuntu in VirtualBox environment - using Python 3</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-14T11:30:01Z</updated>
    <pubDate>2018-03-14T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ansible-on-ubuntu-in-virtual-box-environment" />
    <id>https://code-maven.com/ansible-on-ubuntu-in-virtual-box-environment</id>
    <content type="html"><![CDATA[<p>In this article we'll set up Ansible on our new Ubuntu-based managers machines and will use Ansible to access (ping) a remote machine that is also bare-bones Ubuntu 17.04.</p>
<p>Set up two or more VirtualBoxes using Ubuntu. See the <a href="/linux">Linux series</a> for step-by-step instructions.
Including setting up ssh key on <code>ubu-main</code> and copying it over to <code>ubu-box-1</code> so we can freely ssh
from <code>ubu-main</code> to <code>ubu-box-1</code>.</p>
<p><code>ubu-main</code> at 192.168.56.2 will be the box we use for management.</p>
<p><code>ubu-box-1</code> at 192.168.56.11 will be one of the hosts we would like to manage.</p>
<p>Log in to <code>ubu-main</code> and <a href="/ansible">install Ansible</a>.</p>
<h2 class="title is-4">Enable Ansible</h2>
<p>From now on every time you would like to run ansible you'll log in to <code>ubu-main</code> and you'll have to load the Python virtualenv. It can be done by a simple command:</p>
<pre><code>$ source venv/bin/activate
</code></pre>
<p>You don't need to run any of the other command we ran earlier, as those installations are all in this virtual environment.</p>
<p>In order to improve your work-environment you could also add the above line to the end of the <code>.bashrc</code> file in your home directory.</p>
<h2 class="title is-4">Ping the host using ICMP</h2>
<p>Given that we can already ssh into <code>ubu-box-1</code> this a bit unnecessary, but for the methodology, let's use the command line <code>ping</code> program to see if the &quot;remote&quot; host is accessible on the IP level: (Stop with Ctrl-C)</p>
<pre><code>$ ping 192.168.56.11
PING 192.168.56.11 (192.168.56.11) 56(84) bytes of data.
64 bytes from 192.168.56.11: icmp_seq=1 ttl=64 time=0.370 ms
64 bytes from 192.168.56.11: icmp_seq=2 ttl=64 time=0.991 ms
64 bytes from 192.168.56.11: icmp_seq=3 ttl=64 time=0.976 ms
^C
--- 192.168.56.11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2026ms
rtt min/avg/max/mdev = 0.370/0.779/0.991/0.289 ms
</code></pre>
<p>Just to show you how does it look like when the remote machine is not reachable with the command line <code>ping</code> I tried to ping another IP that is not in use. Again Ctr-C stops it.</p>
<pre><code>$ ping 192.168.56.12

PING 192.168.56.12 (192.168.56.12) 56(84) bytes of data.
From 192.168.56.2 icmp_seq=1 Destination Host Unreachable
From 192.168.56.2 icmp_seq=2 Destination Host Unreachable
From 192.168.56.2 icmp_seq=3 Destination Host Unreachable
^C
--- 192.168.56.12 ping statistics ---
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3057ms
pipe 4
</code></pre>
<h2 class="title is-4">Ping the hosts using Ansible</h2>
<p>Once we have Ansible installed, and we checked that it can be executed running</p>
<pre><code>$ ansible --version

ansible 2.4.3.0
  config file = None
  configured module search path = ['/home/foo/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/foo/venv/lib/python3.6/site-packages/ansible
  executable location = /home/foo/venv/bin/ansible
  python version = 3.6.3 (default, Oct  3 2017, 21:45:48) [GCC 7.2.0]
</code></pre>
<p>the first thing to do is to check if we can reach the host(s) by Ansible.</p>
<p>We prepare a configuration file that will list our &quot;inventory&quot;, the list of all the hosts we are managing.</p>
<p><code>inventory.cfg</code> looks like this:</p>
<pre><code>[all]
192.168.56.11
</code></pre>
<p>Now we can ping &quot;all&quot; the machines in our inventory by running:</p>
<pre><code>$ ansible -i inventory.cfg all -m ping
</code></pre>
<pre><code>192.168.56.11 | FAILED! =&gt; {
    &quot;changed&quot;: false,
    &quot;module_stderr&quot;: &quot;Shared connection to 192.168.56.11 closed.\r\n&quot;,
    &quot;module_stdout&quot;: &quot;/bin/sh: 1: /usr/bin/python: not found\r\n&quot;,
    &quot;msg&quot;: &quot;MODULE FAILURE&quot;,
    &quot;rc&quot;: 0
}
</code></pre>
<p>The <code>ping</code> module of Ansible is different from the <code>ping</code> command. It attempts to connect to the remote machines using <code>ssh</code> and then it tries to check if it will be able to execute code on the remote machines.</p>
<p>Our attempt failed because Ansible uses Python 2 to be installed on the remote machines in order to work and Ubuntu 17.04 comes with Python 3 only.</p>
<h2 class="title is-4">Tell Ansible to use Python 3</h2>
<p>Starting from version 2.2.0 of Ansible you can ask it to use Python 3 on the remote machine.</p>
<p>You can do it on the command line, but then you'll have to do it every time you run ansible:</p>
<pre><code>$ ansible -i inventory.cfg all -m ping -e 'ansible_python_interpreter=/usr/bin/python3'
</code></pre>
<p>You can do it per machine in the inventory file:</p>
<pre><code>[all]
192.168.56.11 ansible_python_interpreter=/usr/bin/python3
</code></pre>
<p>or you can do it for a group of machines in the inventory file:</p>
<pre><code>[all]
192.168.56.11

[all:vars]
ansible_python_interpreter=/usr/bin/python3
</code></pre>
<h2 class="title is-4">Install Python 2 on the hosts</h2>
<p>Alternatively you could install Python 2 on each host and we could do it either manually or using Ansible. Here you can see how to
do it manually, if that's what you'd like to do.</p>
<p>Install Python 2 on the remote host manually: ssh to remote host and then run <code>sudo apt-get install -y python</code>.
This time I've included the full prompt to make it easier to see on which machine do I executed each command:</p>
<pre><code>foo@ubu-main:~$ ssh foo@192.168.56.11
foo@ubu-box-1:~$ sudo apt-get install -y python
...
foo@ubu-box-1:~$ exit
</code></pre>
<p>If we try to ping now it should be successful:</p>
<pre><code>$ ansible -i inventory.cfg all -m ping

192.168.56.11 | SUCCESS =&gt; {
    &quot;changed&quot;: false,
    &quot;ping&quot;: &quot;pong&quot;
}
</code></pre>
<h2 class="title is-4">Remove Python 2</h2>
<p>If you'd like to experiment with this, you can remove Python 2 manually with the following commands:</p>
<pre><code>$ sudo apt-get remove --purge  python
$ sudo apt autoremove
</code></pre>
<p>You can check the availability of Python 2 by running:</p>
<pre><code>$ python --version
-bash: /usr/bin/python: No such file or directory
</code></pre>
<p>as opposed to</p>
<pre><code>$ python --version
Python 2.7.14
</code></pre>
<p>when Python 2 is installed.</p>
<p>Then you can see if your process installing Python 2 works.</p>
<h2 class="title is-4">Ping with Ansible successful</h2>
<p>In any case, you need to be able to successfully ping the remote host(s) in order to start using Ansible.</p>
<pre><code>$ ansible -i inventory.cfg all -m ping

192.168.56.11 | SUCCESS =&gt; {
    &quot;changed&quot;: false,
    &quot;ping&quot;: &quot;pong&quot;
}
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Setup 2 Ubuntu boxes in VirtualBox to communicate with each other</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-11T17:30:01Z</updated>
    <pubDate>2018-03-11T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/setup-2-ubuntu-boxes-in-virtualbox-to-communicate-with-each-other" />
    <id>https://code-maven.com/setup-2-ubuntu-boxes-in-virtualbox-to-communicate-with-each-other</id>
    <content type="html"><![CDATA[<p>In order to learn about networking and interaction between machines we'll need more than one Linux box.</p>
<p>In order to learn how to use Ansible we also need at least 2 boxes. One that runs Ansible, the manager computer,
and one that is being managed by Ansible. (If we can set up more of these, even better as then we can see how to
configure different machine to do different tasks.) The ideal for some of our examples will be 4 machines.</p>
<p>We are going to set up multiple Virtual Boxes using Ubuntu Server. The default installation
uses 2.3 Gb disk, but it will quickly grow to 3-3.5 Gb. So make sure you have enough space for all the machines.
For 4 machines make sure you have at least 14 Gb space.</p>
<p>BTW the actual disk images are by default in the <code>~/VirtualBox\ VMs/</code> on my Mac. You can check the disk sizes there.</p>
<p>Install a Virtual box using Ubuntu as described in the beginning of the <a href="/linux">Linux series</a>. If you already
have one machine you can use that.</p>
<p>As a default name I used &quot;Foo Bar&quot; and the user &quot;foo&quot;, so the text will assume that. If you use a different username, you'll
have to adjust some strings.</p>
<p><a href="/virtualbox-host-only-network-ssh-to-remote-machine">Configure the host-only network</a>.
The IP of the host machine will be 192.168.56.1.
I used <code>ubuntu-ansible</code> as the hostname of the box I installed.
In the <code>/etc/network/interfaces</code> I set the IP address to be 192.168.56.2.</p>
<p>Once the box is ready, log in and <a href="/upgrade-linux-packages-and-install-new-ones">upgrade it</a>.</p>
<pre><code>$ sudo apt-get update
$ sudo apt-get upgrade
</code></pre>
<p>Once we have one box ready, we can clone it, so we don't have to go over the installation and basic configuration process with each
one.</p>
<p>If you find all this work exhausting, you are right.
Just remember, currently we are doing the initial configuration manually.
Later on we'll be able to automate that part as well.
For now however it might be better for you to do all the steps manually so you better understand them and
you'll be able to experiment with them.</p>
<h2 class="title is-4">Reduce memory allocation</h2>
<p>If our physical computer only has 4 Gb memory then you won't be able to run 4 boxes of 1 Gb each.
If this setup is mostly to experiment with networking and/or Ansible, then we don't need that much memory
for the boxes anyway. So before I cloned the boxes I configured the one I have to have only 256 Mb memory.</p>
<p>For this I had to shut down the linux box. Select the machine in the VirtualBox gui. Click on Setup.
Select the &quot;System&quot; tab, and adjust the memory.</p>
<h2 class="title is-4">Clone the VM</h2>
<p>Shut down the Ubuntu box (<code>sudo shutdown -P now</code> will work well.)</p>
<p>On the VirtualBox management interface select your box, use the right-click <code>Clone</code> menu item.
(If it is disabled, it means your machine is still running.)</p>
<p>Type in a name for the new box. Select <b>Full clone</b>.</p>
<p>The cloning itself will take a minute or more depending on the speed of your hard-disk and the size of the image.</p>
<h2 class="title is-4">Configure machines: hostname, IP address</h2>
<p>From the point of view of the VirtualBox now each machine has a name and each machine has its own disk.</p>
<p>From the inside however these two machines are identical. Same hostname, same IP address.</p>
<p>Boot the newly cloned machine and log in as user &quot;foo&quot;.</p>
<p>Edit the <code>/etc/network/interfaces</code> file and change the IP address.</p>
<pre><code>$ sudo nano /etc/network/interfaces
</code></pre>
<p>Edit  the <code>/etc/hostname</code> file and change the hostname.</p>
<p>Edit  the <code>/etc/hosts</code> file and adjust the hostname there as well.</p>
<p>Then reboot this machine <code>sudo reboot</code>, login again and verify that the
changes took place.</p>
<p>You could actually do this without rebooting the box, (eg. with <code>sudo hostname your-new-name</code>)
but it is cleaner that we do it with a reboot. That verifies that even after reboot the values will be set as we wanted them.</p>
<p>Here is my setup:
I make sure that the VirtualBox name (the one that we can see in the GUI of VirtualBox) and the hostname internally are the same for every machine. That makes it easier to identify them.</p>
<pre><code>Hostname        IP
ubu-main    192.168.56.2 
ubu-box-1   192.168.56.11
ubu-box-2   192.168.56.12
ubu-box-3   192.168.56.13
</code></pre>
<h2 class="title is-4">Verify Networking among the Virtual boxes</h2>
<p>Once you have all the machines configured and checked you can see how the whole system works as a remote system.
From your host machine (your Windows or OSX machine) ssh to the main ubuntu machine using the command line ssh client on OSX:</p>
<pre><code>ssh foo@192.168.56.2
</code></pre>
<p>or Putty on Windows.</p>
<p>Once you logged in to the main machine, check if you can ping the IP address of each one of the other boxes.
Stop it by pressing Ctrl-C:</p>
<pre><code>$ ping 192.168.56.11
ING 192.168.56.11 (192.168.56.11) 56(84) bytes of data.
64 bytes from 192.168.56.11: icmp_seq=1 ttl=64 time=0.806 ms
64 bytes from 192.168.56.11: icmp_seq=2 ttl=64 time=0.448 ms
^C
</code></pre>
<h2 class="title is-4">Enable passwordless ssh</h2>
<p>From now on we are going to work on the main machine only and we'll want to be able to access the boxes using ssh
from the main machine without typing in a password.</p>
<p>First try to ssh:</p>
<pre><code>ssh 192.168.56.11
</code></pre>
<p>It will first ask for a <code>yes</code> and then for a password. As these machines were all cloned from one single machine,
they all have user <code>foo</code> and the same password.</p>
<p>If that ssh worked, then log out (type <code>exit</code> or <code>Ctrl-d</code>).</p>
<p>Then <a href="/generate-and-deploy-ssh-private-public-keypair">create an ssh-key and deploy it on each box.</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Nano the simplest editor for Linux</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-11T13:30:01Z</updated>
    <pubDate>2018-03-11T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/nano" />
    <id>https://code-maven.com/nano</id>
    <content type="html"><![CDATA[<p>If you are serious about working on Linux, especially as a system administrator or DevOps engineer then you'd better
learn <a href="https://www.vim.org/">vim</a> as that is the power editor on Linux. However it has a long and rather steep learning
curve. If you are just getting started with Linux on the command line I'd recommend you first start using Nano, a much simpler
editor that comes installed with Ubuntu and probably with other distributons as well.</p>
<p>I assume you have logged in and you see the prompt:</p>
<p><img src="/img/vb1/linux_login_1.png" alt="" /></p>
<h2 class="title is-4">Create file with Nano</h2>
<p>Type in:</p>
<pre><code>$ nano hello.txt
</code></pre>
<p>This will open a text editor in the terminal showing some control options at the bottom:</p>
<p><img src="/img/vb1/nano-1.png" alt="" /></p>
<p>Type in some text. e.g.</p>
<pre><code>Hello World!
How are You?
</code></pre>
<p>In order to save the document click on <code>Ctrl-o</code> (See &quot;Write Out&quot; at the bottom of the screen.)
It will offer to write the content with the name &quot;hello.txt&quot;.</p>
<p><img src="/img/vb1/nano-2.png" alt="" /></p>
<p>Press ENTER.</p>
<p>The file is now saved. We can quit Nano.
Press <code>Ctrl-X</code> (see at the bottom for the key-bindings).</p>
<p>This will bring us back to the prompt. We can now list the content of the directory using <code>ls</code>.
You'll see something like this:</p>
<p><img src="/img/vb1/nano-3.png" alt="" /></p>
<p>We can also display the content of the file using the <code>cat</code> command:</p>
<p><img src="/img/vb1/nano-4.png" alt="" /></p>
<p>The same way you can edit any other file.</p>
<h2 class="title is-4">Edit file</h2>
<p>You can also edit an existing file.</p>
<p>Just type in</p>
<pre><code>$ nano hello.txt
</code></pre>
<p>again and you'll be back in the editor.</p>
<h2 class="title is-4">Exercises</h2>
<p>Play around with the editor.</p>
<ul>
<li>Create a new file.</li>
<li>Edit an existing file.</li>
<li>Exit and check with <code>cat</code> that the changes were saved.</li>
<li>Edit and existing file, make some changes, but exit without saving. Verify (using cat) that the changes were not saved.</li>
<li>Cut and Paste a line of text. (Paste = Uncut in Nano)</li>
<li>Search for some text in the document.</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Linux</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-11T11:30:01Z</updated>
    <pubDate>2018-03-11T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/linux" />
    <id>https://code-maven.com/linux</id>
    <content type="html"><![CDATA[<p>A Linux mini-series</p>
<ol>
<li><a href="/installing-ubuntu-linux-in-virtualbox">Installing Ubuntu Linux in VirtualBox on top of Windows, Mac, or another Linux system</a></li>
<li><a href="/upgrade-linux-packages-and-install-new-ones">Upgrade Linux packages and install new ones</a></li>
<li><a href="/nano">Nano the simplest editor for Linux</a></li>
<li><a href="/virtualbox-host-only-network-ssh-to-remote-machine">VirtualBox host-only network - ssh to remote machine</a></li>
<li><a href="/setup-2-ubuntu-boxes-in-virtualbox-to-communicate-with-each-other">Setup 2 Ubuntu boxes in VirtualBox to communicate with each other</a></li>
<li><a href="/generate-and-deploy-ssh-private-public-keypair">Generate and deploy ssh private public keypair (ssh-keygen, ssh-copy-id)</a></li>
<li>...</li>
<li><a href="/exercise-linux-as-a-virtual-environment-nginx">exercises</a></li>
</ol>
<img src="/img/vb1/Tux.png" alt="Tux - The logo of Linux (the kernel)" />
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Upgrade Linux packages and install new ones</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-11T11:00:01Z</updated>
    <pubDate>2018-03-11T11:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/upgrade-linux-packages-and-install-new-ones" />
    <id>https://code-maven.com/upgrade-linux-packages-and-install-new-ones</id>
    <content type="html"><![CDATA[<p>Once you <a href="/installing-ubuntu-linux-in-virtualbox">installed Ubuntu in VirtualBox</a> let's now see how
can we install new packages and upgrade the existing ones.</p>
<h2 class="title is-4">Login</h2>
<p>I assume you have <a href="/installing-ubuntu-linux-in-virtualbox">just installed</a> your Ubuntu system,
saw the login screen</p>
<p><img src="/img/vb1/linux_install_3.png" alt="" /></p>
<p>typed in your usernane and password and now you see the Linux terminal with a prompt:</p>
<p><img src="/img/vb1/linux_login_1.png" alt="" /></p>
<p>(You might have a lot more text on the screen above that line, but the prompt is usually recognizable as it ends
with a <code>$</code> character for regular users and the <code>#</code> character for the superuser (administrator) called <code>root</code>.)</p>
<p>At this point you will be able to type in commands.</p>
<p>e.g. <code>ls</code> will list the content of the current directory. In our case it did not show anything as there are
no visible files in the current directory.</p>
<p>The <code>pwd</code> command will print the path to the current directory which is <code>/home/foo</code> in our example.</p>
<p>The <code>whoami</code> command will print the username of the user who is currently logged in to this terminal.</p>
<p><img src="/img/vb1/linux_login_2.png" alt="" /></p>
<p>Let's now discuss another topic and then get back using the command line:</p>
<h2 class="title is-4">Package repositories</h2>
<p>Unlike on MS Windows, in Linux additional software is usually installed from a few central places.
Much like what you are used to on your mobile phone.</p>
<p>On Android you have the Google play store, on Apple products you have the Appstore. They were both modeled after the package-management systems that are used for Linux distributions.</p>
<p>When we <a href="/installing-ubuntu-linux-in-virtualbox">installed Ubuntu</a> we installed a few hundred (maybe thousand) packages. The standard Ubuntu package store contains 10s of thousands of additional packages. Some are libraries, some are servers (e.g. web server, database server), some are desktop applications (e.g. browsers, word processors, spreadsheet tools, games).</p>
<p>Each Linux distribution has its own package stores, but there are two major packaging systems.
The distributions that are derivatives of Debian (e.g. Ubuntu, Mint) use files with <code>deb</code> extension and the <code>apt</code> family of commands to manage them.
Other distributions (RedHat, Fedora, CentOS) use files with <code>rpm</code> extension and the command <code>rpm</code> or <code>yum</code>.</p>
<p>There are probably other commands as well, this is far from a comprehensive overview.</p>
<h2 class="title is-4">Users</h2>
<p>On a Linux system each human user usually has his/her own user account. Applications that provide services usually also have their own user (e.g. MySQL server has a user called mysql). The user system is used to allocate certain rights to individual users or services,
or if you like, to limit the rights of users and services. This is great as it allows us to provide security. e.g. a regular user should not be able to install new software or change the configuration of a web server. Even the web server should not be able to changes it own configuration.</p>
<p>There is also a user called <code>root</code> that can do anything in the system. It can install software, configure web server, add and remove users and set the rights of all the other users.</p>
<p>Even if you are a system administrator who could use the <code>root</code> user, normally you'd use your own Linux user to limit the impact of mistakes. You would only &quot;become root&quot; when it is necessary. In older systems this would mean that you login as user <code>root</code> usually with a command called <code>su</code>.</p>
<p>In modern systems the usual way is to use the <code>sudo</code> command to execute individual commands as user <code>root</code>. This further reduces the chance of us making a fatal mistake while acting as user <code>root</code>.</p>
<p>Normal users cannot use the <code>sudo</code> command, but when you installed Ubuntu, the user you created automatically got the rights to use the <code>sudo</code> command to do anything. Including to create new uses and to give them the right to use <code>sudo</code>.</p>
<h2 class="title is-4">Updating the packages</h2>
<p>Just as for your mobile phone, the Linux distributions also keep updating the packages in the package repository.
There is a big difference though as the Linux distributions usually only update package for security issues and bug fixes
so updating the system with new package usually don't introduce any new problems.</p>
<p>When we installed Ubuntu we used and ISO image that was created a few weeks or months ago. Since then many packages might have been updated in the repository. Let's update them on our box as well.</p>
<p>In Ubuntu we need two steps for this. The first step updates the list of packages available, the second step actually upgrades the packages. Let's update the list:</p>
<pre><code>apt-get update
</code></pre>
<p>The response is this:</p>
<p><img src="/img/vb1/linux_login_3.png" alt="" /></p>
<p>It tried to update the list but failed.</p>
<p>The reason is that tried to create a file in a directory called <code>/var/lib/apt/list</code> but I ran <code>apt-get</code> as my regular user (foo in this case) it did not have the permissions to write there.</p>
<p>We need to use <code>sudo</code> to execute the command:</p>
<pre><code>sudo apt-get update
</code></pre>
<p>First it ask for the password of your user &quot;foo&quot; and then it updates the list of available packages.</p>
<p><img src="/img/vb1/linux_login_4.png" alt="" /></p>
<p>Then we can upgrade the packages using</p>
<pre><code>sudo apt-get upgrade
</code></pre>
<p>Normally this <code>sudo</code> command also asks for your password, but in order to make the system more usable <code>sudo</code> will only ask for them if a certain amount of time has passed since you used it last time.</p>
<p>So if you need to execute several command in a short time-span it won't annoy you by asking the password for every command.</p>
<p>The first output might look like this though it might have a much longer list. In any case, before downloading and installing the
packages it will ask you if you'd want to proceed.</p>
<p><img src="/img/vb1/linux_login_5.png" alt="" /></p>
<p>click on <code>Y</code> and <code>ENTER</code> and the process will continue, download and install all the modules and get to the prompt again:</p>
<p><img src="/img/vb1/linux_login_6.png" alt="" /></p>
<h2 class="title is-4">Installing new software</h2>
<p>In order to install a new package, eg. the package called <code>ssh</code> you need to type:</p>
<pre><code>sudo apt-get install ssh
</code></pre>
<p>This will ask you if you really want to install it and if you say yes then it will install the package and all its dependencies.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Installing Ubuntu Linux in VirtualBox on top of Windows, Mac, or another Linux system</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-09T08:30:01Z</updated>
    <pubDate>2018-03-09T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/installing-ubuntu-linux-in-virtualbox" />
    <id>https://code-maven.com/installing-ubuntu-linux-in-virtualbox</id>
    <content type="html"><![CDATA[<p>There are many ways to get started if you'd like to experiment with Linux. In this article I'm going to explain one using VirtualBox on top of an MS Windows or Mac OSX system. It could also be used on top of an already existing Linux installation. For experimentation it might be better to use this than the Operating System you already have on your computer.</p>
<p>It could also run on Solaris, but who has Solaris on their notebook or desktop computer.</p>
<p>This method is not the simplest, but it will make it easier to understand the system and other options (e.g. <a href="/vagrant-and-virtualbox-on-ubuntu-1710">Vagrant</a> uses this process behind the scenes.</p>
<p>The installation and all the setup can take 1-2 hours. Much shorter when you do it for a second time.</p>
<h2 class="title is-4">What is Linux, what is Ubuntu</h2>
<p>A very quick recap:
On one hand Linux officially refers to the &quot;Linux kernel&quot; which is the core of what makes a computer work for you.
On the other hand most people use the word &quot;Linux&quot; to describe a &quot;Linux Distribution&quot; that includes 10s of thousands of programs, including the Linux kernel. A &quot;distribution&quot; is a package in which some team has collected much useful software: editors, games, databases, web servers, etc. along with of course the kernel.</p>
<p>There are many distributions; <a href="https://distrowatch.com/">DistroWatch</a> has a list of the &quot;top 100&quot;. In this article we are going to use <a href="https://www.ubuntu.com/">Ubuntu</a>, one of the most popular distributions.</p>
<img src="/img/vb1/Tux.png" alt="Tux - The logo of Linux (the kernel)" />
<h2 class="title is-4">Our steps</h2>
<ol>
1. Download the ISO image of [Ubuntu Server](https://www.ubuntu.com/)
1. Download, install, and configure [VirtualBox](https://www.virtualbox.org/)
</ol>
<h2 class="title is-4">Download Ubuntu Server ISO image</h2>
<p>Visit <a href="https://www.ubuntu.com/">Ubuntu Server</a> and specifically the
<a href="https://www.ubuntu.com/download/server">Ubuntu server download</a> page.
Select the most recent one. At the time of this writing it is <strong>Ubuntu Server 17.10.1</strong>
because it was released in 2017 October. (The 1 is just a sub-release number, not the date.)</p>
<p>An ISO image is a single file that looks like a CD-rom from the inside. They can be burned on physical CDs
or can be used by other software (e.g. VirtualBox) to simulate a real CD.</p>
<p>We'll use the downloaded file in a minute. While we are waiting for it to download, let's do something else:</p>
<h2 class="title is-4">VirtualBox</h2>
<p><a href="https://www.virtualbox.org/">VirtualBox</a> is an application that can run on MS Windows, Mac OSX, or Linux
to create Virtual computers. From the inside a virtual computer looks like any other computer.
It will have some memory, CPUs, disk(s), a CD player, a video card with some memory, and one or more network cards. Whatever you decide.
The Operating System installed in it, which we'll refer to as the <strong>guest</strong>, won't really know it is not running on real hardware.</p>
<p>From the point of view of your operating system, the one that you already have on your computer (Most likely some version of MS Windowsor Mac OSX) it is just a directory with a few files in it.</p>
<p>When your guest operating system is running it is allocated a certain amount of memory, CPU, etc. just like any other application on your system. If you turn off your guest operating system, then all that is freed up and it will only take up space on your hard-disk.</p>
<p>You can remove those files any time, but then you will lose your installation.</p>
<h2 class="title is-4">Download and Install VirtualBox</h2>
<p>Visit <a href="https://www.virtualbox.org/">VirtualBox</a> and click on the big blue button to get to the <a href="https://www.virtualbox.org/wiki/Downloads">Virtualbox download</a> page. Select the latest version (for me it was VirtualBox 5.2.8) for your host Operating System. So probably Windows or OSX.</p>
<p>It will download an <code>exe</code> file on Windows or <code>dmg</code> file on OSX. Once the download ends, run these programs and agree to everything you usually agree to when you install a program. It is the standard Windows and OSX installation process. Nothing fancy.</p>
<h2 class="title is-4">Configure VirtualBox</h2>
<p>A small warning: the different versions of VirtualBox have slightly different UIs. Mac OSX and MS Windows versions also differ from each other. The screenshots you see here are from Mac OSX. Most of the screenshots were taken by <a href="https://www.linkedin.com/in/yonitgruber/">Yonit Gruber-Hazani</a> for our <a href="http://devops-workshops.code-maven.com/">DevOps Workshops</a>. In your version they might look slightly different.</p>
<h2 class="title is-4">Open VirtualBox - Press the &quot;new&quot; button on the left</h2>
<p><img src="/img/vb1/virtualbox_1.png" alt="" /></p>
<h2 class="title is-4">Type in any name</h2>
<p>If the name starts with &quot;ubu&quot; it will setup the type to Linux and the version to Ubuntu 64-bit automatically.
If you go with a totally different name (e.g. foobar), then you can select the <code>Type</code> and <code>Version</code> yourself.</p>
<p>Click on Continue.</p>
<p><img src="/img/vb1/virtualbox_2.png" alt="" /></p>
<h2 class="title is-4">Continue the setup with the values VirtualBox is suggesting for you.</h2>
<p>You should not worry about the exact values. Most of these can be changed later on and it is for your experimentation anyway.
So in the worst case you go over the installation again and learn it even better.</p>
<p>Remember that what your guest operating system will see as a &quot;hard disk&quot; is a single file on your host operating system.</p>
<ul>
<li>Memory size: 1024 Mb. If you are tight on memory in your computer, you can go with as low as 256 Mb.</li>
<li>Hard disk: Create a virtual hard disk now. Recommended size is 10 Gb. (It will not really take up that much space. See next entries.)</li>
<li>Hard disk file type: VDI (VirtualBox Disk Image).</li>
<li>Storage on physical hard disk: Dynamically allocated. (So the disk will grow as you need it.)</li>
<li>File location and size: <code>ubuntu</code> is fine. 10 Gb.</li>
</ul>
<p><img src="/img/vb1/virtualbox_3.png" alt="" /></p>
<p>When you are done you'll be back to the opening screen of VirtualBox and you'll see your box listed on the left hand side.
In this screenshot you see 3 boxes:</p>
<p><img src="/img/vb1/virtualbox_3_2.png" alt="" /></p>
<h2 class="title is-4">Insert the CD in the virutal CD driver of VirtualBox</h2>
<p>You can now check the <code>Settings</code> of your box where you can change most of the parameters. (Don't do that just yet :).</p>
<p>If this was real hardware you'd have a physical CD-rom and you'd want to instert it in the CD drive to boot from it. As our machine is virtual, and as we only have an ISO image (has the download finished by now?) we do this in software. We make a small change in the configuration of our VirtualBox image to simulate a CD in the drive.</p>
<ol>
1. Right-click on the icon of your new server and select "Settings".
1. Select the "Storage" section.
1. Click on the "empty" CD icon and select the Ubuntu .iso file you have downloaded before.
1. Save this setup.
<p><img src="/img/vb1/virtualbox_4.png" alt="" /></p>
<p>After you save it you can click on &quot;Start&quot; to launch the new Linux machine.</p>
<h2 class="title is-4">Install Ubuntu</h2>
<p>Once you click on the &quot;Start&quot; button of your VirtualBox image, it will &quot;turn on the computer&quot;.
As with real hardware it will look for a storage device that can be booted. The first one it checks is the CD drive.
(The sequence is usually configured in the BIOS of the computer.)
As we &quot;inserted&quot; our CD in the drive the machine will find it and start to boot from it. The following will step you
through the installation process.</p>
<ol>
<li>Start the installation of Ubuntu - Select the defaults.</li>
<li>Your preferred language: English.</li>
<li>&quot;Install Ubuntu Server&quot;.</li>
<li>Select a language - English.</li>
<li>Your location: &quot;United States&quot;.</li>
<li>Detect keyboard?  No.</li>
<li>Configure the keyboards: English (US)</li>
<li>Keyboard layout: English (US)</li>
</ol>
<p>When you get to the hostname section choose whatever you like. &quot;ubuntu&quot; is fine for this installation.</p>
<p><img src="/img/vb1/linux_install_1.png" alt="" /></p>
<ol>
<li>Type in your full name.</li>
<li>Select a username for yourself.</li>
<li>Type in a good password. (twice)</li>
<li>Home directory encryption: No</li>
<li>Timezone (it decided Asia/Jerusalem for me): Yes</li>
<li>Partition disks: select &quot;Guided - use entire disk&quot;  (no LVM)</li>
<li>SCSI3 ...</li>
<li>Write the changes to disks?  YES!!!!</li>
<li>...</li>
<li>Configure the package manager proxy (leave it empty)</li>
<li>...</li>
<li>Upgrades of the system: &quot;No automatic updates&quot;</li>
<li>Software selection: don't select anything now.</li>
<li>...</li>
<li>Install the GRUB boot loader on a hard disk - YES</li>
<li>...</li>
</ol>
<p>When the installation is complete, it will unmount the Ubuntu image we setup at the beginning.
Continue to reboot:</p>
<p><img src="/img/vb1/linux_install_2.png" alt="" /></p>
<h2 class="title is-4">Linux console login screen</h2>
<p>When you are done installing after the reboot the host screen should look like this:</p>
<p><img src="/img/vb1/linux_install_3.png" alt="" /></p>
<p>Type in your username and password. You should see a prompt now.</p>
<p>That's it. You have a working Ubuntu Linux server in a VirtualBox image running on your personal computer.</p>
<p>In the next article we'll continue with some experimentation, but if you are familiar with Linux you can already start using it.</p>
<p>One thing I'd mention here is how to <strong>turn off the machine</strong>.</p>
<p>Type in (without the '$' that just represents the prompt in our example:</p>
<pre><code>$ sudo shutdown -P now
</code></pre>
<p>It will prompt you for your password. Once you type it in it will shut down the Linux server and then power off your VirtualBox image.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Linux as a Virtual Environment - install + nginx</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-08T18:30:01Z</updated>
    <pubDate>2018-03-08T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-linux-as-a-virtual-environment-nginx" />
    <id>https://code-maven.com/exercise-linux-as-a-virtual-environment-nginx</id>
    <content type="html"><![CDATA[<p>These exercises were given to the participants of the <a href="http://devops-workshops.code-maven.com/">DevOps Workshop</a> on using Linux as a Virtual OS on Windows (or Mac or another Linux).</p>
<p>A few exercises that you could do to practice what we have learned during the workshop.
Some will go way beyond it and make you learn a lot more about using Linux on the command line.</p>
<ol>
<li>Set up another Virtual Box and Install Ubuntu. This time use a different IP address.</li>
<li>Make sure you can ping the machine from your host machine (Your Windows or OSX machine)</li>
<li>Install the ssh server and check that you can connect to the guest machine using Putty or some other ssh client.</li>
<li>Install Nginx on this new machine</li>
<li>Check if you can visit the page using your browser on your host machine</li>
<li>Edit the default html file to show your name instead, or in addition to the default text</li>
<li>Check out what kind of options does the &quot;ls&quot; command have, experiment with it.</li>
<li>Is &quot;ls&quot; already an &quot;alias&quot; in your computer?</li>
<li>Read the manual of ls by typing in &quot;man ls&quot; You can use space to advanced in the manual. You can use &quot;q&quot; to quit.</li>
<li>Once you find a flag combination that you like create an alias so whenever you type a single &quot;l&quot; it will execute &quot;ls&quot; with your favorite flags.</li>
<li>Make the above alias permanent in your shell. (Try by logging in in another putty session and check if the new l alias is available there too!)</li>
<li>Create a file called workshop.txt add some notes to it.</li>
</ol>
<p>So far is basically the same as we had during the workshop. Use the <a href="http://code-maven.com/ws1">slides</a> as your guide.</p>
<h2 class="title is-4">Additional tasks</h2>
<ol>
<li>Create a new file called a.txt with &quot;hello&quot; in it.</li>
<li>Create a new file called b.txt  with &quot;world&quot; in it.</li>
<li>Rename a.txt to be b.txt (using mv) observe that Linux does not ask for confirmation when you overwrite a file.</li>
<li>Find out how to convince mv to ask for permission before overwriting a file.</li>
<li>Try the above with &quot;cp&quot; that stand for copy.</li>
</ol>
<h2 class="title is-4">More</h2>
<ol>
<li>
<p>Create a sub-directory in your home directory called &quot;web&quot;.</p>
</li>
<li>
<p>Inside the &quot;web&quot; directory create a file called &quot;index.html&quot; with some content.</p>
</li>
<li>
<p>Find out where where is the default configuration file of nginx (hint: it was in the slides) and change it so that the default directory will be the &quot;web&quot; sub-directory of home directory. (how do you know the full path to the &quot;web&quot; directory?</p>
</li>
<li>
<p>reload the configuration file of Nginx by running <code>sudo service nginx reload</code>.</p>
</li>
<li>
<p>Reload your browser and check if the new page is from the &quot;web&quot; directory.</p>
</li>
<li>
<p>If you managed to do this, you can now create additional files in this directory without root privileges.</p>
</li>
</ol>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Getting Started with Ansible managing CentOS on Digital Ocean</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-07T16:00:01Z</updated>
    <pubDate>2018-03-07T16:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/getting-started-with-ansible-centos" />
    <id>https://code-maven.com/getting-started-with-ansible-centos</id>
    <content type="html"><![CDATA[<p>In this example we'll take a freshly installed Linux box running CentOS 7.4 on a
<a href="/digitalocean">Digital Ocean droplet</a> and use <a href="/ansible">Ansible</a> to make basic configurations.</p>
<p>I assume that you already have <a href="/ansible">Ansible installed</a> on your desktop/notebook, whatever machine is
in front of you. If not, check out the linked article.</p>
<h2 class="title is-4">Create the host machine on Digital Ocean</h2>
<p>For this article I've created the host machine manually.</p>
<p>Visit <a href="/digitalocean">Digital Ocean</a>, sign up if you don't have an account yet. (Using that link you are supposed to get $10 credit).</p>
<p>If you have not done so yet, <a href="/generate-and-deploy-ssh-private-public-keypair">Create an ssh keypair</a> and upload the public key under the &quot;SSH keys&quot; section of the <a href="https://cloud.digitalocean.com/settings/security">Security</a> of your <a href="https://cloud.digitalocean.com/settings/profile">Profile</a>. This will be useful as this will allow you to connect to the remote host without providing a password.</p>
<p>Now, in order to create your first Droplet, visit the <a href="https://cloud.digitalocean.com/droplets">list of droplets</a> and click on the &quot;Create&quot; button and select &quot;Droplets&quot;.</p>
<ol>
<li>Select <code>CentOS 7.4 64 bit</code> as that's what we are checking out now. For size select the smallest. Even that is way to big for our needs.</li>
<li>For <code>datacenter</code> select whatever you like. I usually just select New York 1.</li>
<li>&quot;Select additional options&quot; can be left alone for now.</li>
<li>At &quot;Add your SSH keys&quot; you should see the SSH key you added earlier. Select the checkbox next to it.</li>
<li>Make sure you are asking for 1 Droplet.</li>
<li>The hostname can be anything now. Even the one they offer.</li>
<li>Click &quot;Create&quot;.</li>
</ol>
<p>After about 30 second your Droplet will be ready.</p>
<p><img src="/img/digital-ocean-centos-created.png" alt="" /></p>
<p>Hover over the IP address and a link <code>copy</code> will appear. Click on that to get the IP address in your clipboard.
If you can paste from there in your editor then you can save some extra work.</p>
<p>Create a file called <code>inventory.cfg</code> with the following content, just use the IP address of your Droplet instead of mine:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ansible/centos_first/inventory.cfg">examples/ansible/centos_first/inventory.cfg</a></strong></p>
<pre><code class="language-cfg">[all]
159.65.236.52



</code></pre>
<p>The &quot;inventory file&quot; of Ansible is a single configuration file that holds all the hosts you'd like to manage. The hosts can be grouped in various ways, but now as we only have one machine we created a group called &quot;all&quot;. and put the IP address of the machine in that group.</p>
<h2 class="title is-4">Check if Ansible can access the hosts using Ping</h2>
<p>Let's verify that Ansible can access the machine.
Just as with network you'd use the <a href="https://en.wikipedia.org/wiki/Ping_(networking_utility)">ping</a> command, Ansible also provides a command called &quot;ping&quot; that checks if the remote machine is accessible to Ansible. Instead of sending <a href="https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol">ICMP packets</a>, the ping of Ansible will try to log in to the remote machine using standard SSH.</p>
<p>Run the following command:</p>
<pre><code>$ ansible -i inventory.cfg all -u root -m ping
</code></pre>
<p>It will first ask you to check the authenticity of the host by displaying a message like this:</p>
<pre><code>The authenticity of host '159.65.236.52 (159.65.236.52)' can't be established.
ECDSA key fingerprint is SHA256:5G1v0wAEaqgQVfXrrqYlp4kRFTLJc263H3CvcqUEnlg.
Are you sure you want to continue connecting (yes/no)?
</code></pre>
<p>If you type in <code>yes</code> then it will add the signature of the host to
<code>~/.ssh/known_hosts</code> and it won't bother you again with the same question.</p>
<p>The command will continue and print</p>
<pre><code>159.65.236.52 | SUCCESS =&gt; {
    &quot;changed&quot;: false,
    &quot;failed&quot;: false,
    &quot;ping&quot;: &quot;pong&quot;
}
</code></pre>
<p>If you don't want to check the authenticity of the host you can tell ansible to tell the ssh command using the <code>--ssh-common-args</code> flag to not check the authenticity and to not save the signature in the known_hosts file.</p>
<pre><code>$ ansible -i inventory.cfg all -u root -m ping --ssh-common-args &quot;-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no&quot;
</code></pre>
<p>This will have the same output as the earlier command.</p>
<pre><code>159.65.236.52 | SUCCESS =&gt; {
    &quot;changed&quot;: false,
    &quot;failed&quot;: false,
    &quot;ping&quot;: &quot;pong&quot;
}
</code></pre>
<p>Let's see the details of the command:</p>
<ul>
<li>
<p>The <code>-t inventory.cfg</code> tells ansible the location of the inventory file.</p>
</li>
<li>
<p><code>all</code> selects the host(s) upon which we'd like to act.</p>
</li>
<li>
<p><code>-u root</code> tells Ansible to use user <code>root</code> on the remote server.</p>
</li>
<li>
<p><code>-m ping</code> tells Ansible to execute the &quot;ping&quot; module.</p>
</li>
<li>
<p><code>--ssh-common-args</code> tells ansible to pass the  <code>-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no</code> flags to the ssh command it uses.</p>
</li>
</ul>
<h2 class="title is-4">authenticity of the host</h2>
<p>For the upcoming command I'll assume that when you ran the previous command you ran it without the special parameter for ssh
and then you typed &quot;yes&quot; when the ssh client wanted to save the signature in the &quot;~/.ssh/known_hosts&quot; file. If not run this again:</p>
<pre><code>$ ansible -i inventory.cfg all -u root -m ping
</code></pre>
<p>The next time you run the above command it should work without asking any further questions.</p>
<h2 class="title is-4">Collect information from the remote server</h2>
<p>Ansible has plenty of modules, but it also allows you to execute arbitrary command on the remote machine:</p>
<h2 class="title is-4">Fetch the date of the remote machine</h2>
<pre><code>$ ansible -i inventory.cfg all -u root -a date 
</code></pre>
<pre><code>159.65.236.52 | SUCCESS | rc=0 &gt;&gt;
Wed Mar  7 11:35:52 UTC 2018
</code></pre>
<h2 class="title is-4">Get the hostname of the remote host:</h2>
<pre><code>ansible -i inventory.cfg all -u root -a hostname
</code></pre>
<pre><code>159.65.236.52 | SUCCESS | rc=0 &gt;&gt;
centos-s-1vcpu-1gb-nyc1-01
</code></pre>
<h2 class="title is-4">uptime</h2>
<pre><code>$  ansible -i inventory.cfg all -u root -a uptime
</code></pre>
<pre><code>159.65.236.52 | SUCCESS | rc=0 &gt;&gt;
11:40:38 up 41 min,  1 user,  load average: 0.05, 0.03, 0.05
</code></pre>
<h2 class="title is-4">free memory</h2>
<pre><code>$  ansible -i inventory.cfg all -u root -a free
</code></pre>
<pre><code>159.65.236.52 | SUCCESS | rc=0 &gt;&gt;
              total        used        free      shared  buff/cache   available
Mem:        1016224       83256      780424       13048      152544      767372
Swap:             0           0           0
</code></pre>
<h2 class="title is-4">free memory in megabytes</h2>
<pre><code>$  ansible -i inventory.cfg all -u root -a &quot;free -m&quot;
</code></pre>
<pre><code>159.65.236.52 | SUCCESS | rc=0 &gt;&gt;
              total        used        free      shared  buff/cache   available
Mem:            992          81         761          12         149         749
Swap:             0           0           0
</code></pre>
<h2 class="title is-4">Upgrade everything on the CentOS server</h2>
<p>Usually when you get a new server some of the packages might be already out of date. Some might have had some security fixes.
So updating them to the latest version i usually a good idea.</p>
<pre><code>ansible -i inventory.cfg all -u root -m yum -a &quot;name=* state=latest&quot;
</code></pre>
<p>It will run a long time. Probably several minutes. Hopefully it will end with success with a big blob of output that starts with</p>
<pre><code>159.65.236.52 | SUCCESS =&gt; {
    &quot;changed&quot;: true,
    &quot;failed&quot;: false,
</code></pre>
<p>IF you run the same command again, this time will say everything is up-to-date:</p>
<pre><code>159.65.236.52 | SUCCESS =&gt; {
    &quot;changed&quot;: false,
    &quot;failed&quot;: false,
    &quot;msg&quot;: &quot;&quot;,
    &quot;rc&quot;: 0,
    &quot;results&quot;: [
        &quot;Nothing to do here, all packages are up to date&quot;
    ]
}
</code></pre>
<h2 class="title is-4">Rebooting the CentOS server using Ansible</h2>
<p>We can run the regular <code>shutdown</code> command with some flags:</p>
<pre><code>$  ansible -i inventory.cfg all -u root -a &quot;/sbin/shutdown -r now&quot;
</code></pre>
<p>This command will reboot the server immediately, but you will see an error message. Basically
because Ansible does not have time to properly disconnect before the server shuts down its ssh connection.</p>
<pre><code>159.65.236.52 | UNREACHABLE! =&gt; {
    &quot;changed&quot;: false,
    &quot;msg&quot;: &quot;Failed to connect to the host via ssh: Shared connection to 159.65.236.52 closed.\r\n&quot;,
    &quot;unreachable&quot;: true
}
</code></pre>
<p>You can delay the shutdown by one minutes (it only works with increments of minutes)</p>
<pre><code>$  ansible -i inventory.cfg all -u root -a &quot;/sbin/shutdown -r +1&quot;
</code></pre>
<p>That will return with success and a warning and a minute later the host will reboot itself.</p>
<pre><code> [WARNING]: Module invocation had junk after the JSON data:   Broadcast message from root@centos-s-1vcpu-1gb-nyc1-01 (Wed 2018-03-07
13:46:31 UTC):    The system is going down for reboot at Wed 2018-03-07 13:47:31 UTC!

159.65.236.52 | SUCCESS | rc=0 &gt;&gt;
Shutdown scheduled for Wed 2018-03-07 13:47:31 UTC, use 'shutdown -c' to cancel.
</code></pre>
<p>To avoid that warnings we can even tell the <code>shutdown</code> command to avoid the broadcast:</p>
<pre><code>$  ansible -i inventory.cfg all -u root -a &quot;/sbin/shutdown --no-wall -r +1&quot;
</code></pre>
<p>That looks like the cleanest so far:</p>
<pre><code>159.65.236.52 | SUCCESS | rc=0 &gt;&gt;
Shutdown scheduled for Wed 2018-03-07 14:00:08 UTC, use 'shutdown -c' to cancel.
</code></pre>
<h2 class="title is-4">Conclusion</h2>
<p>That's enough for now. We'll get deeper in an upcoming article.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Generate and deploy ssh private public keypair (ssh-keygen, ssh-copy-id)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-06T14:30:01Z</updated>
    <pubDate>2018-03-06T14:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/generate-and-deploy-ssh-private-public-keypair" />
    <id>https://code-maven.com/generate-and-deploy-ssh-private-public-keypair</id>
    <content type="html"><![CDATA[<p>In order to be able to automatically log in to another computer without the need to provide a password,
the most common solution is to generate an ssh keypair, a private and a public key on the machine from which
we initiate the connection. Copy the public key over to the hosts to which we would like to log in to.</p>
<p>Set the file ownership rights properly.</p>
<h2 class="title is-4">Generate the ssh keypair</h2>
<p>Run the <code>ssh-keygen</code> program on the command line and press ENTER on every question:</p>
<pre><code>$ ssh-keygen
</code></pre>
<p>More or less this is the expected output: (assuming your username is <code>foo</code> and
your home directory is <code>/home/foo</code>.)</p>
<pre><code>Generating public/private rsa key pair.
Enter file in which to save the key (/home/foo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/foo/.ssh/id_rsa.
Your public key has been saved in /home/foo/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:CL+xpn2DJx4P3xddsCWAN2thkFIHKFp9kBr6NHf44Pw foo@ubuntu-ansible
The key's randomart image is:
+---[RSA 2048]----+
|       ..=+=o.   |
|      + = +.= o .|
|    .+ + + o + = |
|    oo+.+ . o . .|
|     o+=S+ . . . |
|      .+o . . .  |
|      *. .   .   |
|     +o=+.E .    |
|    ..o+o...     |
+----[SHA256]-----+
</code></pre>
<p>This generates two files: <code>~/.ssh/id_rsa</code> is the private key. You need to keep it super-safe.
<code>~/.ssh/id_rsa.pub</code> is the public key. This you can distribute to anyone. You can even advertise it
on your site. One, theoretically, cannot compute the private key based on the public key in any reasonable time.</p>
<h2 class="title is-4">Deploy the public key</h2>
<p>Basically you need to take the content of <code>~/.ssh/id_rsa.pub</code> on the manager machine and
append it to the content of <code>~/.ssh/authorized_keys</code> and make sure both the <code>~/.ssh</code> directory
and the <code>~/.ssh/authorized_keys</code> file has very restricted rights allocated:</p>
<pre><code>drwx------ 2 foo foo ... .ssh/
-rw------- 1 foo foo ... .ssh/authorized_keys
</code></pre>
<p>Luckily you don't need to do it manually as there is a command called <code>ssh-copy-id</code> that will do all of that
on your behalf. Of course it will ask you to type in the password of the remote machine as it needs to log-in once
before it copied the public key, but then it creates the necessary directory and file if necessary and appends the
new public key. We just need to provide the IP address of the remote server.</p>
<pre><code>ssh-copy-id 192.168.56.11
</code></pre>
<p>The output looks like this:</p>
<pre><code>/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: &quot;/home/foo/.ssh/id_rsa.pub&quot;
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
foo@192.168.56.11's password:

Number of key(s) added: 1

Now try logging into the machine, with:   &quot;ssh '192.168.56.11'&quot;
and check to make sure that only the key(s) you wanted were added.
</code></pre>
<p>Then you can <code>ssh</code> to the remote machine without providing a password.</p>
<pre><code>$ ssh 192.168.56.11
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ansible</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-03-04T10:30:01Z</updated>
    <pubDate>2018-03-04T10:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ansible" />
    <id>https://code-maven.com/ansible</id>
    <content type="html"><![CDATA[<p><a href="https://www.ansible.com/">Ansible</a> is one of the leading Configuration Management systems.
It allows you to describe the expected state of your servers one-by-one or grouped by their task and then
it ensures all the servers are in the correct state only relying on standard ssh access.</p>
<p>No agent is required on the host. You only need to install Ansible on the computer(s) from which you wish to manage
your servers.</p>
<p>In this series we are going to look at various features of Ansible.</p>
<ol>
<li><a href="/setup-for-learning-ansible">Setup for Learning Ansible </a></li>
<li><a href="/installing-ansible">Installing Ansible</a></li>
<li><a href="/getting-started-with-ansible-centos">Getting Started with Ansible on Mac - managing CentOS on Digital Ocean</a></li>
<li><a href="/ansible-on-ubuntu-in-virtual-box-environment">Ansible on Ubuntu in VirtualBox environment - using Python 3</a></li>
<li><a href="/enable-ansible-passwordless-sudo">Enable passwordless sudo for Ansible</a></li>
<li><a href="/reboot-with-ansible">Reboot using Ansible</a></li>
<li><a href="/waiting-with-ansible-pausing-playbook">Waiting with Ansible, pausing a Playbook</a></li>
<li><a href="/install-and-configure-nginx-using-ansible">Install and configure Nginx using Ansible</a></li>
<li><a href="/installing-perl-and-cpan-modules-using-ansible">Installing Perl and CPAN modules using Ansible</a></li>
<li><a href="/ansible-playbook-print-debugging-statement">Ansible playbook: print debugging statement</a></li>
<li><a href="/ansible-disable-apt-get">Stop and disable apt-get using Ansible</a></li>
<li><a href="/ansible-playbook-uptime-python3">Ansible playbook listing uptime using python3</a></li>
<li><a href="/ansible-playbook-remove-file">Ansible playbook remove file</a></li>
<li><a href="/ansible-playbook-remove-directory">Ansible playbook remove directory</a></li>
</ol>
<p><a href="/img/ansible-logo.jpg">Ansible logo</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Display notification from the Mac command line</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-02-28T10:30:01Z</updated>
    <pubDate>2018-02-28T10:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/display-notification-from-the-mac-command-line" />
    <id>https://code-maven.com/display-notification-from-the-mac-command-line</id>
    <content type="html"><![CDATA[<p>Quite often I run some job on the command line that takes a few minutes. Staring at the terminal waiting for the job to finish is not fun.
Switching to check what's on Facebook I end up wasting an hour looking at pictures of cats and dogs. If I am lucky.</p>
<p>I am trying something new now. I'm trying to send myself an alert whenever a task is done. For this to work first I had to find a way to
send a notification from the command line.</p>
<h2 class="title is-4">The tools</h2>
<p><a href="https://ss64.com/osx/osascript.html">osascript</a> is a tool that comes with Mac that can execute code written in AppleScript, JavaScript
and maybe a few other languages. If the previous link stops working typing <code>man osascript</code> in the Mac Terminal should give you the explanation.</p>
<p><a href="https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/">AppleScript</a> is a scripting language created by Apple. It has a bunch of <a href="https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html">commands</a>. There are a couple of interesting ones, for example: <code>display</code> and <code>say</code>.</p>
<h2 class="title is-4">display</h2>
<p>The <code>display</code> command can send a notification to the standard notification system of Mac that will show a pop-up for a few seconds and that can be listed by clicking on the hamburger icon in the top-right corner of the screen (at the right end of the menu bar).</p>
<p>We could write an AppleScript in a file and use osascript to run the file, but osascript can also execute one-liners where all the commands are on the command-line.
That seems to be more useful at this point.</p>
<h2 class="title is-4">display hello world</h2>
<p>The AppleScript code to send a notification with the text &quot;hello world!&quot; looks like this:</p>
<pre><code>display notification &quot;hello world!&quot;
</code></pre>
<p>In order to run it on the command line we need to wrap that code in single-quotes and use the <code>-e</code> flag of <code>osascript</code>.</p>
<pre><code>osascript -e 'display notification &quot;hello world!&quot;'
</code></pre>
<p>The result is a pop-up like this that shows up in the top right corner of the screen and disappears after about 3 seconds:</p>
<img src="/img/notification_hello_world.png" alt="Notification" />
<p>You can open the Notification center (the hamburger icon in the top right corner of the screen) that will look something like this: (assuming the only notification
you have is the one we just sent.)</p>
<img src="/img/notification_hello_world_in_list.png" alt="Notification" />
<p>You can clear the list of notifications by clicking on the <code>x</code>.</p>
<h2 class="title is-4">display notification with title</h2>
<p>The default title of the notification was &quot;Script Editor&quot;.  We can also set it in the AppleScript command:</p>
<pre><code>display notification &quot;hello world!&quot; with title &quot;This is the title&quot;
</code></pre>
<p>and with <code>osascript</code>:</p>
<pre><code>osascript -e 'display notification &quot;hello world!&quot; with title &quot;This is the title&quot;'
</code></pre>
<p>The result is better:</p>
<img src="/img/notification_hello_world_with_title.png" alt="Notification" />
<h2 class="title is-4">display notification with subtitle</h2>
<p>If we have a title we can also have a subtitle:</p>
<p>The AppleScript command:</p>
<pre><code>display notification &quot;hello world!&quot; with title &quot;Greeting&quot; subtitle &quot;More text&quot;
</code></pre>
<p>With osascript:</p>
<pre><code>osascript -e 'display notification &quot;hello world!&quot; with title &quot;Greeting&quot; subtitle &quot;More text&quot;'
</code></pre>
<p>This is how the result looks like:</p>
<p><img src="/img/notification_hello_world_with_subtitle.png" alt="" /></p>
<h2 class="title is-4">display notification and make sound</h2>
<p>In addition to the visual notification, the <code>display</code> command can also include a sound effect.
The sound can be one of the files in <code>/System/Library/Sounds</code> or in <code>~/Library/Sounds</code>.</p>
<p>The AppleScript command:</p>
<pre><code>display notification &quot;hello world!&quot; with title &quot;Greeting&quot; subtitle &quot;More text&quot; sound name &quot;Submarine&quot;
</code></pre>
<p>executed by <code>osascript</code>:</p>
<pre><code>osascript -e 'display notification &quot;hello world!&quot; with title &quot;Greeting&quot; subtitle &quot;More text&quot; sound name &quot;Submarine&quot;'
</code></pre>
<p>If the name of the sound is incorrect Mac will make an alert sound.</p>
<h2 class="title is-4">Longer text</h2>
<p>If we try to send a longer text:</p>
<pre><code>osascript -e 'display notification &quot;hello world! This is a longer message and we would like to see how is it going to be displayed.&quot; with title &quot;Greeting&quot; subtitle &quot;More text&quot;'
</code></pre>
<p>The pop-up notification will only display the beginning:</p>
<p><img src="/img/notification_longer_message.png" alt="" /></p>
<p>but we can see the full text in the notification center:</p>
<p><img src="/img/notification_longer_message_full_text.png" alt="" /></p>
<h2 class="title is-4">display alert with confirmation request</h2>
<p>There is another way to create a notification using the <code>display alert</code> command. The syntax is a bit different.
The string that comes immediately after the <code>display alert</code> is the title and then one can optionally add a <code>message</code>
parameter with a longer explanation.</p>
<p>the AppleScript command:</p>
<pre><code>display alert &quot;Hello World!&quot; message &quot;longer text can be added in the message field and it will be all shown on the pop-up alert.&quot;
</code></pre>
<p>The <code>osascript</code> wrapped command:</p>
<pre><code>osascript -e 'display alert &quot;Hello World!&quot; message &quot;longer text can be added in the message field and it will be all shown on the pop-up alert.&quot;'
</code></pre>
<p>The result is a pop-up window in the middle of the screen that also stays there till you click on the OK button.</p>
<p><img src="/img/alert_hello_world.png" alt="" /></p>
<p>The alert won't be recorded in the notification center of your Mac.</p>
<h2 class="title is-4">Saying Hello World</h2>
<p>Finally there is also the <code>say</code> command that can vocalize any text you give to it.</p>
<p>The AppleScript command:</p>
<pre><code>say &quot;Hello World!&quot;
</code></pre>
<p>wrapped in <code>osascript</code> on the command line:</p>
<pre><code>osascript -e 'say &quot;Hello World!&quot;'
</code></pre>
<p>This does not have any visual effect, but it is quite surprising when your computer starts to talk to you.</p>
<h2 class="title is-4">Execute after the long-running program</h2>
<p>The whole article was written because I wanted to get some alert after a long-running program ends.
Here we substitute the long-running program with <code>sleep 2</code>. We can then include a call to
<code>osascript</code> or even two calls to <code>osascript</code> to be executed immediately after the
main command (the sleep 2) ends.</p>
<pre><code>sleep 2; osascript -e 'say &quot;Hello World!&quot;'; osascript -e 'display alert &quot;hello world&quot;'
</code></pre>
<p>I put in two ways of notification so I'll hear some text if I am near the computer but does not watch the screen
and I'll get a pop-up that remains on the screen later. So even if I am out of the room when the process ends,
I'll see the pop-up when I return to my computer.</p>
<h2 class="title is-4">Comments</h2>
<p>This is brilliant! Just what I was looking for! :)</p>
<hr />
<h2 class="title is-4">Is there a way to specify a custom icon in the slide out notification? I know other apps have their own custom icons in the notifications side bar on the right of the screen.</h2>
<p>I don't think it's possible, but please share if you've learned how :)</p>
<hr />
<h2 class="title is-4">This is so awesome!!</h2>
<p>Great article. I placed this in an alias to run after long bash processes.</p>
<pre><code>alias notify='osascript -e &quot;display notification \&quot;done!\&quot;&quot;'
</code></pre>
<hr />
<p>On Big Sur there is an additional title showing the process that triggered the banner (I guess). For these examples it is always &quot;SCRIPT EDITOR&quot;. Any way to remove or customize it?</p>
<hr />
<p>Awesome !</p>
<hr />
<h2 class="title is-4">I know I am a bit late to the party here but I can only use &quot;with title&quot; or &quot;with icon&quot; and nothing else after either of those. If I try
osascript -e 'display dialog &quot;Hello world!&quot; with title &quot;title&quot; subtitle &quot;subtitle&quot;'
I get the error message
syntax error: A identifier can’t go after this “&quot;”. (-2740)
Basically putting anything after the initial with parameter gives an error. &quot;with subtitle&quot; also gives an error. So I am left using just &quot;with title&quot; or I can use &quot;with icon&quot;. Anyone have any ideas why this doesn't work? I am on Big Sur.</h2>
<p>Instead of using &quot; use '
I hope it will work ^_^</p>
<hr />
<p>Perfect.</p>
<hr />
<p>It would be nice to add an example of sending the notification of the result of another shell command. for example</p>
<pre><code>echo &quot;hey&quot;|xargs -I {} osascript -e 'display notification &quot;{}&quot;'
</code></pre>
<hr />
<p>THANK YOU!</p>
<hr />
<p>In my Xcode it shows failed to display notification.</p>
<p>caused by: script error: osascript: no such component &quot;JavaScript&quot;.</p>
<p>Any solution for this?</p>
<hr />
<p>Nice insights. Just a further question: is it possible to detect a notification window in order to trigger an Automator workflow?
Something like:
if window &quot;Hello World&quot; from application System Events exists
...
end if</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Vagrant and VirtualBox on Ubuntu 17.10 and CentOS 7</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-02-20T15:30:01Z</updated>
    <pubDate>2018-02-20T15:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/vagrant-and-virtualbox-on-ubuntu-1710" />
    <id>https://code-maven.com/vagrant-and-virtualbox-on-ubuntu-1710</id>
    <content type="html"><![CDATA[<p>I have computer at home with 16Gb memory on which I've installed Ubuntu 17.10. It also has plenty of disk space, so it is going to be much better for experimenting with multi-server setups than my MacBook Air that only has 4Gb memory and 128 Gb SSD storage which is usually full.</p>
<p>While I could certainly sit at that Linux machine as a desktop, I opted to use it mostly to use it as a server and ssh into it.</p>
<p>Now in order to experiment with multiple server setups easily I needed Vagrant and VirtualBox and I wanted to install another Ubuntu as a guest operating system.</p>
<h2 class="title is-4">Which version of Vagrant and VirtualBox?</h2>
<p>I usually prefer to use the packages provided by the OS vendor, that could be installed using the standard package management system.
Unfortunately the version of Vagrant and VirtualBox that are packaged by Ubuntu are old and due to some changes in the web service provided by Hashicorp (the organization behind Vagrant) they don't work any more.</p>
<p>Instead of that I went with the latest and greatest:</p>
<h2 class="title is-4">Install VirtualBox</h2>
<p>Download the latest version of deb file from <a href="https://www.virtualbox.org/wiki/Linux_Downloads">VirtualBox Linux downloads</a> and then run</p>
<pre><code>sudo apt install ./virtualbox-5.2_5.2.6-120293~Ubuntu~zesty_amd64.deb
</code></pre>
<p>Certainly by the time you run this the version and so the name of the file will change.</p>
<h2 class="title is-4">Install Vagrant</h2>
<p>Download the .deb file for Debian from <a href="https://www.vagrantup.com/downloads.html">Vagrant downloads</a> and then run:</p>
<pre><code>sudo apt install ./vagrant_2.0.2_x86_64.deb
</code></pre>
<h2 class="title is-4">Verify the installed versions</h2>
<pre><code>$ virtualbox -h
Oracle VM VirtualBox Manager 5.2.6
...
</code></pre>
<pre><code>$ vagrant -v
Vagrant 2.0.2
</code></pre>
<h2 class="title is-4">Create first Ubuntu-based VirtualBox using Vagrant</h2>
<p>This is actually and older version of Ubuntu. Xenial Xerus is version 16.04 which is an LTS version.</p>
<pre><code>$ mkdir ubuntu
$ cd ubuntu
$ vagrant init ubuntu/xenial64
$ vagrant up
$ vagrant ssh
</code></pre>
<p>That's it. I am inside the Virtualbox.</p>
<p>In order to have everything up to date I also ran:</p>
<pre><code>$ sudo apt-get update
$ sudo apt-get upgrade
</code></pre>
<p>I can exit it using <code>exit</code> and then I can shut down the VirtualBox by running</p>
<pre><code>$ vagrant halt
</code></pre>
<p>Note: The <code>intit</code> command created a file called <code>Vagrantfile</code> that contains
the configuration of the Vagrant image.</p>
<h2 class="title is-4">Install Centos/7 based VirtualBox</h2>
<p>Just to further my experiments I've also created a separate VirtualBox using CentOS 7.</p>
<p>For this I created a second directory as we'll need a separate <code>Vagrantfile</code>.</p>
<pre><code>$ mkdir centos
$ cd centos
$ vagrant init centos/7
$ vagrant up
$ vagrant ssh
</code></pre>
<p>We can update it to the latest pacakges using:</p>
<pre><code>$ yum update
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Micro Training Courses</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-02-13T16:30:01Z</updated>
    <pubDate>2018-02-13T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/training" />
    <id>https://code-maven.com/training</id>
    <content type="html"><![CDATA[<p>Micro Training Courses are 2-4 hours long training sessions. They can be given either as presentation only or in workshop format
with hands-on exercises.</p>
<p>They are an excellent format to introduce your employees to a topic they are not familiar with without the burden and cost
of sending them to a 3-5 days long training course. They will gain the initial push and then they can either learn by themselves
or go on a full-length training course if they feel the topic warrants the investment.</p>
<p>This is also an excellent format to keep your employees growing and ensure they see your organization as one that is
ready to invest in your employees.</p>
<h2 class="title is-4">Topics currently available</h2>
<p>The topics are primarily related to DevOps, test automation, and other development best practices.</p>
<ul>
<li>Linux as a Virtual environment - Getting started with Linux.</li>
<li>Version Control with Git.</li>
<li>How to contribute to an Open Source project using GitHub.</li>
<li>Introduction to testing Python with PyTest.</li>
<li>Web application development with Python Flask.</li>
<li>Introduction to testing Perl scripts and applications.</li>
<li>Setting up Continuous Integration using Travis-CI and Appveyor.</li>
<li>Setting up Continuous Integration using Jenkins.</li>
<li>configuration Management using Ansible.</li>
<li>Setting up a Virtual Private Server in the cloud (on Digital Ocean and Linode)</li>
</ul>
<p>If you are interested in either of these topics, please <a href="https://szabgab.com/contact.html">contact Gabor Szabo</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>DevOps</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-02-11T07:30:01Z</updated>
    <pubDate>2018-02-11T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/devops" />
    <id>https://code-maven.com/devops</id>
    <content type="html"><![CDATA[<p>DevOps is a big field covering many topics with lots of products and services supporting it.</p>
<p>I've tried to put them in categories, but some of the tools could have been placed in more than one
category as they try to provide a solution to several topics.</p>
<h2 class="title is-4">Operating System</h2>
<ul>
<li>
<p><a href="https://www.ubuntu.com/">Ubuntu</a></p>
</li>
<li>
<p><a href="https://www.centos.org/">CentOS</a></p>
</li>
<li>
<p><a href="https://getfedora.org/">Fedora</a></p>
</li>
<li>
<p><a href="https://www.debian.org/">Debian</a></p>
</li>
<li>
<p><a href="https://www.freebsd.org/">FreeBSD</a></p>
</li>
<li>
<p>The <a href="/linux">Linux</a> series provides some introduction.</p>
</li>
</ul>
<h2 class="title is-4">Version Control Systems - Source Control Management</h2>
<ul>
<li>
<p><a href="/git">Git</a></p>
</li>
<li>
<p><a href="https://www.mercurial-scm.org/">Mercurial</a></p>
</li>
<li>
<p><a href="https://subversion.apache.org/">Subversion</a></p>
</li>
<li>
<p><a href="https://www.perforce.com/">Perforce</a></p>
</li>
<li>
<p><a href="https://www.visualstudio.com/tfs/">Team Foundation Server</a></p>
</li>
<li>
<p><a href="https://github.com/">Github</a></p>
</li>
<li>
<p><a href="https://bitbucket.org/">Bitbucket</a></p>
</li>
<li>
<p><a href="https://gogs.io/">Gogs</a></p>
</li>
<li>
<p><a href="https://about.gitlab.com/">GitLab</a></p>
</li>
</ul>
<h2 class="title is-4">Testing Tools and plugins</h2>
<ul>
<li>
<p><a href="http://www.seleniumhq.org/">Selenium</a></p>
</li>
<li>
<p><a href="http://phantomjs.org/">PhantomJS</a></p>
</li>
<li>
<p><a href="https://cucumber.io/">Cucumber</a></p>
</li>
<li>
<p><a href="https://github.com/test-kitchen/test-kitchen">Test Kitche</a></p>
</li>
</ul>
<h2 class="title is-4">Continuous Integration</h2>
<ul>
<li><a href="https://jenkins.io/">Jenkins</a> - the <a href="/jenkins">Jenkins series</a> will cover it.</li>
<li><a href="https://travis-ci.org/">Travis-CI</a></li>
<li><a href="https://www.appveyor.com/">Appveyor</a></li>
<li><a href="https://circleci.com/">Circle CI</a></li>
<li><a href="https://www.shippable.com/">Shippable</a></li>
</ul>
<p><a href="/continuous-integration-systems">Continuous Integration Systems</a>.</p>
<h2 class="title is-4">Configuration Management</h2>
<ul>
<li><a href="https://www.ansible.com/">Ansible</a> - the <a href="/ansible">Ansible series</a> is an introduction</li>
<li><a href="https://cfengine.com/">CFEngine</a></li>
<li><a href="https://www.chef.io/">Chef</a></li>
<li><a href="/docker">Docker</a></li>
<li><a href="https://docs.microsoft.com/en-us/powershell/dsc/overview">PowerShell DSC</a></li>
<li><a href="https://puppet.com/">Puppet</a></li>
<li><a href="https://www.rexify.org/">Rex</a></li>
<li><a href="https://saltstack.com/">SaltStack</a></li>
<li><a href="https://github.com/melezhik/sparrowdo">Sparrowdo</a></li>
</ul>
<p><a href="/configuration-management-tools">Configuration Management Tools</a>.</p>
<h2 class="title is-4">Product Management</h2>
<ul>
<li><a href="https://www.atlassian.com/software/jira">Jira</a></li>
<li><a href="https://basecamp.com/">Basecamp</a></li>
<li><a href="https://www.ca.com/us/company/acquisitions/rally-is-now-ca-technologies.html">Rally</a></li>
<li><a href="https://www.pivotaltracker.com/">Pivotal Tracker</a></li>
<li><a href="https://www.teamwork.com/">Teamwork</a></li>
<li><a href="https://www.changepoint.com/">Changepoint</a> (Daptiv)</li>
<li><a href="https://business.adobe.com/products/workfront/main.html">Adobe Workfront</a></li>
<li><a href="https://www.versionone.com/">Version One</a></li>
<li><a href="https://taiga.io/">Taiga</a></li>
<li><a href="https://waffle.io/">Waffle</a></li>
</ul>
<h2 class="title is-4">Customer Service Desk</h2>
<ul>
<li><a href="https://www.zendesk.com/">Zendesk</a></li>
<li><a href="https://www.zoho.eu/desk/">Zoho desk</a></li>
<li><a href="https://freshdesk.com/">Freshdesk</a></li>
</ul>
<h2 class="title is-4">Scheduling and Incident management</h2>
<ul>
<li><a href="https://www.pagerduty.com/">Pager Duty</a></li>
<li><a href="https://victorops.com/">Victor Ops</a></li>
<li><a href="https://www.opsgenie.com/">OpsGenie</a></li>
</ul>
<h2 class="title is-4">Monitoring</h2>
<ul>
<li><a href="http://truesightpulse.bmc.com/">BMC TrueSight Pulse</a> (was Boundary)</li>
<li><a href="https://www.datadoghq.com/">Data Dog</a></li>
<li><a href="https://www.nagios.org/">Nagios</a></li>
<li><a href="https://stackify.com/">Stackify</a></li>
<li><a href="https://scoutapp.com/">Scout</a></li>
<li><a href="https://www.dynatrace.com/solutions/cloud-native-application-monitoring/">Dynatrace</a> (was Ruxit)</li>
<li><a href="https://rollbar.com/">Rollbar</a></li>
<li><a href="https://www.zabbix.com/">Zabbix</a></li>
<li><a href="https://mmonit.com/monit/">monit</a></li>
</ul>
<h2 class="title is-4">Security Auditing</h2>
<ul>
<li><a href="https://evident.io/">Evident.IO</a></li>
<li><a href="https://www.tripwire.com/">Tripwire</a></li>
<li><a href="https://www.metasploit.com/">Metasploit</a></li>
<li><a href="https://www.rapid7.com/products/nexpose/">Nexpose</a></li>
<li><a href="https://docs.kali.org/">Kali</a></li>
<li><a href="https://www.tenable.com/products/nessus/nessus-professional">Nessus</a></li>
<li><a href="https://www.beyondtrust.com/products/beyondsaas/">BeyondSAAS</a></li>
<li><a href="https://www.beyondtrust.com/products/retina-network-security-scanner">Retina</a></li>
<li><a href="https://www.coresecurity.com/vulnerability-insight">Core Insight</a></li>
<li><a href="https://dome9.com/">Dome9</a></li>
<li><a href="https://www.alienvault.com/">Alien Vault</a></li>
<li><a href="https://www.alertlogic.com/">Alert Logic</a></li>
</ul>
<h2 class="title is-4">Analytics</h2>
<ul>
<li>
<p><a href="https://newrelic.com/">New Relic</a></p>
</li>
<li>
<p><a href="https://www.librato.com/">Librato</a></p>
</li>
</ul>
<h2 class="title is-4">Log Management</h2>
<ul>
<li>
<p><a href="https://www.elastic.co/products/elasticsearch">Elastic Search</a></p>
</li>
<li>
<p><a href="https://www.elastic.co/products/logstash">Logstash</a></p>
</li>
<li>
<p><a href="https://www.elastic.co/products/kibana">Kibana</a></p>
</li>
<li>
<p><a href="https://www.sumologic.com/">Sumologic</a></p>
</li>
<li>
<p><a href="https://logentries.com/">LogEntries</a></p>
</li>
<li>
<p><a href="https://www.splunk.com/">Splunk</a></p>
</li>
<li>
<p><a href="https://www.loggly.com/">Loggly</a></p>
</li>
</ul>
<h2 class="title is-4">Cloud Hosting</h2>
<ul>
<li>
<p><a href="https://aws.amazon.com/">Amazon AWS</a></p>
</li>
<li>
<p><a href="https://www.digitalocean.com/">Digital Ocean</a></p>
</li>
<li>
<p><a href="https://www.linode.com/">Linode</a></p>
</li>
<li>
<p><a href="https://azure.microsoft.com/">Microsoft Azure</a></p>
</li>
<li>
<p><a href="https://cloud.google.com/">Google Cloud Services</a></p>
</li>
<li>
<p><a href="https://www.openstack.org/">OpenStack</a></p>
</li>
</ul>
<h2 class="title is-4">Serverless Architectures</h2>
<ul>
<li><a href="https://aws.amazon.com/lambda/">AWS Lambda</a></li>
<li><a href="https://azure.microsoft.com/en-us/services/functions/">Azure Functions</a></li>
<li><a href="https://cloud.google.com/functions/">Google Cloud functions</a></li>
<li><a href="http://fission.io/">Fission.IO</a> serverless functions on Kubernetes</li>
<li><a href="https://console.bluemix.net/openwhisk/">IBM Cloud Functions</a></li>
</ul>
<h2 class="title is-4">Virtualization - Containers</h2>
<ul>
<li><a href="https://www.vagrantup.com/">Vagrant</a></li>
<li><a href="https://www.virtualbox.org/">VirtualBox</a></li>
<li><a href="https://www.docker.com/">Docker</a></li>
<li><a href="https://kubernetes.io/">Kubernetes</a></li>
<li><a href="https://github.com/projectatomic/buildah">Buildah</a> for <a href="https://www.opencontainers.org/">Open Containers</a> (aka. <a href="https://github.com/opencontainers/">OCI</a>)</li>
</ul>
<h2 class="title is-4">Programming languages</h2>
<ul>
<li><a href="/shell">Bash</a>, the Unix/Linux shell is critical if you run Linux machines.</li>
<li><a href="/python">Python</a> is one of the most frequently used languages by DevOps enginners.</li>
<li><a href="/groovy">Groovy</a> is the language used by Jenkins.</li>
<li><a href="/ruby">Ruby</a> - there are a few tools written in Ruby and you might need to understand the syntax a bit, but fell out of favor.</li>
<li><a href="https://perlmaven.com/">Perl</a> - used to be the favorite language for System Administrators, but it much less popular these days.</li>
</ul>
<h2 class="title is-4">Other</h2>
<ul>
<li>
<p><a href="https://www.terraform.io/">Terraform</a> - Write, Plan, and Create Infrastructure as Code</p>
</li>
<li>
<p><a href="https://www.packer.io/">Packer</a> - Build Automated Machine Images</p>
</li>
<li>
<p><a href="https://www.consul.io/">Consul</a> - Service Mesh Made Easy</p>
</li>
</ul>
<p>Inspired by the <a href="https://www.mindmeister.com/512461824/devops-ecosystem">DevOps Ecosystem</a> by Erik Rogneby.</p>
<p>More from <a href="https://opensource.com/article/18/12/cicd-tools-sysadmins">7 CI/CD tools for sysadmins</a> by Dan Barker</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Survey: The 3 most important Programming languages to you</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-01-17T11:30:01Z</updated>
    <pubDate>2018-01-17T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/3-most-important-programming-languages" />
    <id>https://code-maven.com/3-most-important-programming-languages</id>
    <content type="html"><![CDATA[<p>I am writing a book on <a href="https://leanpub.com/collab-dev-git/">Collaborative Development using Git and GitHub</a> and
as you might have noticed I write about a lot of stuff on this web site. In order to know which languages should I cover in the book and what subjects should I write about, I asked what are the 3 most important programming languages to my readers.</p>
<p>I meant either languages they already use, languages they'd need to learn, or they'd like to learn.</p>
<h2 class="title is-4">The results</h2>
<h3 class="title is-5">First language</h3>
<ul>
<li>Perl 40.2%</li>
<li>Perl 5 20.9%</li>
<li>Python 9.9%</li>
<li>C 5.2%</li>
<li>JavaScript 4.9 %</li>
<li>Java 3.5%</li>
<li>C++ 3.3%</li>
<li>Bash 3.1%</li>
</ul>
<h3 class="title is-5">Second language</h3>
<ul>
<li>JavaScript 20.2%</li>
<li>Python 16.7%</li>
<li>Perl 12.2%</li>
<li>Bash 12%</li>
<li>C 6.4%</li>
<li>Java 6.1%</li>
<li>C++ 5.2%</li>
<li>Perl 5 4.7%</li>
<li>Go 2.8</li>
<li>C# 2.8</li>
</ul>
<h3 class="title is-5">Third language</h3>
<ul>
<li>JavaScript 16.9%</li>
<li>Python 13.4%</li>
<li>PHP 6.4%</li>
<li>Bash 15.5%</li>
<li>C 9.9%</li>
<li>C++ 6.8%</li>
<li>Go 6.4%</li>
<li>Java 4.7%</li>
<li>Perl 3.8%</li>
<li>Perl 5 2.8%</li>
</ul>
<h2 class="title is-4">Total</h2>
<p>There were a total 1275 answers (3* 425 respondents) this is the distribution of the answers.</p>
<table>
<tr><td>Perl</td><td>239</td><td>18.74 %</td></tr>
<tr><td>JavaScript</td><td>179</td><td>14.03 %</td></tr>
<tr><td>Python</td><td>170</td><td>13.33 %</td></tr>
<tr><td>Bash</td><td>130</td><td>10.19 %</td></tr>
<tr><td>Perl 5</td><td>121</td><td>9.49 %</td></tr>
<tr><td>C</td><td>91</td><td>7.13 %</td></tr>
<tr><td>C++</td><td>65</td><td>5.09 %</td></tr>
<tr><td>Java</td><td>61</td><td>4.78 %</td></tr>
<tr><td>Go</td><td>48</td><td>3.76 %</td></tr>
<tr><td>PHP</td><td>38</td><td>2.98 %</td></tr>
<tr><td>C#</td><td>29</td><td>2.27 %</td></tr>
<tr><td>Ruby</td><td>20</td><td>1.56 %</td></tr>
<tr><td>Swift</td><td>17</td><td>1.33 %</td></tr>
<tr><td>Scala</td><td>12</td><td>0.94 %</td></tr>
<tr><td>Perl 6</td><td>10</td><td>0.78 %</td></tr>
<tr><td>Lua</td><td>9</td><td>0.7 %</td></tr>
<tr><td>Delphi/Pascal</td><td>8</td><td>0.62 %</td></tr>
<tr><td>Objective-C</td><td>6</td><td>0.47 %</td></tr>
<tr><td>Haskell</td><td>6</td><td>0.47 %</td></tr>
<tr><td>Rust</td><td>5</td><td>0.39 %</td></tr>
<tr><td>Erlang</td><td>4</td><td>0.31 %</td></tr>
<tr><td>Zsh</td><td>4</td><td>0.31 %</td></tr>
<tr><td>Elixir</td><td>3</td><td>0.23 %</td></tr>
</table>
<h2 class="title is-4">Raw data</h2>
<p>The raw data can be downloaded <a href="https://github.com/szabgab/code-maven.com/blob/main/surveys/3-most-important-programming-languages.csv">here</a>.</p>
<h2 class="title is-4">Background</h2>
<p>The survey ran between 2017.10.20-2017.10.30. We got 425 responses.</p>
<p>On 2017.10.20 I sent the out the link to the subscribers of the <a href="https://perlmaven.com/">Perl Maven</a> site then on 2017.10.23 I've included it in the <a href="http://perlweekly.com/archive/326.html">326th edition</a> of the <a href="http://perlweekly.com/">Perl Weekly newsletter</a>. Later I've also posted it on <a href="https://www.linkedin.com/feed/update/urn:li:activity:6328506959322583040">LinkedIN</a> and <a href="https://twitter.com/szabgab/status/922737627572461569">Tweeted</a> about it.</p>
<p>So a strong bias towards Perl is expected.</p>
<p>During the survey I've added several new items:</p>
<ul>
<li>Rust</li>
<li>Haskell</li>
<li>Zsh</li>
<li>Elixir</li>
<li>Erlang</li>
</ul>
<p>People also asked for these two, but I have not added them. Maybe next time I run the survey.</p>
<ul>
<li>SQL</li>
<li>PowerShell</li>
</ul>
<p>In addition, at the beginning there was one item called &quot;Perl&quot; that was later replace by &quot;Perl 5&quot; and &quot;Perl 6&quot;.</p>
<h2 class="title is-4">Next survey</h2>
<p><a href="/continuous-integration-systems">Continuous Integration Systems</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Hello World in Java</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-01-03T20:30:01Z</updated>
    <pubDate>2018-01-03T20:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/hello-world-in-java" />
    <id>https://code-maven.com/hello-world-in-java</id>
    <content type="html"><![CDATA[<p>The standard way to get started with any language is to write a program that will print &quot;Hello World&quot;. Here is the one for Java.</p>
<p>For other languages see the <a href="/exercise-hello-world">Hello World exercise</a>.</p>
<h2 class="title is-4">Install Java</h2>
<p>You can <a href="https://java.com/en/download/">download Java</a> in two main forms.</p>
<p>The JRE - Java Runtime Environment (Java Virtual Machine JVM) is needed to run a pre-compiled
Java application.</p>
<p>The JDK - Java Development Kit (Java Compiler javac) includes the compiler that converts source files with .java extension to compiled files with .class extension. It also include the Runtime Environment.</p>
<p>For develpment you'll need the JDK. The users of your code will only need the JRE.</p>
<h2 class="title is-4">Command line</h2>
<p>In these article we will use the command line and not any IDEs so let's look at the
command line tools we get when we install the JDK:</p>
<p>Once you have downloaded and installed the JDK you have two command-line tools:</p>
<p><code>javac</code> is the Java compiler. If you run <code>javac -version</code> it will display</p>
<pre><code>$ javac -version
javac 1.8.0_60
</code></pre>
<p><code>java</code> s the runtime environment or <code>Java Virtual Machine</code>.</p>
<pre><code>$ java -version
java version &quot;1.8.0_60&quot;
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
</code></pre>
<h2 class="title is-4">Hello World</h2>
<p>Now that we have the tools ready we can creat the following file in any text editor
(e.g.even Notepad if you are really hard-core)</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/java/HelloWorld.java">examples/java/HelloWorld.java</a></strong></p>
<pre><code class="language-java">public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(&quot;Hello World&quot;);
    }
}

</code></pre>
<p>The we switch to the terminal (or command prompt in Windows) <code>cd</code> to the directory
where we saved the <code>.java</code> file and run:</p>
<pre><code>$ javac HelloWorld.java
</code></pre>
<p>this fill create a file called <code>HelloWorld.class</code> but won't print anything to the screen.</p>
<p>Then we can run our application using:</p>
<pre><code>$ java HelloWorld
Hello World
</code></pre>
<h2 class="title is-4">Troubleshooting</h2>
<p>A couple of issues I've encountered while making these first steps:</p>
<p>I've tried to run <code>javac</code> only giving the name of the file without the extension:</p>
<pre><code>$ javac HelloWorld
error: Class names, 'HelloWorld', are only accepted if annotation processing is explicitly requested
1 error
</code></pre>
<p>Passed the filename including the extension to the <code>java</code> program which only needs the name of the file without the extension:</p>
<pre><code>$ java HelloWorld.class
Error: Could not find or load main class HelloWorld.class

$ java HelloWorld.java
Error: Could not find or load main class HelloWorld.java
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>VirtualBox host-only network - ssh to remote machine</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2018-01-01T07:30:05Z</updated>
    <pubDate>2018-01-01T07:30:05Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/virtualbox-host-only-network-ssh-to-remote-machine" />
    <id>https://code-maven.com/virtualbox-host-only-network-ssh-to-remote-machine</id>
    <content type="html"><![CDATA[<p>This is a strange article that includes several seemingly unrelated subjects. We need this because after
<a href="/installing-ubuntu-linux-in-virtualbox">installing Ubuntu in VirtualBox</a> we can only log in to
it via the window of VirtualBox. Instead of that we would like to be able to use some <code>ssh</code> client
such as the <code>ssh</code> command on an OSX or Linux, or Putty on a Windows machine.</p>
<p>We prefer the ssh client as that's how you'd interact with a Linux machine if it was running on a server
at a hosting company. The ssh clients are also more suitable to work than the VirtualBox window.</p>
<h2 class="title is-4">VirtualBox and networking</h2>
<p>VirtualBox creates virtual networking for the boxes you run in it. By default
VirtualBox sets up a network with <a href="https://en.wikipedia.org/wiki/Network_address_translation">NAT (Network Address Translation)</a>. It gave our Linux box an IP address, configured your host machine as a router and allowed users on the machine to access the outside world. For example that's how we could <a href="/upgrade-linux-packages-and-install-new-ones">Upgrade Linux packages and install new ones</a>.</p>
<p>We cannot however access the box from the outside world. Not even from our host machine.</p>
<p>On one hand it is good that no one from the Internet can access our box, but we'd like to be able to ssh into the virtual box at
least from our own Notebook/desktop computer. Later we'll also want to be able to set up several boxes and allow them to communicate among themselves.</p>
<p>There are plenty of ways to set this up. We are going to use &quot;Host-only networks&quot;. That is a network configuration option provided by VirtualBox that allows your host to access your guest OS-es as if they were on some local network.</p>
<h2 class="title is-4">Create host-only network for VirtualBox</h2>
<p>First we need to create or enable a Host-only network of VitualBox. Then we are going to tell each one of our (currently one :)
VirtualBoxes to use that network as well.</p>
<p>Turn off your guest operating system (<code>sudo shutdown -P now</code>).</p>
<p>In order to create (or verify the existence of) a Host-Only network click on <b>Global Tools</b> in the top-right corner of the VirtualBox window. It should look like this:</p>
<p><img src="/img/vb1/vboxnet1.png" alt="" /></p>
<p>Here click on <b>Host Network Manager</b>, the lower of the two boxes.</p>
<p>Here you might see 0 or more lines. The image is from an OSX host. I think on Windows hosts the &quot;Name&quot; field might hold some much longer name.</p>
<p><img src="/img/vb1/vboxnet0.png" alt="" /></p>
<p>If you don't have any entries then you need to create one.</p>
<p>Click on the <b>Create+</b> button in the top left corner.</p>
<p>If your host operating system is MS Windows, this operation might need Windows Admin rights. Look for the popup window that
might be in the background.</p>
<p>Set the IPV4 Address/Mask to <code>192.168.56.1/24</code> to be similar to my setup. You don't need to enable the DHCP server for our configuration, but it won't hurt either so if it is on, leave it on.</p>
<h2 class="title is-4">Add host-only network to your VirtualBox guest</h2>
<p>Each VirtualBox guest needs to be configured to use the Host-only network of VirtualBox.</p>
<p>For this click on <code>Machine Tools</code>.</p>
<p>Select your machine and click on Settings.</p>
<p>Click on the <code>Network</code> tab.</p>
<p>Adapter 1 is set to NAT.</p>
<p><img src="/img/vb1/adapter1.png" alt="" /></p>
<p>Click to Adapter 2</p>
<p>Select &quot;Attached to:&quot; &quot;Host-only Adapter&quot;.</p>
<p>Name: select the vboxnet0 or whatever it is called on your system.</p>
<p>Press OK.</p>
<p><img src="/img/vb1/adapter2.png" alt="" /></p>
<p>You have now configured Host-only networking for this box.</p>
<p>Let's boot it now and make sure that Ubuntu is also configured properly.</p>
<h2 class="title is-4">Add an interface to Ubuntu Linux</h2>
<p>Once the box is running, log in and run the following command:</p>
<pre><code>$ ifconfig -a
</code></pre>
<p>This one shows the active network interfaces. We have two. The one created for the NAT Adapter
and the &quot;lo&quot; the loopback interface so the computer can talk to itself.</p>
<p><img src="/img/vb1/ifconfig-1.png" alt="" /></p>
<pre><code>$ ifconfig -a
</code></pre>
<p>Will show all the interfaces, including the one that is not currently enabled.
Here we can see an extra interface called <b>enp0s8</b> that does not have an associated IP address.</p>
<p><img src="/img/vb1/ifconfig-2.png" alt="" /></p>
<p>We need to edit the file of the interfaces: <b>/etc/network/interfaces</b>.
As it is owned by root we need to use <code>sudo</code>. If you are not familiar with more powerful
editors then use <a href="/nano">nano</a>:</p>
<pre><code>$ sudo nano /etc/network/interfaces
</code></pre>
<p>Add the following lines to the end of the file:</p>
<pre><code>auto enp0s8
iface enp0s8 inet static
address 192.168.56.10
netmask 255.255.255.0
</code></pre>
<p>Then we need to start the network card. We can either restart the machine using <code>sudo shutdown -r now</code> or
we can install software that can do it for us:</p>
<pre><code>$ sudo apt-get install ifupdown
</code></pre>
<p>Start the network interface:</p>
<pre><code>$ sudo ifup enp0s8
</code></pre>
<p>You can verify that the interface was configured by running <code>ifconfig</code> again and observing that there
are now 3 network cards listed and each one of them has an IP address.</p>
<p>In addition you can test this by opening the Cmd window of your Windows machine and type in</p>
<pre><code>ping 192.168.56.10
</code></pre>
<p>You should be able to see 4 responses.</p>
<h2 class="title is-4">Install ssh server</h2>
<p>By default this Ubuntu installation does not come with an ssh server so
if you have not done so yet you will need to install it:</p>
<pre><code>$ sudo apt-get install ssh
</code></pre>
<p>This installs and starts the server.</p>
<h2 class="title is-4">Self ssh</h2>
<p>You can try the ssh server locally by trying to connect from your virtual Linux box back to the same virtual Linux box. Every linux machine has the IP address <code>127.0.0.1</code> to refer to itself, and by default every Linux machine maps the name <code>localhost</code> to this IP address. So if we <code>ssh</code> to <code>localhost</code> we are effectively talking to ourselves.</p>
<p>Type in:</p>
<pre><code>$ ssh localhost
</code></pre>
<p>At first it will ask you to verify the &quot;host&quot; which in this case means the &quot;remote machine&quot; which is our Ubuntu Linux.
If you type in <code>yes</code> the ssh client will save the key of your sever in a file called <code>.ssh/known_hosts</code>
so it won't need to ask this question again and it will go on to ask you for your &quot;remote&quot; password.
As &quot;remote&quot; and &quot;local&quot; are the same machine now this the password of your Linux user.</p>
<p><img src="/img/vb1/ssh-1.png" alt="" /></p>
<p>If this is successful you can now open your ssh client on your desktop and connect to the Ubuntu machine.</p>
<p>On Windows you will need to <a href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html">download putty.exe</a> (No need for the .msi file. Just download the exe and run it from the download directory or from the desktop)</p>
<p>You will need to type in the IP address of the &quot;remote machine&quot; which is our Ubuntu box <code>192.168.56.10</code> and then it will ask you for username and password.</p>
<h2 class="title is-4">@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @</h2>
<p>If this is not the first time you are setting up machines you might easily encounter an error message that looks like this:</p>
<pre><code>@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:HnZL2cdy+SVZ0PUwajmqndUgqWl0n7dLMEP3o4ZDZSw.
Please contact your system administrator.
Add correct host key in /Users/dpinchoff/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/dpinchoff/.ssh/known_hosts:2
ECDSA host key for 192.168.56.10 has changed and you have requested strict checking.
Host key verification failed
</code></pre>
<h3 class="title is-5">Explanation</h3>
<p>When you ssh to a machine the first time, ssh will ask the ECDSA key of the host. It will then ask you to verify that the key
it received from the host is the correct key. This is used so you, the user, will know that you are connecting to the server
you intended to connect to and not some other machine posing as that server. The question looks like this:</p>
<p><img src="/img/vb1/ssh-1.png" alt="" /></p>
<p>When you say &quot;yes&quot; to this, the signature of that server is saved in the <code>~/.ssh/known_hosts</code> file. One line for each server you connect to in the format of</p>
<pre><code>hostname server-key
</code></pre>
<p>or</p>
<pre><code>IP-address server-key
</code></pre>
<p>Any subsequent time you connect to the same machine, ssh will verify that the key the remote server sends is the same as listed for the given hostname or IP address in the <code>~/.ssh/known_hosts</code> file.
If it is the same key, the ssh process will continue and then the server will try to verify that you are who you claim to be. Either by asking your password or by asking you to use your private key to make sure it corresponds to the public key it has on file. (In the <code>~/.ssh/authorized_keys</code> file on the remote machine)
If the ssh does not find the hostname or IP address of the remote machine in the <code>~/.ssh/known_hosts</code> file of your local user, then it asks the question as we described above. If, however, the hostname was found, but the signature the server sent you is not the same as you have on file, then you get the above error message. (That claims to be as WARNING.)</p>
<p>This can happen either if you replaced the server machine with another machine, but used the same IP address and/or same hostname. Or if some other machine poses as your server. This is what's usually called <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">man-in-the-middle attack</a>. Even if the attacker is a woman called Mallory. It can happen for example if one of the boxes that acts as a router between you and the remote machine where your traffic passes will suddenly try to act as that remote server. If you don't notice this, you might type in your password and let the owner of that box, the man in the middle, know your password.</p>
<p>So if you get such message, start by being suspicious.</p>
<p>This can easily happen if you are currently playing with virtual images on your computer and you clone them and change their IP address and maybe you destroy one and then create a new machine with the same IP as you had earlier. In that case it is safe to accept the new signature. The way do that is that you edit the <code>~/.ssh/known_hosts</code> file on the computer from which you run the ssh client and remove the line that corresponds to the specific server. This is the line that was mentioned in the above error message, in this case it is line 2 in the <code>~/.ssh/known_hosts</code> file .</p>
<pre><code>Offending ECDSA key in /Users/dpinchoff/.ssh/known_hosts:2
</code></pre>
<p>Remove line 2 from <code>~/.ssh/known_hosts</code>. Then try to ssh again. It will ask you to verify the key of the remote host. When you say &quot;yes&quot; it will save that key in the <code>~/.ssh/known_hosts</code> file.</p>
<h2 class="title is-4">Vocabulary clarification</h2>
<p>VirtualBox uses <code>host</code> to describe your main operating system.
VirtualBox uses <code>guest</code> to describe the OS that is installed inside the VB image.</p>
<p>In networking terms the computer you are sitting at is usually called the <code>client</code>. The machine you are connecting to is usually called the server or the host.</p>
<p>In our setup the terms get mixed. Especially the word <code>host</code> It can both refer to your Windows system (VirtualBox host) and to the Ubuntu box which (network host). So make sure you understand which is which.</p>
<p>If it is still unclear, let me know and I'll try to further clarify it.</p>
<h2 class="title is-4">Comments</h2>
<p>Err I think sysctrl has mucked up your tutorial. ping does not succeed ,,
well it is bit of a bastard situation,, I hate systemd, so it is a lubuntu vm and devuan host
Only because armbian specifys ubuntu 18.04 as a base for cross-compile chain
I guess I should try under devuan??? ,, or else use vnc to control vm
thoughts?</p>
<hr />
<p>Very clean and precise walkthrough. Thank you for sharing!</p>
<hr />
<p>How can we connect using ssh from a different network ? Assuming we know the public ip and all this info...</p>
<hr />
<p>If you get a connection refused when ssh'ing to localhost, it probably means you don't have the ssh server package installed on your guest OS.</p>
<hr />
<p>Thanks! worked like a charm</p>
<hr />
<p>Thank you! I've wanted to set this up for awhile. My guest os is Redhat 7, so I had to use the NetworkManager to configure the new interface:</p>
<p>nmcli connection add type ethernet con-name enp0s8 ifname enp0s8 ip4 192.168.56.10/24</p>
<p>The configuration is automatically saved and the interface is started.</p>
<hr />
<p>Thanks! this instrunctions solved my issues</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Show number of files in several directory trees using Shell</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2017-11-21T08:00:01Z</updated>
    <pubDate>2017-11-21T08:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/number-of-files-in-several-directory-trees" />
    <id>https://code-maven.com/number-of-files-in-several-directory-trees</id>
    <content type="html"><![CDATA[<p>We already know how to <a href="https://code-maven.com/number-of-files-in-a-directory-tree">Show number of files in a single directory tree using Shell</a>, but what if given a directory,
we would like to know the number of files in each one of its subdirectories separately?</p>
<p>We assume the same directory structure as in that other article:</p>
<pre><code>groups/
  all.txt
  people/
    John.txt
    Jane.txt
  maskots/
    Foo.txt
    Bar.txt
  other -&gt; maskots
</code></pre>
<p>In the <a href="https://code-maven.com/number-of-files-in-a-directory-tree">previous article</a>
we reached this solution for a single directory:</p>
<pre><code class="language-bash">$ find groups -type f | wc -l
</code></pre>
<p>Now we need to go over all the subdirectories and run the above expression for each one of them.</p>
<h2 class="title is-4">Wildecard expansion</h2>
<p>In our first attempt we use the wildecard expansion <code>groups/*</code> to list all the
item in the &quot;groups&quot; directory. We go over it in a <code>for</code> loop and for each iteration
we echo the name of the thing and call the above expression.</p>
<pre><code class="language-bash">$ for x in  groups/*; do (echo $x; find $x -type f | wc -l) ; done

groups/all.txt
1
groups/maskots
2
groups/other
0
groups/people
2
</code></pre>
<p>The  output includes the directories 'maskots' and 'people' as we wanted, but it
also includes &quot;all.txt&quot; which is a plain file and 'other' which is a symbolic link.</p>
<h2 class="title is-4">Find with backtick</h2>
<p>We can use <code>find</code> here too with <code>type</code> directory and <code>maxdepth</code> 1,
but that will return the root directory as well:</p>
<pre><code class="language-bash">$ find groups -maxdepth 1 -type d

groups
groups/maskots
groups/people
</code></pre>
<p>In this case we can also include <code>mindepth</code> to make sure only the right depth is included:</p>
<pre><code class="language-bash">$ find groups -maxdepth 1 -mindepth 1 -type d

groups/maskots
groups/people
</code></pre>
<p>Using this we can now write:</p>
<pre><code class="language-bash">$ for x in  `find groups -maxdepth 1 -mindepth 1 -type d`; do (echo $x; find $x -type f | wc -l) ; done

groups/maskots
       2
groups/people
       2
</code></pre>
<h2 class="title is-4">Using result interpolation</h2>
<p>Instead of the backticks ````, it is usually better to write <code>$()</code>.
The result is the same:</p>
<pre><code class="language-bash">$ for x in  $(find groups -maxdepth 1 -mindepth 1 -type d ); do (echo $x; find $x -type f | wc -l) ; done

groups/maskots
       2
groups/people
       2
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Show number of files in a directory tree using Shell</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2017-11-16T07:30:01Z</updated>
    <pubDate>2017-11-16T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/number-of-files-in-a-directory-tree" />
    <id>https://code-maven.com/number-of-files-in-a-directory-tree</id>
    <content type="html"><![CDATA[<p>Given a directory tree such as in the following example, we would like to know</p>
<ol>
<li>How many files are in it?</li>
<li>How many files are in each one of the subdirectories?</li>
</ol>
<pre><code>groups/
  all.txt
  people/
    John.txt
    Jane.txt
  maskots/
    Foo.txt
    Bar.txt
  other -&gt; maskots
</code></pre>
<p>All that using the Unix/Linux Shell.</p>
<h2 class="title is-4">Number of items in the directory</h2>
<p>If we would like to know the number of files in the <code>groups</code> directory we can run
<code>ls -1 groups</code> (that's the number one in the options), That will list
all the items in the directory:</p>
<pre><code class="language-shell">$ ls -1 groups
all.txt
maskots
people
other
</code></pre>
<p>We can then pipe it through <code>wc -l</code> (that's the lower case L in the options) that will count
and display the number of lines in the standard input:</p>
<pre><code class="language-shell">$ ls -1 groups | wc -l
     4
</code></pre>
<p><code>wc</code> stands for word-count, the <code>-l</code> flag tells it to count lines.</p>
<p>This contains everything in the directory: files, directories, symbolic links and whatnot.
In addition it only counts the items in the immediate directory. Not in the whole tree.</p>
<p>This is not really what we wanted though.</p>
<h2 class="title is-4">Number of items in the directory tree</h2>
<p>If we run the <code>find</code> command and only give it the name of the directory it will &quot;find&quot; everything within
that directory tree. Including all its subdirectories.</p>
<pre><code class="language-shell">$ find groups
groups
groups/all.txt
groups/maskots
groups/maskots/Bar.txt
groups/maskots/Foo.txt
groups/other
groups/people
groups/people/Jane.txt
groups/people/John.txt
</code></pre>
<p>Note: It lists 'other', but not the 2 files that are inside the directory where 'other' links to.
In other words: it won't descend into directories pointed to by symbolic links.
In the unlikely case that we wanted to follow symbolic links we can run <code>find -L groups</code>.</p>
<p>We can count the number of entries using <code>wc -l</code> as we did with the <code>ls</code>.</p>
<pre><code class="language-shell">$ find groups | wc -l
     9
</code></pre>
<p>This contains all the items in the whole directory tree.
Files, directories, symbolic links, etc.</p>
<h2 class="title is-4">Number of files in the dirctory tree</h2>
<p>If we would like to count only the files, we can tell <code>find</code> to print out only the names of the files using the
<code>-type f</code> option:</p>
<pre><code class="language-shell">$ find groups -type f
groups/all.txt
groups/maskot/Bar.txt
groups/maskot/Foo.txt
groups/people/Jane.txt
groups/people/John.txt
</code></pre>
<p>Piping it through the <code>wc -l</code> we get:</p>
<pre><code class="language-shell">$ find groups -type f | wc -l
       5
</code></pre>
<h2 class="title is-4">Number of files in the directory</h2>
<p>Though this was not our original task, but if we would like to know the number of
<strong>files</strong> in the directory (and not the whole tree) we can use <code>find</code>
to restrict the item type to file as we already did, and we can also ask it to
go only 1 level deep in the directory structure. Meaning not to traverse.</p>
<pre><code class="language-shell">$ find groups -maxdepth 1 -type f | wc -l
       1
</code></pre>
<p>(The groups directory tree can be found <a href="https://github.com/szabgab/code-maven.com/tree/main/examples/groups">here</a>.)</p>
<h2 class="title is-4">Comments</h2>
<p>Note that, within a script or pipe, ls acts the same as ls -1, so there is no need to specify the -1 option. So, &quot;ls | wc -l&quot; will have the same result in less characters (and one less option to remember to use).</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Survey: Continuous Integration Systems</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2017-11-09T09:30:01Z</updated>
    <pubDate>2017-11-09T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/continuous-integration-systems" />
    <id>https://code-maven.com/continuous-integration-systems</id>
    <content type="html"><![CDATA[<p>There are plenty of organizations that use Continuous Integration Systems and a lot that don't.
In this 1-question survey I asked what do you use if anything at all?
Multiple selections were welcome as we know some people and some organizations use several CI systems.</p>
<p>There is also a form where you can subscribe to the &quot;Code-Maven Surveys&quot; newsletter. I am going to send out the results of this survey in that newsletter and the call for the next survey when I run that. Otherwise I won't spam you.</p>
<h2 class="title is-4">The Results</h2>
<ul>
<li>Jenkins 41.6%</li>
<li>Travis-CI 17.2%</li>
<li>GitLab CI 16.8%</li>
<li>I don't use CI for my own projects 15.5%</li>
<li>We don't use CI at work 10.9%</li>
<li>TeamCity 6.7%</li>
<li>AWS CodeBuild 5.9%</li>
<li>In-house CI system 5.5%</li>
<li>CircleCI 5%</li>
<li>Appveyor 4.6%</li>
<li>Bamboo 4.6%</li>
<li>Buildbot 3.4%</li>
<li>Bitbucket Pipelines 2.1%</li>
<li>Codeship 2.1%</li>
<li>Semaphore CI 1.7%</li>
<li>CruiseControl 0.8%</li>
<li>Go CD 0.8%</li>
<li>IBM Rational Synergy 0.4%</li>
<li>OVH CDS 0.4%</li>
</ul>
<h2 class="title is-4">Raw data</h2>
<p>The raw data can be downloaded <a href="https://github.com/szabgab/code-maven.com/blob/main/surveys/continuous-integration-systems.csv">here</a>.</p>
<h2 class="title is-4">Background</h2>
<p>The survey ran between 2017.10.30-2017.11.09. We got 238 responses.</p>
<p>The survey was sent to the subscribers of the <a href="https://perlmaven.com/">Perl Maven</a>  and<a href="https://code-maven.com/">Code Maven</a>  sites.
It was included it in the <a href="http://perlweekly.com/archive/327.html">327th edition</a> of the <a href="http://perlweekly.com/">Perl Weekly newsletter</a>.
I've Tweeted about it, posted on LinkedIn and on reddit.com/r/programming, but after a few hours I've removed it from there.</p>
<h2 class="title is-4">Links to the CI systems in the survey</h2>
<ul>
<li>
<p><a href="https://www.appveyor.com/">Appveyor</a></p>
</li>
<li>
<p><a href="https://aws.amazon.com/codebuild/">AWS CodeBuild</a></p>
</li>
<li>
<p><a href="https://www.atlassian.com/software/bamboo">Bamboo</a></p>
</li>
<li>
<p><a href="https://bitbucket.org/product/features/pipelines">Bitbucket Pipelines</a></p>
</li>
<li>
<p><a href="https://www.bitrise.io/">Bitrise</a> Mobile Continuous Integration and Delivery</p>
</li>
<li>
<p><a href="http://buildbot.net/">Buildbot</a></p>
</li>
<li>
<p><a href="https://circleci.com/">CircleCI</a></p>
</li>
<li>
<p><a href="https://codeship.com/">Codeship</a></p>
</li>
<li>
<p><a href="http://cruisecontrol.sourceforge.net/">CruiseControl</a></p>
</li>
<li>
<p><a href="https://cloud.docker.com/">Docker Cloud</a></p>
</li>
<li>
<p><a href="https://about.gitlab.com/features/gitlab-ci-cd/">GitLab CI</a></p>
</li>
<li>
<p><a href="https://www.gocd.org/">Go CD</a></p>
</li>
<li>
<p><a href="https://www.ibm.com/us-en/marketplace/rational-synergy">IBM Rational Synergy</a></p>
</li>
<li>
<p><a href="https://jenkins.io/">Jenkins</a></p>
</li>
<li>
<p><a href="https://ovh.github.io/cds/">OVH CDS</a></p>
</li>
<li>
<p><a href="https://semaphoreci.com/">Semaphore CI</a></p>
</li>
<li>
<p><a href="https://travis-ci.org/">Travis CI</a></p>
</li>
<li>
<p><a href="https://www.jetbrains.com/teamcity/">TeamCity</a></p>
</li>
<li>
<p><a href="https://www.visualstudio.com/team-services/">Visual Studio Team Services (VSTS)</a></p>
</li>
<li>
<p><a href="https://www.pmease.com/">Quick Build</a></p>
</li>
<li>
<p><a href="https://www.openshift.com/">OpenShift</a></p>
</li>
</ul>
<h2 class="title is-4">Other</h2>
<p>Just as I was about to publish the results I saw this post on the <a href="https://github.com/blog/2463-github-welcomes-all-ci-tools">CI Tools used by GitHub projects</a>.</p>
<p>The previous survey, I've asked what are <a href="/3-most-important-programming-languages">the 3 most important Programming languages to you</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Server Monitoring</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2017-08-31T09:30:01Z</updated>
    <pubDate>2017-08-31T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/monitoring" />
    <id>https://code-maven.com/monitoring</id>
    <content type="html"><![CDATA[<p>Some notes as I am working on setting up monitoring of some servers.</p>
<p><a href="https://www.pingdom.com/">Pingdom</a> - External active monitoring of availability of various services (ping, http, etc.) including transactions.</p>
<p><a href="https://www.pagerduty.com/">Pager Duty</a></p>
<p><a href="https://newrelic.com/">New Relic</a></p>
<p><a href="https://www.terraform.io/">Terraform</a></p>
<h2 class="title is-4">The world of StatsD</h2>
<p>StatsD is a combination of a number of services and protocols.</p>
<ul>
<li>StatsD client (talking in UDP to the dameon)</li>
<li>StatsD dameon (talking in batches with the data aggregator)</li>
<li>Data aggregator (some kind of a database)</li>
<li>Graphing service (used the data in the aggregator)</li>
</ul>
<p>Data points can be supplied by our application. These use the StatsD client library available in most of the programming languages.
They can also be supplied by tools related to our application. (e.g. the tools used to deploy a new version.)
There can be also some generic data collector that collects generic server-related data. (e.g. CPU load, memory usage, disk usage).</p>
<p>The data points are sent by the StatsD clients to the StatsD daemon that usually runs on the same machine via UDP.
That means the data collection has minimal impact on our service and even if the daemon is down, it does not impact our
service. Just the logging data is lost.</p>
<p>There are several <a href="https://github.com/etsy/statsd/wiki">StatsD daemon</a> implementations. Apparently the one by Etsy is the most popular.</p>
<p>There are several Data aggregators and Graphings tools (<a href="https://github.com/etsy/statsd/wiki/Backends">StatsD Backends</a>)</p>
<p><a href="https://graphiteapp.org/">Graphite</a> is an Open Source backend.
<a href="https://www.youtube.com/watch?v=V6Rxs9LeKew">Build your own monitoring dashboard with Graphite, Statsd, &amp; Grafana</a>
<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-graphite-on-an-ubuntu-14-04-server">How To Install and Use Graphite on an Ubuntu 14.04 Server</a></p>
<p><a href="http://ganglia.sourceforge.net/">Ganglia</a></p>
<p><a href="https://www.datadoghq.com/">DataDog</a> is an integrated service providing both data aggregation, graphs and integration with lots of other tools and services.</p>
<p>Plain database backends (MySQL, InfluxDB, MongoDB) ?</p>
<h3 class="title is-5">Metric types used in StatsD</h3>
* count   (incr, decr) (e.g. every request)
* amount (e.g. elapsed time)
<h2 class="title is-4">Other tools</h2>
<ul>
<li><a href="https://collectd.org/">Collectd</a> to collect statistics and save in RDDTool or send to a StatsD data collector. (without the need for a StatsD daemon)</li>
<li><a href="http://oss.oetiker.ch/rrdtool/">RRDTool</a></li>
<li><a href="https://grafana.com/">Grafana</a>    to display graphs</li>
<li><a href="http://munin-monitoring.org/">Munin</a> - <a href="http://www.slideshare.net/zembutsu/practical-resource-monitoring-with-munin-english-editon">Practical resource monitoring with Munin</a></li>
<li><a href="http://www.cacti.net/">Cacti</a></li>
<li><a href="https://www.mrtg.com/">MRTG</a></li>
<li><a href="http://www.zabbix.com/">Zabbix</a></li>
<li><a href="https://www.nagios.org/">Nagios</a></li>
<li><a href="http://graphite.readthedocs.io/en/latest/carbon-daemons.html">collecting data with Carbon daemon</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Why to have Public Version Control System for Open Source Projects?</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2017-08-27T14:30:01Z</updated>
    <pubDate>2017-08-27T14:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/public-version-control-for-open-source-projects" />
    <id>https://code-maven.com/public-version-control-for-open-source-projects</id>
    <content type="html"><![CDATA[<p>It is still not a universally accepted best practice, but these days most of the
companies already use some kind of a version control system for their software development.</p>
<p>Some people still find the version control systems a burden, but with further education
I think this can be improved.</p>
<p>In my experience open source projects had a much better track record using version control systems,
but there are still many individuals who write open source code without a public version control system.</p>
<p>Some might not even use a version control system, though I think that's quite rare.</p>
<p>One of the key features of Open Source is that other people can change the code and <b>contribute to the project</b>.</p>
<h2 class="title is-4">What if there is no public VCS?</h2>
<p>If there is no public version control system (VCS) the users who would like to improve the code will need to base their changes
on the most recently published version of the code.</p>
<p>This might mean that the bug they are trying to fix has already been fixed, but it has not been released. That would be both a <b>waste of time and a waste of goodwill</b>.</p>
<p>Two or more people might be solving the same issue during this period without knowing about each others effort. Again, more <b>waste of energy</b>.</p>
<p>If there is no public VCS, the potential contributor will have to create a <code>diff</code>, send it by e-mail and the author also needs
to manually handle the process using <code>patch</code>. This is how it was done before, but we can do much better today.</p>
<p><b>Lack of history</b>: Without a public version control system it will be impossible for potential contributors to see the history of your project.
For example to see where and why a bug might have been introduced.
Even if they have access to several released versions of your code, collecting
and comparing those versions is much harder than looking at the log of a version control system.
Even if they manage to build the history, they can only see changes from released version to
released version which probably contain many unrelated changes.</p>
<h2 class="title is-4">Let's be positive</h2>
<p>Instead of pointing out the negative aspects of not having a public VCS, let's try to see how a public VCS improves life:</p>
<p>Slightly unrelated, but I have to get this out of my system: having a <b>public bug tracking system</b> makes it much easier for people to report bugs and see what are the already reported bugs.</p>
<p>Having a <b>public VCS coupled with a bug tracker</b> will improve your overall development process and will
probably help improving the quality of your code. (And probably the quality of your programming life.)
What &quot;coupled&quot; might mean in this context is that the tickets in the bug-tracking system
and the commits (check-ins) in the version control system can easily refer to each other.</p>
<p>Having a public VCS like GitHub enables <a href="/why-is-git-better-than-subversion-for-open-source-projects">decoupling of core vs contributor</a> open source teams.</p>
<h2 class="title is-4">Using GitHub</h2>
<p>While there are other options for having Public Version Control System, these days Git, and <a href="http://github.com/">GitHub</a>
seems to be the de-facto standard. Not only does GitHub provide free repository for your open source projects, it also makes it
super easy for potential contributors to send in their patches. GitHub makes it extremely easy for you to merge them if you accept
the changes or discuss them if they need further work.</p>
<p>Having a GitHub account can help you with employment. In the answer to the question
<a href="https://www.quora.com/Why-is-there-an-emerging-notion-that-people-who-dont-use-Github-are-bad-programmers">Why is there an emerging notion that people who don't use Github are bad programmers?</a>
<a href="https://github.com/mpj">Mattias Petter Johansson</a> pointed out that having an active GitHub account can help potential employers assess the quality of your code and even
your attitude toward other programmers. So while this has nothing to do with your own projects it can be a valuable asset to you.</p>
<h2 class="title is-4">Version control of open source projects</h2>
<p>In order to see how widespread is the use (or the lack of use) of public version control systems, I've started to collect
information about the use of public VCS-es in Open source projects.</p>
<p>We can check the <a href="https://perlmaven.com/recent">recent Perl modules on CPAN</a> to see which one
<a href="http://cpan.perlmaven.com/#lab/no-repository">has no repository in the META files</a> and which on
<a href="http://cpan.perlmaven.com/#lab/no-license">has no &quot;license&quot; field in the META files</a>.</p>
<p>On the <a href="http://pydigger.com/stats">stats page of PyDigger</a> you can see that about 66% of the Python packages have a GitHub repository
we could identify. Some of the others still might have GitHub repository or some other public VCS, but the <a href="http://pydigger.com/">PyDigger</a>
system could also be improved.</p>
<p>Libraries of other languages could be also researched.</p>
<p>If you are interested in contributing to one of the projects that does not have an (obvious) public VCS, the first thing I'd ask the main developer
is a link to the VCS. If they don't have one, you might want to reconsider contributing to that project, or if you have a lot of energy you might volunteer to introduce
version control to the developer.</p>
<img src="/img/Git-Logo-2Color.png" alt="Git logo">
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Project Management, Quality Assurance, and Test Automation in Open Source Projects</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2017-08-16T07:30:01Z</updated>
    <pubDate>2017-08-16T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/quality-assurance-and-automated-testing-in-open-source-projects" />
    <id>https://code-maven.com/quality-assurance-and-automated-testing-in-open-source-projects</id>
    <content type="html"><![CDATA[<p>Some Open Source projects are almost exclusively developed inside a corporation which provides Project management, development, and QA just as the do for their proprietary products.</p>
<p>Others, actually most of the Open Source projects, don't have a dedicated project manager and QA team. They don't even have a paid team of developers. Just a few volunteers who spend their own time to work on the project they care about.</p>
<p>Yet there are plenty of high-quality Open Source project that provide an enormous value to their users and to the world in general.</p>
<p>How does that work? How do Open Source projects ensure high quality?</p>
<p>In this article series we are going to look at some Open Source projects and see how they do this.</p>
<p>We are going to look at projects that are pure volunteer-based and projects that are (almost 100%) internal to a company. Project where the company releases the source code under an Open Source license, but there is effectively no developer community outside the company.</p>
<h2 class="title is-4">The audience - are these articles for you?</h2>
<p>You might be a software developer, team leader, QA engineer, QA manager, or CxO in a company with extensive technology who has been wondering: Can we trust Open Source projects?</p>
<p>You might be even wondering: Can we learn anything from the open source world and implement in our company to improve the quality of our proprietary software?</p>
<p>Finally, you might recognize the value you have already received from the Open Source world and you would like to <b>&quot;give back&quot;</b>. Learning about quality and value creation in Open Source projects is the first step towards contributing to one of the projects.</p>
<h2 class="title is-4">Content</h2>
<p>
While the main focus of these articles is the testing phase it is often easier to understand how it works if we see the whole development process of the project.
Especially as in most of the cases testing is integrated in the development process of the applications and is done by the developers themselves.
<p>These are some of the issues we are going to look at, but the list will change as we learn more about the practices of the various Open Source projects.</p>
<ul>
<li>
<p>Who are the developers? Are they employed by one or more companies to work on the project? Are they volunteers or paid? Who pays them?</p>
</li>
<li>
<p>Who makes the decisions in the project? A core team? A project manager?</p>
</li>
<li>
<p>Which Version Control System (VCS) are they using? Git? Subversion? Mercurial?</p>
</li>
<li>
<p>Who has the right to commit to the version control system? (is there a rule-book for that?)</p>
</li>
<li>
<p>Which bug-tracking system is used?</p>
</li>
<li>
<p>What versions of the software are supported?</p>
</li>
<li>
<p>In which language(s) is the product written?</p>
</li>
<li>
<p>How to compile/build the product? (Link to the instructions is enough)</p>
</li>
<li>
<p>Is there a test suite for automated tests?</p>
</li>
<li>
<p>Where are the tests located? Same repository? Which directory?</p>
</li>
<li>
<p>In which languages(s) are the tests written?</p>
</li>
<li>
<p>How to run the tests?</p>
</li>
<li>
<p>Are they running smoke test?</p>
</li>
<li>
<p>Is there an CI (Continuous Integration) system?</p>
</li>
<li>
<p>Do they have a test farm? Is it company owned or volunteer based as well?</p>
</li>
<li>
<p>Where are the test reports?</p>
</li>
<li>
<p>How easy is it to setup smoke testing?</p>
</li>
<li>
<p>Do they have centralized management of the testing effort or is it distributed?</p>
</li>
<li>
<p>What is the automated test coverage?</p>
</li>
<li>
<p>Are there parts that need manual testing? (That would be very hard to test automatically.)</p>
</li>
<li>
<p>Are there manual testers involved?</p>
</li>
</ul>
<p>Diversity of test environment:</p>
<ul>
<li>OS-es: Linux , *BSD , OSX, Windows  (build farm by volunteers)</li>
<li>Compiler (clang gcc, Visual Studio, mingws, etc)</li>
<li>Database backends (MySQL, PostgreSQL, SQLite, Oracle, MS SQL Server, Sybase, etc.)</li>
</ul>
<h2 class="title is-4">Relevant material</h2>
<ul>
<li><a href="http://producingoss.com/">Producing Open Source Software</a> by Karl Fogel is an excellent book about the subject.</li>
</ul>
<h2 class="title is-4">History</h2>
<p>The first version of this article was written in 2007, exactly 10 years ago. Then it was followed by a number of articles discussing several open source projects. Since then a lot has changed in the Open Source developer world. We are going to revisit the projects covered in the old articles and discuss plenty of other projects as well.</p>
<h2 class="title is-4">Articles by others</h2>
<ul>
<li>
<p><a href="http://sqlite.org/testing.html">How SQLite Is Tested</a></p>
</li>
<li>
<p><a href="https://www.confluent.io/blog/apache-kafka-tested/">How Apache Kafka is Tested</a></p>
</li>
<li>
<p><a href="https://daniel.haxx.se/blog/2017/10/12/testing-curl/">Testing curl</a> by Daniel Stenberg. Author and maintainer.</p>
</li>
</ul>
<h2 class="title is-4">Old Articles</h2>
<ul>
<li><a href="https://szabgab.com/quality-assurance-of-perl-5.html">Quality Assurance of Perl 5</a></li>
<li><a href="https://szabgab.com/smoked-parrot.html">Smoked Parrot</a></li>
<li><a href="https://szabgab.com/testing-sqlite.html">Testing SQLite</a></li>
<li><a href="https://szabgab.com/testing-nut-the-network-ups-tools.html">Testing NUT, the Network UPS Tools</a></li>
<li><a href="https://szabgab.com/testing-ghc-the-glasgow-haskell-compiler.html">Testing GHC, the Glasgow Haskell Compiler</a></li>
<li><a href="https://szabgab.com/testing-ruby.html">Testing Ruby</a></li>
<li><a href="https://szabgab.com/testing-pugs-and-perl-6.html">Testing Pugs and Perl 6</a></li>
<li><a href="https://szabgab.com/testing-postgressql.html">Testing PostgresSQL</a></li>
</ul>
<h2 class="title is-4">Case Studies</h2>
<h2 class="title is-4">Newsletter</h2>
<p>If you are interested in hearing about new entries in this series, sign up to our
<a href="https://mail.szabgab.com/cgi-bin/mailman/listinfo/test-automation-tips">newsletter</a> called
Test Automation Tips.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Pair Programming</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2017-04-20T14:30:01Z</updated>
    <pubDate>2017-04-20T14:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/pair-programming" />
    <id>https://code-maven.com/pair-programming</id>
    <content type="html"><![CDATA[<p><a href="https://en.wikipedia.org/wiki/Pair_programming">Pair programming</a> is one of the key elements of <a href="https://en.wikipedia.org/wiki/Extreme_programming">Exrteme Programming</a>. It is an <a href="https://en.wikipedia.org/wiki/Agile_software_development">agile software development technique</a> in which two programmers work together at one workstation.</p>
<p>In this article we'll see some explanation on why it is good and how to do it. You'll also see information on how to do it locally and remotely.</p>
<p>Finally this also includes the description of the Pair Programming workshops I run.</p>
<h2 class="title is-4">Advantages of Pair Programming</h2>
<ul>
<li>Better software through faster feedback</li>
<li>Better problem solving.</li>
<li>Improved software quality - less bugs - cheaper software.</li>
<li>Improved knowledge sharing. (The vacation of the leaving of one person will have smaller impact the knowladge of the company)</li>
<li>Faster learning. (Of new techniques and of the code-base itself.)</li>
<li>Higher job satisfaction (better team morale).</li>
<li>It is Fun</li>
</ul>
<h2 class="title is-4">Disadvantages of Pair Programming</h2>
<ul>
<li>At first it might be difficult to convince management that you are not wasting time.</li>
<li>Pair programming is exhausting. Plan for breaks! Even with breaks you will not be able to sustain it for 8-9 hours every day.</li>
<li>Personal hygiene is even more important than when you &quot;just&quot; work in the same office.</li>
</ul>
<h2 class="title is-4">Related articles</h2>
<ul>
<li><a href="https://collaboration.csc.ncsu.edu/laurie/Papers/ESE%20WilliamsPairProgramming_V2.pdf">Research complied on Pair Programming by Laurie Williams</a></li>
<li><a href="https://xbsoftware.com/blog/cost-bugs-software-testing/">The Cost of Bugs: Why You Can’t Ignore Software Testing</a> (A nice graph showing the relation of time passed since bug introduced vs. cost of fixing the bug.</li>
<li><a href="https://www.isixsigma.com/industries/software-it/defect-prevention-reducing-costs-and-enhancing-quality/">Defect Prevention: Reducing Costs and Enhancing Quality</a> - explaining that finding bugs later costs a lot more than finding bugs during development. Some research is included.</li>
<li><a href="https://thomassundberg.wordpress.com/2012/06/15/pair-programing/">Pair Programing by Thomas Sundberg</a> actually this article on <a href="http://www.thinkcode.se/blog/2012/06/15/pair-programing">Pair Programing</a>.</li>
<li><a href="http://blog.code-cop.org/2012/08/remote-pair-practice.html">Remote Pair Practice by Code Cop</a></li>
<li><a href="https://www.google.com/search?q=pair+programming+illuminated">Pair Programming Illuminated</a> (book)</li>
<li><a href="https://www.youtube.com/watch?v=rIcUXcyC6BA">I Have Pair Programmed for 27,000 Hours: Ask Me Anything!</a> (30 min video)</li>
<li><a href="https://medium.freecodecamp.org/want-to-be-a-developer-you-should-probably-be-pair-programming-2c6ec12c4866">Want to be a developer? You should probably be Pair Programming.</a> (an explanation with some strange imagery)</li>
<li><a href="https://www.youtube.com/watch?v=W_hsEi_UZHE">Sam Livingston-Gray gSchool talk: Tools for Pair Programming (remote or otherwise)</a> (45 min video)</li>
<li><a href="https://www.youtube.com/watch?v=Yq1qgWvSIdI">Thomas Sundberg &quot;(Remote) Pair programming&quot;</a> (45 min video)</li>
<li>&lt;a href=&quot;<a href="https://medium.com/@jdxcode/how-to-pair-program-d6741077e513%22%22%3EHow">https://medium.com/@jdxcode/how-to-pair-program-d6741077e513&quot;&quot;&gt;How</a> to Pair Program</a></li>
<li><a href="https://www.thoughtworks.com/insights/blog/effective-navigation-in-pair-programming">Effective Navigation in Pair Programming</a></li>
<li><a href="https://blog.rapid7.com/2017/01/27/5-rules-of-pair-programming-etiquette/">5 Rules of Pair Programming Etiquette</a></li>
<li><a href="https://www.coursereport.com/blog/how-to-get-the-most-out-of-pair-programming">How To: Get the Most Out of Pair Programming</a></li>
<li><a href="http://www.extremeprogramming.org/rules/pair.html">XP - Pair Programming</a></li>
<li><a href="https://www.wikihow.com/Pair-Program">How to Pair Program</a></li>
<li><a href="https://medium.com/@fagnerbrack/pair-programming-8cfbf2dc4d00">Pair Programming</a> a 4-part series of articles</li>
</ul>
<h3 class="title is-5">Cockburn , Laurie Williams: XP 2000 pair programming</h3>
* 15% more time
* 15% less bugs
* [The Costs and Benefits of Pair Programming (2000) ](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.26.9064)
<h2 class="title is-4">Pair Programming Workshops</h2>
<p>These workshops are organized in Israel via the <a href="https://www.meetup.com/Code-Mavens/">Code Mavens</a> Meetup group.</p>
<p>In these workshop we provide an opportunity to experiment with Pair Programming without the pressure and fear involved in production code.</p>
<p>You already know how to program alone. You can do that as much as you like at work or at home. Here we try something else.</p>
<p>We would like to learn from each other something we can rarely do in a company where everyone is responsible for their own code. And no, code reviews as they are done in most places usually don't help that much.</p>
<p>In this workshop our primary objective is to experience how pair programming works and to experiment with various setups. You are going to work in pairs. We will start with the driver navigator approach with 5 min per rotation. Each pair can then adjust as they feel right. The point of the session is to learn what works for you. The navigator driver technique means in each pair one person will be the navigator who thinks about the big picture and who tell the driver what to write. Then, after a few minutes of work the two people will switch task.
There will be questions for example what to do if one person is familiar with a module/library that could help in your work and other one not. For how long will you stop to explain the benefits of that library? How much time will you spend teaching the other person. These issues and the way you handle them is part of the experiment. Different pairs will reach different conclusions.</p>
<p>A the beginning of the workshop you will get a project to work on. Your task will be to try to impement the project along with tests as you feel fit.</p>
<p>At the end of the workshop we will have a retrospective in which every person will be able to tell what was their experience. What would they change in the process and in the workshop to make it better for them.</p>
<p>A few things to remember.
You will be working much closer to another person. Make sure this does not cause any unpleasant feeling.
You will work on a single computer. The owner of the computer will be much more comfortable with the keyboard of that computer and the tools ans the setting will reflect the preferences of that person. Make sure this does not impide on the work done by the other person. ( as much as you might love and know vim, don't force the other person to use it when it is their turn to drive. On the other hand you can use this opportunity to show why do you love your editor.
Make sure both of you can comfortably see the code. This means the fonts are large enough for both people and the color scheme works for both person. Some people are used to dark background others prefer white background. Some people are color blind and it is hard for them to see specific colors. Be prepared to change font size and the color of your editor.
Be flexible and be patient with each other.
In every cycle the navigator is expected to do most of the talking, but the driver should also be able to voice their opinion. They are also encouraged to say what they are writing.
If you really cannot work on each others environment you could try to switch computers when you switch roles. For this youll need to be able to rapidly transfer the files you are working on from one syatem to another. Git and github can be used for that.</p>
<p>Also remember that in a single 2 hour session you wont really learn pair programing. It takes several such sessions till you start feeling the positive impact of it. This workshop is there to allow you to taste it and to get started with it.
Working with a person you don't know much have both advantages and disadvantages. Try to see the bright side of it.</p>
<h3 class="title is-5">Audience</h3>
<p>Both students and experienced developers are welcome!</p>
<h3 class="title is-5">Objectives</h3>
<p>The primary objective of this session is to let you experiment with Pair Programming. To let you learn from each other without the pressure and fear involved in production code.</p>
<h3 class="title is-5">Process</h3>
<ul>
<li>At the beginning of the workshop you'll get an explanation about Pair Programming and our process</li>
<li>Then you'll get a task that you can implement in a few hours of work.</li>
<li>We will also arrange that each one of you will have a pair to work with.</li>
<li>Then you'll do the work in pairs.</li>
<li>At the end we'll have a review of the results.</li>
</ul>
<h2 class="title is-4">Pairing process</h2>
<p>If you already have a person you'd like to work with that's fine.
Otherwise we have two strategies:</p>
<ul>
<li>We will group the people by programming language they'd like to use. Then within each group we might(!) arrange for proficiency in that languages and we'll try to put together people who are close to each other in term of proficiency.</li>
<li>Random pairing process: We'll put the names on pieces of paper. Put them in a hat and pull the names for the pairs from there.</li>
</ul>
<h3 class="title is-5">Development Methodology</h3>
<p>You are recommended to use TDD - Test Driven Development. You'll get help if you don't know how to start.</p>
<h3 class="title is-5">Development Languages</h3>
<p>You can use any language you'd like, but you need to find a pair who will want to use the same language. The best would be if posted the language of your preference as a comment to this announcement and see if others respond. In any case I'd glad to see developers in the following languages join us:</p>
<ul>
<li>JavaScript</li>
<li>Perl</li>
<li>Python</li>
</ul>
<h3 class="title is-5">Spoken Languages</h3>
<p>There will be a short presentation in Hebrew which can be switched to English if some people have hard time understanding Hebrew.
The pairs can speak whatever language they both know. Hebrew, English, Arabic, Russian, Hungarian...</p>
<h3 class="title is-5">Patterns for working in pairs</h3>
<ul>
<li>Driver - Navigator</li>
<li>Driver - Observer (aka Teacher - Observer)</li>
<li>Joint  discussion  and  brainstorming - typist</li>
</ul>
<p>In the Driver-Navigator pattern one person, the Driver, writes the code. The other person, the Navigator, tells the driver what to write.  The Navigator explains the task at the highest possible abstraction that matches the knowledge and experience level of the driver.</p>
<p>In the Driver-Observer pattern the Driver writes the code and articulates and explains what is being done. The Observer watches to learn and to find issues with the code. The Observer is free to ask questions.</p>
<h3 class="title is-5">Patterns for switching roles</h3>
<ul>
<li>Time based (Pomodoro) e.g. every 5, 15, or 25 minutes.</li>
<li>Ping-Pong: frequent role changing</li>
<li>Ping-Pong: A: Test, B: implement, refactor, test for next task.</li>
<li>Ping-Pong: Change after every implemented method</li>
<li>Far sight navigator: Navigator is looking ahead, planning. They don't switch very often</li>
<li>Silent: the pairs don't speak. One implements test, other implements the code.</li>
</ul>
<p>We are going to experiment with the Driver-Navigator method starting with 5 min rotations. In this method one person is the driver who writes the code. The other person is the Navigator who tells the driver what to write.</p>
<p>The navigator explains the task at the highest possible abstraction that matches the knowledge and experience level of the driver.</p>
<p>As time progresses you will pay attention how you work and you can adjust.
The critical part is that you both pay attention.</p>
<h3 class="title is-5">Requirements</h3>
<p>You bring your own computer. (In the end we'll need one computer per pair, but you might be switching computer as well.</p>
<p>You will work very closely with another person. Please take extra care of your <b>Personal hygiene</b>. Bring some chewing gums if necessary.</p>
<h3 class="title is-5">Expectations</h3>
<p>Pair programming might not be good for everyone and even people who eventually start likeing it might not work well with evey potential pair.</p>
<p>In addition, in order to be good at pair programming one needs to work that way for many hours.
A single workshop of 2-4 hours will only give you a taste.
In order to really see the benefit most people have to practice it during several 2-4 hours long sessions.</p>
<h3 class="title is-5">Retrospective</h3>
<p>At the end of the session we are going to have a retrospective. This is 10 min session in which every one can tell us about their experience. What did they learn. How would they improve the pairing and the whole workshop.</p>
<h3 class="title is-5">Tools for local pairing</h3>
<ul>
<li>
<p>One computer to be used by both people.</p>
</li>
<li>
<p>If your setup is very different (OS, editor, etc.) it might be easier to use a Git repository to pass the code back-and-forth and switch computers when switching driver.</p>
</li>
</ul>
<h2 class="title is-4">Tools for remote pairing</h2>
<ul>
<li>
<p>Network connection</p>
</li>
<li>
<p>Shared coding environment</p>
</li>
<li>
<p>Person-to-Person communication (video, audio, text)</p>
</li>
<li>
<p>Multi-user editors (Cloud9, SubEthaEdit)</p>
</li>
<li>
<p>Screen sharing (VNC, Skype, JoinMe, iChat)</p>
</li>
<li>
<p>Terminal: (SSH and tmux or screen)</p>
</li>
<li>
<p>one dev hosts on their machine or all devs SSH to a shared server</p>
</li>
<li>
<p><a href="https://www.teamviewer.com/">Teamviewer</a></p>
</li>
</ul>
<p>The setup of Sam Livingston-Gray:</p>
<ul>
<li>Network layer: SSH over Hamachi</li>
<li>Code: wemux + vim <a href="https://github.com/livingsocial/ls-pair">ls-pair</a></li>
<li>For pairing: FaceTime in iPad (built-in mic and speaker)</li>
<li>For meetings of pairs with n &gt; 2: Google Hangout (external mic and speaker, plus $3 Shush.app for push-to-talk)</li>
</ul>
<h2 class="title is-4">Coding Dojo</h2>
<p>Some generic ideas for tasks (or Katas)</p>
<ul>
<li>From scratch given the full task up-front.</li>
<li>Where the task is given step by step.</li>
<li>Give an existing applications that needs refactoring.</li>
<li>Where the tests already exist, the participants only need to implement the code.</li>
<li>Project that depends on one language only.</li>
<li>Project that depends on multiple languages.</li>
</ul>
<p><a href="/exercises">Exercises and task</a> to do in a Coding Dojo.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How to contribute to an Open Source project?</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2017-03-22T10:30:01Z</updated>
    <pubDate>2017-03-22T10:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/how-to-contribute-to-an-open-source-project" />
    <id>https://code-maven.com/how-to-contribute-to-an-open-source-project</id>
    <content type="html"><![CDATA[<p>In the article on <a href="https://perlmaven.com/how-to-prepare-for-a-perl-job-interview">how to prepare for a Perl job interview</a>,
I mentioned, one of the best ways to improve your <b>hireability</b> is to constantly learn new things, and constantly improve yourself.
The same is true for any language and technology.</p>
<p>Probably the best way to do that is by building something. If it is an open source project it has the added benefit that you
can show the results to the prospective employer.</p>
<p>You don't even have to build something from scratch, you can also contribute to an existing project.</p>
<p>But how?
And do you need to be an expert or can a beginner join a project?</p>
<h2 class="title is-4">TL;DR</h2>
<p>I think one of the best ways to contribute to an open source project, especially if it is a library that should be used by other programmers,
is to prepare examples. There are tons of Open Source projects that would benefit from better documentation and/or working examples.</p>
<p>So even if you are a beginner, you can try to use a module and write a minimal example.
If you also add explanation to the example it is even better.</p>
<h2 class="title is-4">Who can contribute?</h2>
<p>Before explaining the how, let's see the prerequisites. I would say there are no prerequisites, but that would not be really true.
You are expected to be able to communicate - at some level. If you feel your command of the English language is not good enough,
you can try to find other people speaking your language.  Check out a <a href="http://www.pm.org/">Perl Monger</a> group
or some near-by <a href="https://www.meetup.com/">Meetup</a> that covers the technology you are interested in.</p>
<p>You are expected to be able to be nice to other people.
Though I saw quite a few people who seem to think being nasty to others have some value, but frankly I think they just
look for excuses to be nasty.</p>
<p>Do you need to be an expert in the field? e.g. an expert Perl or Python programmer?</p>
<p>Definitely not. As a beginner, you might not be able to tackle the most difficult issues, but there are always plenty of smaller,
less involved issues. There are always better ways to document something. And if we are talking about a Perl/Python/PHP/Ruby/JavaScript library,
then the documentation might be just writing an example using the module.</p>
<p>You probably should have some understanding of version control systems.
Particularly Git and <a href="https://github.com/">GitHub</a> which has been the favorite by many developers.</p>
<h2 class="title is-4">Find a project</h2>
<p>The first thing you need to do is to decide what project might interest you.</p>
<p>If you are using Perl, there are tons of Perl modules on <a href="http://metacpan.org/">CPAN</a>.</p>
<p>For Python programmers there are Python packages on <a href="https://pypi.python.org/">PyPI</a>.</p>
<p>Lots of Ruby Gems on, well, <a href="https://rubygems.org/">RubyGems</a>.</p>
<p>PHP code on <a href="http://pear.php.net/">PEAR</a>.</p>
<p>JavaScript libraries on <a href="http://npmjs.org/">npm</a>.</p>
<p>Just to name a few.</p>
<p>Most of them have bugs, missing features, or missing documentation.</p>
<h2 class="title is-4">What to contribute?</h2>
<p>Once you've located a project that sounds interesting and relevant to you,
find the bug-tracking system of the project and check what bugs are reported there.</p>
<p>You might get lucky and even find marks showing which bug is expected to be easy to fix.</p>
<p>If none of them seem to be for your level of expertise you can see if there are tests for
the project. You could write a test case that reproduces one of the problems. Submitting
that would be a huge help as well and knowing how to write unit-tests is an advantage
when you get to a job interview.</p>
<h2 class="title is-4">How to contribute?</h2>
<p>Most active projects have a public version control system. The vast majority of them are using
<a href="https://github.com/">GitHub</a>. So check if the package links to its version control system.</p>
<p>Find a bug or a feature request and try to work on that.</p>
<h2 class="title is-4">Volunteers</h2>
<p>One of the important things to remember is that the people who have published these Open source projects
almost always do that in their free time sharing the code as a gift. That's what you are doing too, but
this means you cannot go and demand that they will include your work in their project.
Unfortunately you can't even expect timely reply to your suggestions.</p>
<p>It would be nice, and in an ideal world they would reply within a few hours,
but there can be lots of reasons why they don't do that.</p>
<p>So prepare small changes. Small examples. Both to make it easier for them to review and that you won't feel you wasted
a lot of time if your contribution is not accepted. Actually think it this way:</p>
<p>In order to practice you need to solve problems. You can work on totally made-up
<a href="/exercises">exercises</a> and then throw away your code, or you can work on projects of other people.
In the latter case if you are lucky your code will be used in the project and even if not, you are better off
than with the made-up exercises.</p>
<p>Anyway, be patient. Remember, the person on the other side is a developer just like you. Maybe with a bit more experience.</p>
<p>Most importantly enjoy the process. You are always learning something.</p>
<h2 class="title is-4">Comments</h2>
<p>Very nice article. There is a lot of free and open source software projects that needs contributions, and attentions also improvements out there that worth taking notice.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>X-forwarding to run GUI program in Vagrant box</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2017-02-23T15:30:01Z</updated>
    <pubDate>2017-02-23T15:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/xforwarding-from-vagrant-box" />
    <id>https://code-maven.com/xforwarding-from-vagrant-box</id>
    <content type="html"><![CDATA[<p>How can run a desktop GUI application inside my headless <a href="https://www.virtualbox.org/">VirtualBox</a> that was launched via
<a href="https://www.vagrantup.com/">Vagrant</a> ?</p>
<p>I already had an explanation on how to <a href="/setting-up-vagrant">set up Vagrant with VirtualBox</a>.
I assume you already have all that set up.</p>
<p>There is an</p>
<h2 class="title is-4">X-Server on the host</h2>
<p>You need to have an X-Server on you host-machine.</p>
<p>If you run a desktop Linux system as your host as  well, then you already have an X Server.</p>
<p>On Mac OSX you can install <a href="https://www.xquartz.org/">XQuartz</a></p>
<p>When writing this article I have not tried it on MS Windows, but as I recall I used
<a href="https://freedesktop.org/wiki/Xming/">Xming</a> at one of my clients.</p>
<h2 class="title is-4">Enable X-forwarding</h2>
<p>You need to enable X-forwarding in the guest operating system. Probably the best is to
do it via the Vagrant configuration file <code>Vagrantfile</code>:</p>
<pre><code class="language-ruby">  config.ssh.forward_x11 = true
</code></pre>
<h2 class="title is-4">ssh into the box</h2>
<p>Instead of using <code>vagrant ssh</code> we'll need to use the <code>ssh</code> command to access the
guest operating system.  Run <code>vagrant ssh-config</code> on the host in order to find out the
configuration details.</p>
<pre><code>$ vagrant ssh-config

Host default
  HostName 127.0.0.1
  User ubuntu
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/gabor/work/.vagrant/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardX11 yes
</code></pre>
<p>From this we can get the <b>User</b>, the <b>HostName</b>, the <b>Port</b>, and the location of the <b>IdentityFile</b>
that holds the private key we need to use.</p>
<p>In addition we need to supply the <code>-X</code> flag that tells ssh to use the X-forwarding.</p>
<pre><code>ssh ubuntu@127.0.0.1 -p 2222 -i /Users/gabor/work/.vagrant/private_key -X
</code></pre>
<p>Then you can already start desktop GUI applications.</p>
<p>Traditionally <code>xclock</code> and <code>xeyes</code> were used to test this as they are really simple X-based
applications, but if you cannot install either of those, you might have something like <code>xarclock</code>.</p>
<p>Once you know you can launch x applications in the guest and see them on the host, I recommend creating
and alias for the command by adding this to your <code>~/.bashrc</code> or <code>~/.bash_profile</code> in your
host. (Assuming Linux or OSX)</p>
<pre><code>alias vssh='ssh ubuntu@127.0.0.1 -p 2222 -i /Users/gabor/work/.vagrant/private_key -X'
</code></pre>
<p>and the reloading it using <code>source</code>.</p>
<p>That way the connection will be just a <code>vssh</code> away.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Filters in AngularJS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2017-01-27T12:30:01Z</updated>
    <pubDate>2017-01-27T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/filters-in-angularjs" />
    <id>https://code-maven.com/filters-in-angularjs</id>
    <content type="html"><![CDATA[<p>Filters in AngularJS have two major uses.</p>
<p>Some filters work as the <code>map</code> function in Perl, Python, Ruby, JavaScript and in many other languages.
They allow us to apply some transformation to one or more values at once.
Among many other things this can be used to change how a single value is displayed.</p>
<p>Other filters are similar to the <code>grep</code> function in Perl, which is called <code>select</code> in Ruby,
and <code>filter</code> in Python and JavaScript.
These filters usually apply to a list of values and return a subset of the original values.
They filter out certain values using some condition.</p>
<h2 class="title is-4">Filter as a transformer</h2>
<p>Filters in AngularJS can be used either in the HTML code or in the JavaScript code. Let's start with an example in the HTML code
where we apply a filter by using a single pipe <code>|</code> inside the double-curly braces:</p>
<pre><code class="language-javascript">{{ some_attribute | some_filter }}
</code></pre>
<h2 class="title is-4">Changing the format of a value in the HTML</h2>
<p>One example would be changing the display format of a value.
For example the <a href="https://docs.angularjs.org/api/ng/filter/number">number</a> filter will put commas after ever 3 digits
from the right to left as you would do if you wanted to make a large number more readable.</p>
<pre><code class="language-javascript">{{ some_attribute | number }}
</code></pre>
<p>So if some_attribute contains <code>1234.56</code> , the above expression will display <code>1,234.56</code></p>
<p>On the other hand, if the number has less than 4 digits on the left hand side of the decimal point (if there is one),
then it won't add any commas. <code>12</code> will stay <code>12</code>.</p>
<p>In addition to the commas, the <code>number</code> filter also rounds the number. By default it will round to 3 digits
after the decimal point, but you can add a parameter that sets the number of digits for rounding. Interestingly you
can even set this to a negative number which means round to that many digits to the left of the decimal point.</p>
<p>0-4 will be rounded down, 5-9 will be rounded up.</p>
<p>So given <code>price = 1234.56789</code> this will be the output:</p>
<table>
<tr><td>price             </td><td>1234.56789</td></tr>
<tr><td>price | number    </td><td>1,234.568</td></tr>
<tr><td>price | number:0  </td><td>1,235</td></tr>
<tr><td>price | number:4  </td><td>1,234.5679</td></tr>
<tr><td>price | number:-1 </td><td>1,230</td></tr>
<tr><td>price | number:-2 </td><td>1,200</td></tr>
</table>
<p>Let's see a full example that you can also try.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/filters/change_number_in_html.html">examples/angular/filters/change_number_in_html.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js&quot;&gt;&lt;/script&gt;
 
  &lt;script&gt;
   angular.module('DemoApp', [])
   .controller('DemoController', ['$scope', function($scope) {
        $scope.price = 1234.56789;
   }]);
  &lt;/script&gt;
 
&lt;/head&gt;
&lt;body ng-app=&quot;DemoApp&quot; ng-controller=&quot;DemoController&quot;&gt;
&lt;h1&gt;number filter used in HTML&lt;/h1&gt;

&lt;input ng-model=&quot;price&quot;&gt;

&lt;table&gt;
&lt;tr&gt;&lt;td&gt;price             &lt;/td&gt;&lt;td&gt;{{price}}            &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;price | number    &lt;/td&gt;&lt;td&gt;{{price | number}}   &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;price | number:0  &lt;/td&gt;&lt;td&gt;{{price | number:0}} &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;price | number:4  &lt;/td&gt;&lt;td&gt;{{price | number:4}} &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;price | number:-1 &lt;/td&gt;&lt;td&gt;{{price | number:-1}}&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;price | number:-2 &lt;/td&gt;&lt;td&gt;{{price | number:-2}}&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;


</code></pre>
<p><a href="examples/angular/filters/change_number_in_html.html">view</a></p>
<h2 class="title is-4">Changing the format of a value in the JavaScript code</h2>
<p>While I think this is less interesting, the filters can be also used in the JavaScript code.
For this to work we need to <a href="http://code-maven.com/dependency-injection-in-angularjs">inject</a> the <a href="https://docs.angularjs.org/api/ng/service/$filter">$filter</a>
service in the controller:</p>
<pre><code class="language-javascript">.controller('DemoController', ['$scope', '$filter', function($scope, $filter) {
</code></pre>
<p>Then we can use the <code>$filter</code> object as a function, passing the name of the filter to it,
which itself returns the conversion function. We can pass the raw value to it:</p>
<pre><code class="language-javascript">$scope.price_number = $filter('number')($scope.price);
</code></pre>
<p>We can also pass a second parameter to it which, in the case of the <code>number</code> filter,
indicates the number of digits for rounding.</p>
<pre><code class="language-javascript">$scope.price_number4 = $filter('number')($scope.price, 4);
</code></pre>
<p>The results are the same as in the HTML code, but you can try that here too with the
big difference that the code converting the raw number to formatted numbers will only run
once when we load the page and thus the input box in this example is rather pointless.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/filters/change_number_in_js.html">examples/angular/filters/change_number_in_js.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js&quot;&gt;&lt;/script&gt;
 
  &lt;script&gt;
   angular.module('DemoApp', [])
   .controller('DemoController', ['$scope', '$filter', function($scope, $filter) {
        $scope.price = 1234.56789;
        $scope.price_number = $filter('number')($scope.price);
        $scope.price_number0 = $filter('number')($scope.price, 0);
        $scope.price_number4 = $filter('number')($scope.price, 4);
        $scope.price_number_1 = $filter('number')($scope.price, -1);
        $scope.price_number_2 = $filter('number')($scope.price, -2);
   }]);
  &lt;/script&gt;
 
&lt;/head&gt;
&lt;body ng-app=&quot;DemoApp&quot; ng-controller=&quot;DemoController&quot;&gt;
&lt;h1&gt;number filter used in JavaScript&lt;/h1&gt;

&lt;input ng-model=&quot;price&quot;&gt;

&lt;table&gt;
&lt;tr&gt;&lt;td&gt;price             &lt;/td&gt;&lt;td&gt;{{price}}          &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;price | number    &lt;/td&gt;&lt;td&gt;{{price_number}}   &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;price | number:0  &lt;/td&gt;&lt;td&gt;{{price_number0}}   &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;price | number:4  &lt;/td&gt;&lt;td&gt;{{price_number4}}   &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;price | number:-1 &lt;/td&gt;&lt;td&gt;{{price_number_1}}   &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;price | number:-2 &lt;/td&gt;&lt;td&gt;{{price_number_2}}   &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;


</code></pre>
<p><a href="examples/angular/filters/change_number_in_js.html">view</a></p>
<h2 class="title is-4">Filter as a, well, filter</h2>
<p>In the second set of examples we'll see how to us the AngularJS <code>filter</code> to
filter out some of the elements from a list. This too can be used either in the
HTML code or in the JavaScript code. We'll start with the HTML code.</p>
<h2 class="title is-4">Filter out some of the values in HTML</h2>
<p>For this example we need 3 things:</p>
<p>First we need to have an attribute with a list of values. For example a list of numbers.</p>
<pre><code class="language-javascript">$scope.numbers = [1, 2, 3, 4, 5, 6, 7, 8];
</code></pre>
<p>Then we need a function, that will accept a single value and return <code>true</code> if
we would like to keep that value and <code>false</code> if we would like to throw it away.
We need to assign this function to an attribute of the <code>$scope</code> to make
it available inside the HTML code.</p>
<p>For our example we will create a function called <code>odd</code> that will return <code>true</code>
if the <code>input</code> was an odd number. That is if dividing it by 2 will have 1 remaining,
or in other words if <a href="https://en.wikipedia.org/wiki/Modulo_operation">modulo</a> 2 we get 1.</p>
<pre><code class="language-javascript">$scope.odd = function(input) { return input % 2 === 1 };
</code></pre>
<p>(Actually we don't even need the <code>=== 1</code> part in this code, but for extra clarity I added it.)</p>
<p>Then comes the interesting part.</p>
<p>Normally if we would like to display the content of an array we use the <code>ng-repeat</code> directive to
iterate over it. So thats what we would do with the <code>numbers</code> array as well:</p>
<pre><code class="language-html">&lt;li ng-repeat=&quot;n in numbers&quot;&gt;{{n}}&lt;/li&gt;
</code></pre>
<p>We can apply the <code>odd filter</code> using the pipe <code>|</code> followed by the word <code>filter</code> followed
by <code>odd</code>, the name of our function:</p>
<pre><code class="language-javascript">&lt;li ng-repeat=&quot;n in numbers | filter:odd&quot;&gt;{{n}}&lt;/li&gt; 
</code></pre>
<p>Looking back to the previous example you might notice that actually in our case the filter was called <code>filter</code>
and <code>odd</code> was its parameter.</p>
<p>In the <a href="https://docs.angularjs.org/api/ng/filter/filter">documentation of $filter</a> this parameter is called the
<code>expression</code>.</p>
<p>The full example for you to see and try can be found here:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/filters/filter_odd_values_in_html.html">examples/angular/filters/filter_odd_values_in_html.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js&quot;&gt;&lt;/script&gt;
 
  &lt;script&gt;

   angular.module('DemoApp', [])
   .controller('DemoController', ['$scope', function($scope) {
        $scope.numbers = [1, 2, 3, 4, 5, 6, 7, 8];
        $scope.odd = function(input) { return input % 2 === 1 };
   }]);
  
  &lt;/script&gt;
 
&lt;/head&gt;
&lt;body ng-app=&quot;DemoApp&quot; ng-controller=&quot;DemoController&quot;&gt;
&lt;h1&gt;Show only odd numbers using filter in HTML&lt;/h1&gt;

&lt;ul&gt;
  &lt;li ng-repeat=&quot;n in numbers&quot;&gt;{{n}}&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;ul&gt;
  &lt;li ng-repeat=&quot;n in numbers | filter:odd&quot;&gt;{{n}}&lt;/li&gt; 
&lt;/ul&gt;

&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/filters/filter_odd_values_in_html.html">view</a></p>
<h2 class="title is-4">Filter out some of the values in JavaScript</h2>
<p>The same filter can also be used in the JavaScript code. For this,
just as in the previous JavaScript example, we need to <a href="http://code-maven.com/dependency-injection-in-angularjs">inject</a>
the <code>$filter</code> service:</p>
<pre><code class="language-javascript">.controller('DemoController', ['$scope', '$filter', function($scope, $filter) {
</code></pre>
<p>Naturally we need the data to work on. Just as previously.</p>
<pre><code class="language-javascript">$scope.numbers = [1, 2, 3, 4, 5, 6, 7, 8];
</code></pre>
<p>We need the <code>odd</code> function, but this time it does not need to be part of the <code>$scope</code>
as it is only used within our JavaScript code.</p>
<pre><code class="language-javascript">var odd = function(input) { return input % 2 === 1 };
</code></pre>
<p>Then we can use <code>$filter</code> as a function passing the name of the filter
to it, which is, <code>filter</code>. (I know, you might already have filter-overdose.)
This will return a function that accepts the data as the first parameter
which is <code>$scope.numbers</code> in our case,
and the name of the <code>expression</code>
to be used for the filtering which is the name <code>odd</code> in our case.</p>
<pre><code class="language-javascript">$scope.odd_numbers_angular = $filter('filter')($scope.numbers, odd);
</code></pre>
<p>Actually, I am not sure at all if this form is useful at all. After all, we can
use the <code>filter</code> method which is available on every JavaScript Array
and for that we don't need any help from AngularJS. We don't even need the
<code>$filter</code> to be injected in our controller:</p>
<pre><code class="language-javascript">$scope.odd_numbers_plain = $scope.numbers.filter(odd);
</code></pre>
<p>The full example with both solution inside the JavaScript code can be found here:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/filters/filter_odd_values_in_js.html">examples/angular/filters/filter_odd_values_in_js.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js&quot;&gt;&lt;/script&gt;
 
  &lt;script&gt;

   angular.module('DemoApp', [])
   .controller('DemoController', ['$scope', '$filter', function($scope, $filter) {
        $scope.numbers = [1, 2, 3, 4, 5, 6, 7, 8];

        var odd = function(input) { return input % 2 === 1 };

        $scope.odd_numbers_angular = $filter('filter')($scope.numbers, odd);

        $scope.odd_numbers_plain = $scope.numbers.filter(odd);
   }]);
  &lt;/script&gt;
 
&lt;/head&gt;
&lt;body ng-app=&quot;DemoApp&quot; ng-controller=&quot;DemoController&quot;&gt;
&lt;h1&gt;Show only odd numbers using filter in JavaScript&lt;/h1&gt;

&lt;ul&gt;
  &lt;li ng-repeat=&quot;n in numbers&quot;&gt;{{n}}&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;
&lt;ul&gt;
  &lt;li ng-repeat=&quot;n in odd_numbers_angular&quot;&gt;{{n}}&lt;/li&gt; 
&lt;/ul&gt;

&lt;hr&gt;
&lt;ul&gt;
  &lt;li ng-repeat=&quot;n in odd_numbers_plain&quot;&gt;{{n}}&lt;/li&gt; 
&lt;/ul&gt;

 
 
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/filters/filter_odd_values_in_js.html">view</a></p>
<h2 class="title is-4">Conclusion</h2>
<p>There is a lot more to experiment with filters, but this might give you the fist
step in understanding and using them. This might have clarified a bit the odd
(again this word?) overloading of the word <code>filter</code>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Quality and Value</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-12-19T14:01:01Z</updated>
    <pubDate>2016-12-19T14:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/quality-and-value" />
    <id>https://code-maven.com/quality-and-value</id>
    <content type="html"><![CDATA[<p>We talk a lot about creating high-quality (software) products or services, but it is not evan clear what do we mean by quality.
Maybe what we should really talk about is creating value. But to whom? To the client? To the shareholder? To the employees?</p>
<p>On this page I am collecting some concepts and links related to the subject. In time I hope this will be transformed
into something usable.</p>
<ul>
<li>Continuous Integration</li>
<li>Continuous Deployment</li>
<li>Deployment Rings</li>
<li>Who can deploy code?</li>
<li>Rollback</li>
<li>A/B Testing</li>
<li>Automated tests</li>
<li>Monitoring</li>
<li>Schema changes - how often, who can do it? Rollback?</li>
<li>Developer velocity</li>
<li>Response time (for bugs and feature requests)</li>
<li>Project management (Waterfall, Agile?)</li>
<li>Cloud hardware (services) vs your own servers?</li>
<li>Engineers mentoring each other?</li>
<li>Unified Engineering</li>
<li>Culture</li>
<li>DevOps</li>
<li>Containers</li>
<li>Microservices</li>
<li>Feature flags or feature toggles</li>
<li>Tribalism - who else in our vertical market is already using this?</li>
<li>Telemetry</li>
<li>Visibility of data from production</li>
<li>Insights</li>
<li>Centralized logging</li>
<li>Data Science</li>
<li>Version Control - do you keep your 3rd party modules versioned?</li>
<li>Reproducable infrastructure</li>
<li>Development: Velocity of shipping</li>
<li>Operations: <a href="https://en.wikipedia.org/wiki/Service-level_agreement">SLA</a> - <a href="https://en.wikipedia.org/wiki/Mean_time_to_repair">MTTR</a>, uptime</li>
<li>The Wall of Confusion (Development is just throwing wall over the wall to Operations)</li>
<li>Development wants change, Operations want stability</li>
<li>Communication</li>
<li>Health-checks</li>
<li>CAP Theorem also applies to human interaction within a company.</li>
<li><a href="https://en.wikipedia.org/wiki/Value_stream_mapping">value stream mapping</a></li>
<li>Technical Debt</li>
<li><a href="http://martinfowler.com/bliki/TestPyramid.html">testing pyramid</a></li>
</ul>
<h3 class="title is-5">Open Source Project Management</h3>
* Mentoring
* Issue queue workflow
* Governance
* Conflict resolution
* Cultural barriers [Hofstede's cultural dimensions theory](https://en.wikipedia.org/wiki/Hofstede's_cultural_dimensions_theory)
* Language barriers
* Time management
* How to handle with pull-request that needs more work?
* Processes that work 5-10 people will not work when you have 1,000-5,000 people.
* Focus on the Human element
* 
* 
* 
<h3 class="title is-5">Videos and podcasts</h3>
* [AB Testing podcast by Alan and Brent](http://www.angryweasel.com/ABTesting/)
* [When you don't want Agile](https://codeandtalk.com/v/yapc-eu-2016/curtis-poe-when-you-dont-want-agile-yapceurope-2016)
<h3 class="title is-5">Other related videos</h3>
* [Retrospective: Scaling Infrastructure at Etsy](https://codeandtalk.com/v/scaleconf-sa-2016/bethany-macri-retrospective-scaling-infrastructure-at-etsy)
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Count number of lines in a file and divide it by number of seconds in a day using Bash</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-11-30T08:20:01Z</updated>
    <pubDate>2016-11-30T08:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/count-lines-in-a-file-and-divide-by-seconds-in-a-day" />
    <id>https://code-maven.com/count-lines-in-a-file-and-divide-by-seconds-in-a-day</id>
    <content type="html"><![CDATA[<p>This title might sound strange with two unrelated tasks, but there is a story behind it. I was working on some data processing application that was converting files to some other format. After checking the code, I found that it takes about 1 second to convert a single file and I wanted to know how long will it take to convert all the files.</p>
<p>It isn't really difficult. Just run <code>find somedir | wc -l</code> and we get the number of seconds. Except that I already knew there are a lot of files so I split that in two separate steps:</p>
<h2 class="title is-4">List all the files</h2>
<pre><code class="language-bash">$ find somedir &gt; files.txt
</code></pre>
<p>I know, it would be more correct if I ran</p>
<pre><code class="language-bash">$ find somedir -type f &gt; files.txt
</code></pre>
<p>but the impact was rather small.</p>
<p>Then I can run</p>
<pre><code class="language-bash">wc -l files.txt
</code></pre>
<p>I ran the first command and it did not end.</p>
<p>I ran <code>wc -l files.txt</code> several times and I saw the file was growing
and growing and it passed the 1,000,000 and I started to wonder how many days are all those seconds.</p>
<p>One day is 86,400 seconds that can be calculated as <code>(( x = 60*60*24*72 )); echo $x</code></p>
<h2 class="title is-4">Bash expression</h2>
<p>Anyway, here is the expression I came up with:</p>
<p>Count the lines in a file and divide it by number of seconds in a day which is 86400</p>
<pre><code class="language-bash">let &quot;x=$(wc -l find.txt | cut -d' ' -f1)/86400&quot;; echo $x
expr $(wc -l find.txt | cut -d' ' -f1) / 86400
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Deploying Python with uWSGI and Nginx on Ubuntu 13.10</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-11-23T23:30:01Z</updated>
    <pubDate>2016-11-23T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/deploying-pyton-with-uwsgi-on-ubuntu-13-10" />
    <id>https://code-maven.com/deploying-pyton-with-uwsgi-on-ubuntu-13-10</id>
    <content type="html"><![CDATA[<p>The following is a tutorial on how to set up uWSGI with an Nginx front end to server simple Python scripts.</p>
<p>In this tutorial we will only use the packages that are supplied by Ubuntu.</p>
<p>It was tested on an Ubuntu 13.10 x64 droplet of <a href="/digitalocean">Digital Ocean</a>.</p>
<p>After you create a droplet with Ubuntu 13.10 x64 you'll get an e-mail with your IP address
and the password of root. In this example I'll use 1.2.3.4 as the IP address. You'll have to replace
the commands with the IP address of your server.</p>
<p>First just ssh to the server. On Linux/Unix/OSX you would type this:</p>
<pre><code>$ ssh root@1.2.3.4
</code></pre>
<p>On Windows you'd probably install <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">putty</a> and use that.</p>
<p>Once you are logged in you need to update the packages to the latest by typing the following:</p>
<pre><code># aptitude update
# aptitude safe-upgrade
</code></pre>
<p>Then reboot:</p>
<pre><code># reboot
</code></pre>
<p>This will disconnect you from the server. After a few seconds you can continue:</p>
<p>I'd recommend copying your public ssh key to let you ssh without password:</p>
<pre><code>$ scp ~/.ssh/id_rsa.pub root@1.2.3.4:.ssh/authorized_keys
$ ssh root@1.2.3.4
</code></pre>
<p>If the first command worked well, then the second won't ask for a password.</p>
<h2 class="title is-4">Install uWSGI</h2>
<pre><code># aptitude install uwsgi
# aptitude install uwsgi-plugin-python
</code></pre>
<p>Just to make sure, check the versions we have. I got the following:</p>
<pre><code># python -V
Python 2.7.5+
# uwsgi --version
1.9.13-debian
</code></pre>
<p>Then create a user called <b>dev</b> so we won't do everything as root.</p>
<pre><code># adduser --gecos '' --disabled-password  dev
</code></pre>
<p>Switch to the new user and create a directory for the project.</p>
<pre><code># su - dev 
$ mkdir project
$ cd project/
</code></pre>
<p>In the project/ directory create a file called app.py with the following content:</p>
<pre><code>def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return &quot;Hello World From Python&quot;
</code></pre>
<p>Run the following script:</p>
<pre><code>$ uwsgi --http-socket :9090 --plugin python --wsgi-file app.py 
</code></pre>
<p>Now you can already visit the we site by following th URL:
<a href="http://1.2.3.4:9090">http://1.2.3.4:9090</a> (remember to replace the IP with the one you have).</p>
<p>Without including the python plugin, if I only run</p>
<pre><code>$ uwsgi --http-socket :9090 --wsgi-file app.py 
</code></pre>
<p>I'd get the following error:</p>
<pre><code>uwsgi: unrecognized option '--wsgi-file'
getopt_long() error
</code></pre>
<p>Further uWSGI configuration (3 processes handle the requests) can be provided
on the command line:</p>
<pre><code>$ uwsgi --http-socket :9090 --plugin python --wsgi-file app.py --process 3
</code></pre>
<p>But, instead of  the command line, it is probably better to create a configuration
file called <code>/home/dev/project/project-uwsgi.ini</code> with the following content:</p>
<pre><code>[uwsgi]
http-socket    = :9090
plugin    = python
wsgi-file = /home/dev/project/app.py
process   = 3
</code></pre>
<p>Now we can launch the server using the following command:</p>
<pre><code>uwsgi --ini project-uwsgi.ini
</code></pre>
<p>We can shut it down by pressing Ctrl-C.</p>
<p>Then we switch back to user <b>root</b> typing</p>
<pre><code>$ exit
</code></pre>
<p>We can then create a symbolic link so uWSGI will start our server automatically
when the server boots up:</p>
<pre><code># ln -s /home/dev/project/project-uwsgi.ini /etc/uwsgi/apps-enabled/
</code></pre>
<p>now we can launch the service as root with the following command:</p>
<pre><code># service uwsgi start
</code></pre>
<h2 class="title is-4">Add Nginx to the mix</h2>
<p>First thing, replace <b>http-socket</b> by <b>socket</b> in project-uwsgi.ini  file.</p>
<p>Install Nginx and remove the default configuration file:</p>
<pre><code># aptitude install nginx
# service nginx start
# rm /etc/nginx/sites-enabled/default
</code></pre>
<p>Instead of that create a new configuration file in
<code>/home/dev/project/nginx-uwsgi.conf</code>
with the following content:</p>
<pre><code>server {
  location /hello/ {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9090;
  }
}
</code></pre>
<p>Create a symbolic link in the directory of Nginx so when Nginx starts this configuration
file is taken in account.</p>
<pre><code># ln -s /home/dev/project/nginx-uwsgi.conf /etc/nginx/sites-enabled/
# service nginx restart
</code></pre>
<p>Now you can visit <a href="http://1.2.3.4/hello">http://1.2.3.4/hello</a> and see the output of the same script as you saw earlier.</p>
<h2 class="title is-4">Show the environment</h2>
<p>Edit the <code>/home/dev/project/app.py</code> file to have the following in it.</p>
<pre><code>def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])

    html = &quot;&lt;h1&gt;Hello World From Python&lt;/h1&gt;\n&quot;
    html += &quot;&lt;table&gt;\n&quot;
    for k in env:
        html += &quot;&lt;tr&gt;&lt;td&gt;{}&lt;/td&gt;&lt;td&gt;{}&lt;/td&gt;&lt;/tr&gt;\n&quot;.format(k, env[k])
    html += &quot;&lt;/table&gt;\n&quot;

    return html
</code></pre>
<p>and visit your home page again. You'll see all the environment it receives.</p>
<h2 class="title is-4">Add echo form</h2>
<p>Update the script again to include a form and to echo back whatever the user typed in:</p>
<pre><code>import cgi

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])

    html = &quot;&lt;h1&gt;Hello World From Python&lt;/h1&gt;\n&quot;
    html += &quot;&lt;table&gt;\n&quot;
    for k in env:
        html += &quot;&lt;tr&gt;&lt;td&gt;{}&lt;/td&gt;&lt;td&gt;{}&lt;/td&gt;&lt;/tr&gt;\n&quot;.format(k, env[k])
    html += &quot;&lt;/table&gt;\n&quot;
    html += &quot;&lt;form&gt;\n&quot;
    html += '&lt;input name=&quot;txt&quot; /&gt;\n'
    html += '&lt;input type=&quot;submit&quot; value=&quot;Echo&quot; /&gt;\n'
    html += &quot;&lt;/form&gt;\n&quot;


    form = cgi.FieldStorage(environ=env)
    if 'txt' in form:
        html += &quot;&lt;hr&gt;You said: &lt;b&gt;{}&lt;/b&gt;\n&quot;.format(form['txt'].value)

    return html
</code></pre>
<p>Of course you'd probably not build a real application this way, but it is a good way to
play with the environment and see that everything works fine.</p>
<p>It can also be very useful to write small web interfaces.</p>
<h2 class="title is-4">502 Bad Gateway</h2>
<p>If, while already trying to use Nginx you happen to get the above error in the browser and you might also get something like this:</p>
<pre><code>upstream prematurely closed connection while reading response header from upstream, client: 192.117.127.193, server: , request: &quot;GET / HTTP/1.1&quot;, upstream: &quot;uwsgi://127.0.0.1:9090&quot;, host: &quot;159.203.101.19&quot;
</code></pre>
<p>in <code>/var/log/nginx/error.log</code> the error log on Nginx, then you probably have forgotten to replace <code>http-socket</code> by <code>socket</code> in the <b>project-uwsgi.ini&gt;</b> file
or you have forgotten to reload uwsgi after doing so. This happened to me as well, and took me quite some time to figure out the problem.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Web site Accessibility (aka. a11y)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-11-12T07:30:01Z</updated>
    <pubDate>2016-11-12T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/accessibility" />
    <id>https://code-maven.com/accessibility</id>
    <content type="html"><![CDATA[<p><a href="https://code-maven.com/cmos-5-lucy-greco-dictationbridge">Interview with Lucy Greco</a> about Dictation Bridge.</p>
<p>The interview with <a href="https://code-maven.com/cmos-19-job-van-achterberg">Job van Achterberg about Inclusive design</a></p>
<p><a href="https://bitsofco.de/tools-for-developing-accessible-websites/">Tools for Developing Accessible Websites</a> by Ire Aderinokun</p>
<p><a href="http://hmig.me/a11y-resources/">A11y Resources</a> see the <a href="https://codeandtalk.com/v/cssdevconf-2015/heather-migliorisi-accessibility-at-css-dev-conf">video</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Logging in AngularJS applications</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-10-30T07:30:01Z</updated>
    <pubDate>2016-10-30T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/logging-with-angularjs" />
    <id>https://code-maven.com/logging-with-angularjs</id>
    <content type="html"><![CDATA[<p>We have already seen <a href="/logging-in-javascript">how to log in plain JavaScript</a>,
and even dealt with &lt;a href=/logging-javascript-objects&quot;&gt;logging JavaScript objects</a>,
but what if we are using <a href="/angularjs">AngularJS</a>?</p>
<h2 class="title is-4">$log in AngularJS</h2>
<p>AngularJS comes with a service called <a href="https://docs.angularjs.org/api/ng/service/$log">$log</a> that
is a simple wrapper around the <code>console.log</code> facilities.</p>
<p>In this example we can see that in order to use the <code>$log</code> service we need to use the
<code>dependency injection</code> of AngularJS <code>['$log', function($log)</code> passing the <code>$log</code>
object to the function implementing the controller where we would like to use it.</p>
<p>We see both calls to 5 <code>$log.*</code> methods and to the corresponding <code>console.*</code> methods.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/logging.js">examples/angular/logging.js</a></strong></p>
<pre><code class="language-js">angular.module('DemoApp', [])
.controller('DemoController', ['$log', function($log) {
    console.debug(&quot;Calling console.debug&quot;);
    console.info(&quot;Calling console.info&quot;);
    console.log(&quot;Calling console.log&quot;);
    console.warn(&quot;Calling console.warn&quot;);
    console.error(&quot;Calling console.error&quot;);

    $log.debug(&quot;Some debug&quot;);
    $log.info(&quot;Some info&quot;);
    $log.log(&quot;Some log&quot;);
    $log.warn(&quot;Some warning&quot;);
    $log.error(&quot;Some error&quot;);
}]);

</code></pre>
<p>The results looks like this in Chrome:</p>
<img src="/img/angular_logging_chrome.png" alt="Logging in AngularJS" />
<p>As you can see the results of the corresponding logging functions look the same in AngularJS and pure JavaScript, except that the
calls to the <code>$log.*</code> methods don't show accurate line numbers.</p>
<p>That's clearly a drawback and we are going to try to fix this soon, but before that we are going to
look at the advantage of the <code>$log</code> facilities over the corresponding <code>console.*</code> functions.</p>
<p>In any case if you'd like to try it yourself, here is the HTML file that will load the above JavaScript file:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/logging.html">examples/angular/logging.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;logging.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body ng-app=&quot;DemoApp&quot; ng-controller=&quot;DemoController&quot;&gt;
 &lt;h1&gt;Main Title&lt;/h1&gt;
 
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/logging.html">view</a></p>
<h2 class="title is-4">Turn off logging in AngularJS</h2>
<p>The only advantage of <code>$log.debug</code> over <code>console.debug</code> I could find is
the ability to turn off the debugging printouts.</p>
<p>We can do that through the
<a href="https://docs.angularjs.org/api/ng/provider/$logProvider">$logProvider</a> provider
in the <code>config</code> directive of AngularJS by adding the following:</p>
<pre><code class="language-javascript">.config(['$logProvider', function($logProvider) {
    $logProvider.debugEnabled(false); // turns off the calls to $log.debug, but not the others
}])
</code></pre>
<p>This turns off the <code>$log.debug</code> calls, but as you can see in the comment, it
does not turn off the other 4 calls of <code>$log</code>. Our code will still print out
any of the <code>info</code>, <code>log</code>, <code>warn</code>, and <code>error</code> messages.</p>
<p>See the results:</p>
<img src="/img/angular_logging_off_chrome.png" alt="Logging in AngularJS" />
<p>As far as I know, Angular does not provide a way to turn those off.</p>
<p>The full JavaScript is here:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/logging_off.js">examples/angular/logging_off.js</a></strong></p>
<pre><code class="language-js">angular.module('DemoApp', [])
.config(['$logProvider', function($logProvider) {
    $logProvider.debugEnabled(false); // turns off the calls to $log.debug, but not the others
}])
.controller('DemoController', ['$log', function($log) {
    console.debug(&quot;Calling console.debug&quot;);
    console.info(&quot;Calling console.info&quot;);
    console.log(&quot;Calling console.log&quot;);
    console.warn(&quot;Calling console.warn&quot;);
    console.error(&quot;Calling console.error&quot;);

    $log.debug(&quot;Some debug&quot;);
    $log.info(&quot;Some info&quot;);
    $log.log(&quot;Some log&quot;);
    $log.warn(&quot;Some warning&quot;);
    $log.error(&quot;Some error&quot;);
}]);

</code></pre>
<p>The corresponding HTML file is here:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/logging_off.html">examples/angular/logging_off.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;logging_off.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body ng-app=&quot;DemoApp&quot; ng-controller=&quot;DemoController&quot;&gt;
 &lt;h1&gt;Main Title&lt;/h1&gt;
 
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/logging_off.html">view</a></p>
<h2 class="title is-4">Showing the correct line numbers</h2>
<p>There is a way to tell AngularJS to show the correct line numbers. You just need to bind the <code>$log.*</code>
functions to the <code>console.*</code> functions. Like this:</p>
<pre><code class="language-javascript">    $log.debug = console.debug.bind(console);
</code></pre>
<p>You will have to do that for each one of the 5 methods separately. In our example we have done it for 2:</p>
<img src="/img/angular_logging_lines_chrome.png" alt="Logging in AngularJS" />
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/logging_lines.js">examples/angular/logging_lines.js</a></strong></p>
<pre><code class="language-js">angular.module('DemoApp', [])
.controller('DemoController', ['$log', function($log) {
    $log.log = console.log.bind(console);
    $log.debug = console.debug.bind(console);

    console.debug(&quot;Calling console.debug&quot;);
    console.info(&quot;Calling console.info&quot;);
    console.log(&quot;Calling console.log&quot;);
    console.warn(&quot;Calling console.warn&quot;);
    console.error(&quot;Calling console.error&quot;);

    $log.debug(&quot;Some debug&quot;);
    $log.info(&quot;Some info&quot;);
    $log.log(&quot;Some log&quot;);
    $log.warn(&quot;Some warning&quot;);
    $log.error(&quot;Some error&quot;);
}]);

</code></pre>
<p>The next HTML file can help you try this in your browser.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/logging_lines.html">examples/angular/logging_lines.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;logging_lines.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body ng-app=&quot;DemoApp&quot; ng-controller=&quot;DemoController&quot;&gt;
 &lt;h1&gt;Main Title&lt;/h1&gt;

&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/logging_lines.html">view</a></p>
<h2 class="title is-4">Other Solution</h2>
<p>While searching for solutions I've bumped into the
<a href="https://developer.chrome.com/devtools/docs/blackboxing">Blackbox JavaScript Source Files</a>, that can be used to fix
the incorrect reporting of line numbers. Unfortunately that's Chrome only.</p>
<h2 class="title is-4">Conclusion</h2>
<p>As it stands I don't see any real advantage for using the logging mechanism provided by AngularJS.
I'll stick with calls to <code>console.*</code>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #19: Job van Achterberg - Inclusive design</title>
    <summary type="html"><![CDATA[Job van Achterberg on accessibility (a11y) and various open source tools to help achieve it]]></summary>
    <updated>2016-10-28T13:01:01Z</updated>
    <pubDate>2016-10-28T13:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-19-job-van-achterberg" />
    <id>https://code-maven.com/cmos-19-job-van-achterberg</id>
    <content type="html"><![CDATA[<p>Interview with Job van Achterberg, a freelancer in the Netherlands, about implementing accessibility in websites. We got a wonderful list of tools and suggestions on how to make our website accessible to more people!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/3aIImV11B0I" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Job van Achterberg</h2>
<ul>
<li><a href="https://twitter.com/detonite">@detonite at Twitter</a></li>
<li><a href="https://github.com/jkva">GitHub</a></li>
<li><a href="https://www.linkedin.com/in/jobva">LinkedIN</a></li>
<li><a href="https://www.youtube.com/watch?v=Cgo_iYw09K0">YAPC::EU::2016: Fun With Assistive Tech (video)</a></li>
<li><a href="http://www.slideshare.net/jkva/yapceu2016-how-to-make-your-web-application-work-for-everyone">YAPC::EU::2016, How to make your web application work for everyone (slides)</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="https://tenon.io/">Tenon.io</a></p>
</li>
<li>
<p><a href="http://www.http://www.allaroundtheworld.fr/">All Around the World</a></p>
</li>
<li>
<p><a href="https://chrome.google.com/webstore/detail/nocoffee/jjeeggmbnhckmgdhmgdckeigabjfbddl">NoCoffee (Chrome)</a></p>
</li>
<li>
<p><a href="https://validator.w3.org/">W3 validator</a> and <a href="https://github.com/w3c/markup-validator">on GitHub</a></p>
</li>
<li>
<p><a href="https://html5.validator.nu/">HTML5 validator</a> and <a href="https://github.com/validator/validator">on GitHub</a></p>
</li>
<li>
<p><a href="https://github.com/GoogleChrome/accessibility-developer-tools">Google Chrome Accessibility Toolkit on GitHub</a></p>
</li>
<li>
<p>The <a href="http://www.deque.com/products/aXe/">aXe tool</a>, <a href="https://github.com/dequelabs/axe-core">on GitHub</a>, <a href="https://chrome.google.com/webstore/detail/axe/lhdoppojpmngadmnindnejefpokejbdd">Chrome plug-in</a>, and <a href="https://addons.mozilla.org/en-us/firefox/addon/axe-devtools/">FireFox plug-in</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[job guest1 Job van Achterberg]</p>
<p>[00:02] szabgab:
Hello there, this is the CMOS, the Code Maven open source podcast and video interview series.
My name is Gabor Szabo, I'm your host, and with me is Job van Achterberg.
Hi Job! How are you, Job?</p>
<p>[00:16] job:
Hey Gabor, I'm great! Thanks for having me.</p>
<p>[00:18] szabgab:
Yeah, I'm really happy to have you.
Just to other people who are listening or watching, we know actually each other, for quite a while from the Perl community, from various conferences, but never had a real sit-down and an interview or talking about your past, so please tell me a little bit about how did you get into computers, programming, and wherever you are?</p>
<p>[00:46] job:
Oh, how far back.
It's my parents' fault, they bought this old <a href="https://en.wikipedia.org/wiki/BBC_Micro">32KB BBC micro</a> and, you know it had a floppy drive, you'd turn it on and you'd get a basic prompt.
So back in the old days, and it came with these books to learn programming, and that's kind of how that started.
You figured out you could make a machine to do stuff and you want to make it do more stuff and that's, yeah, I discovered I liked that and eventually got a job into system administration and got into, <q>Okay, well we need a website, and it needs to be dynamic!</q>
<q>Oh, I think I've read about this Perl, and that you can build dynamic websites with it, so let's try that!</q>
And then you get into frontend because you're the only guy there and, <q>Okay, so how does this database thing work?</q>
And you kind of teach yourself.
And now I'm here on your podcast, so I guess it's finally complete now!</p>
<p>[01:46] szabgab:
Well if that's the goal, then hopefully there's going to be more interesting things than being on my podcast!
Anyway, so what do you do these days? For work?</p>
<p>[02:01] job:
I went freelance a year ago, I wanted to get to be able to spend more time on self-study, pick projects that I thought were interesting.
I wanted to pick projects that I thought I could really contribute to, mainly in terms of making sure they work for everybody.
And so yeah, I took the plunge, registered with the Chamber of Commerce, and started looking for clients.
And that actually wasn't so hard as I thought it would be.
So now I have two really cool clients that I get to do accessibility work, for both.
And yeah, so far, so good!
And it's mainly frontend work, mixed with some backend and database work, where it needs to be done.
But I'd say 90% is just frontend-related.</p>
<p>[02:55] szabgab:
You are in the Netherlands, right?</p>
<p>[02:57] job:
Yes, happily below sea level.</p>
<p>[03:01] szabgab:
Are these local clients?</p>
<p>[03:04] job:
No, that's actually a nice question.
Both of them are international, so my main client, where I work four days a week, <a href="http://www.http://www.allaroundtheworld.fr/">All Around the World</a>, is composed of people from all over the world, as the name suggests.
And the client I work Fridays, <a href="https://tenon.io/">Tenon.io</a>, is actually also international, but mainly Americans.
So I tend to work from home, I'm a voluntary firefighter, and volunteer departments always have trouble finding people to be available during the day, when their pager goes.
Speaking of which, I hope it won't go during this podcast, because I'll have to run out of the house.
But I have a little desk there, I get to do work, and I'm the first guy in the truck when the pager goes, so these things actually combine very well at this moment.</p>
<p>[03:57] szabgab:
So you're driving a firetruck?</p>
<p>[04:00] job:
No, no, that's usually somebody else.
I tend to just wear gear, sit in the back of the truck, I'm a hose-dragger, as they call it.</p>
<p>[04:09] szabgab:
Okay, and have you had a lot of fires that you had to put out?</p>
<p>[04:15] job:
Some decent ones.
It's a small town, so not too many, but we've had some larger fires, some car accidents.
Of course, you hope those never happen, but they do happen sometimes.
And then your pager goes off and you race to the fire station and that's also, any testing thing where you go freelance, I always make sure to tell my clients, <q>I am a volunteer firefighter, this means sometimes I have to be gone for maybe an hour, maybe more.</q>
And as long as there's an understanding that I will make-up those hours later, and if the client's okay with that, that works really well.
But I'm really lucky to have understanding clients.</p>
<p>[04:56] szabgab:
Yeah, well being a firefighter is, I think, a serious thing, right?</p>
<p>[05:03] job:
Well, it's either making sure the build doesn't fail or making sure the house doesn't burn down.
You're fighting fires either way.</p>
<p>[05:11] szabgab:
Okay, yeah! I'm not sure that's the same category, but anyway...
Okay, so you do quite a lot of things with accessibility.
Actually we started to talk about this podcast back when I interviewed <a href="https://code-maven.com/cmos-5-lucy-greco-dictationbridge">Lucy</a> about <a href="http://dictationbridge.com/">DictationBridge</a>.</p>
<p>[05:31] job:
Right.</p>
<p>[05:34] szabgab:
Let's get there, sorry I am more or less understanding that accessibility is meaning to make websites, basically, accessible for people with various disabilities.
I can't say that word.</p>
<p>[05:49] job:
People with disabilities, yeah sure, that's a way to see it.
It's mainly, for lack of a better word, proper accessibility.
It's more about inclusive design and making sure that when  you build something, you build it in such a way that as many people as possible can use it.
Not just people with disabilities.
You kind of don't try to think about that.
You know that phrase that they used to say on the internet?
<a href="https://en.wikipedia.org/wiki/On_the_Internet,_nobody_knows_you%27re_a_dog"><q>Nobody knows you're a dog.</q></a>
And they had this picture of a dog using a computer, I think it was FarSide comics, I'm not sure.
But the whole idea is, on the internet, nobody knows if you're wearing glasses.
Nobody knows if you're using a screen reader, if you're using the keyboard or the mouse, but there are so many sites that you can only use with a mouse, or you can't keyboard through them, or you can use your keyboard, but you don't get a visual indicator of what's currently being focused.</p>
<p>And I would say that probably 80 - 90% of the web is really hard to use for people with disabilities, for people who are just using keyboards, for people who are eating a sandwich and only have one hand available, and they want to still browse the web.
So the web was initially conceived by <a href="https://en.wikipedia.org/wiki/Tim_Berners-Lee">Berners-Lee</a> with the idea of a medium that would be available to everybody.
And there's this nice <a href="https://en.wikiquote.org/wiki/Tim_Berners-Lee">quote</a> on there that you see everywhere, like <q>The universality of the web is an essential aspect.</q>
And then it's kind of frustrating to see that so many large parts of the web are inaccessible, while it's not actually too hard to make it accessible.
And it's just a matter of spreading that knowledge.</p>
<p>So I went to yet another <a href="http://act.yapc.eu/ye2016/talk/6709/">Perl conference</a>, in Romania this year, and I spoke on inclusive design, where I basically had a little <a href="https://metacpan.org/pod/Dancer2">Dancer</a> application that showed side-by-side a git-diff and an original application that I took from the web, a little to-do JavaScript application.
And I would show, with small changes, how I would make it a bit more accessible with each change, showing which code I changed, what the difference was from the old version to the new version, now it became easier to use.</p>
<p>And a lot of developers came up to me afterwards, saying <q>Oh well, this is really interesting. We'd like to learn more.</q>
And that's a great sign, at least from the Perl community itself, that they really want to make sure things improve.</p>
<p>I gave the same talk at the <a href="https://www.perl.dance/speakers/78-job-van-achterberg">Dancer conference</a> in Vienna and I get the reaction like <q>Oh can we see how accessible <a href="https://metacpan.org/">meta::cpan</a> is?</q>
You know, the Perl package website?
And I said, <q>Sure, let's check,</q> and so I ran it through <a href="https://tenon.io/">Tenon.io</a>, which is an online accessibility checker that analyzes your page, see how accessible it is.
And I said, <q>See, here's this nice overview of issues!</q>
And right away they wanted to sit down and see how we can fix this, which I think is just a great attitude the Perl community has.
To not be defensive, <q>Oh, well, you know, people are trying...</q>
It's just like <q>No, let's sit down and fix it. We know there are problems now, we can get work done.</q>
And I think if we can get that sort of attitude to much more of web development, towards this whole, <q>It's our job, to make sure what we build works for everybody.</q>
We can really make the web better for everybody and we're all getting older, I mean, lots of us have glasses, I only have one decent eye.
I mean, I've tried to set some age, I know my eyesight's going to get worse, and it's also in our own interest to make sure that what we build works well for people, because you sometimes hear from companies, <q>Oh well, people with bad eyesight or disabilities, they don't use our web shop. Because we cater to the young people.</q>
Yeah but our generation is also going to be older in 20 years, and we're still going to be doing all our shopping online, so...it's going to affect us more and more.
And I'm kind of on my venting chair here, right now!</p>
<p>But what I'm trying to do is make projects I work on accessible and I organize meetups, where we bring developers and designers together, and we try to create this exchange of ideas and knowledge to make sure that we know how to make stuff work, for as many people as possible.
So yesterday we had one [meetup], and we had three speakers, which was very much around how to design a website, while keeping the very broad <a href="https://en.wikipedia.org/wiki/Autism_spectrum">Autism Spectrum</a> in mind.
So what are the things we should consider with moving content, and bright colors, and lots of moving things?
And changing context quickly?
And it is not so much having to check off all the little checkboxes, on making sure something is accessible, it's more about knowing what you're building, thinking about what is it going to be like, and making sure that you test it.
That you run it by people. It's not so much trying to get the list right, it's about thinking about what you're building. Which I think is a good idea in any discipline.</p>
<p>[11:44] szabgab:
Yeah, so I think yes, there is a lot of educational area where we have to teach people, actually the attitude.
But there are also various tools, for example, just after that conversation with <a href="https://code-maven.com/cmos-5-lucy-greco-dictationbridge">Lucy</a> , I already wanted to make sure that my website is working well, or better at least.
So I tried to find all kinds of tools that could give me some kind of report and tell me how to improve things.
Let's talk about a couple of these tools that you're using, or suggesting?</p>
<p>[12:21] job:
Okay, well there are some open source tools in that regard, actually.
There's one I really like, it's called <a href="https://chrome.google.com/webstore/detail/nocoffee/jjeeggmbnhckmgdhmgdckeigabjfbddl">NoCoffee</a>, it's a Chrome extension, and what it does is you can use it to overlay a filter on the website, so to show, to make it blurry, make it render as somebody would see it with different types of color-blindness.
There is a vision condition where you have these little floaters in your vision, and it simulates that, so you get these little floaters on top of the page, and they tend to move a little bit.
And I know, actually I'm cheating a bit, it's not really open source, but I know the author is open to making it open source and so I've contacted him and asked him, <q>Hey, can you put this on GitHub?</q>
Because there's actually a little bug in one of the filters, so it doesn't cover the entire page, and since they're basically just <a href="https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/SVG_Filters_Tutorial">SVG filters</a>, that can probably be fixed, and we can probably even add more filters, and make it an even better tool, because he won't have to do it all by himself.
He can just leverage this whole open source and get more people to contribute.</p>
<p>[13:41] szabgab:
So you are saying that actually there is this tool that currently is not open source?
There is a bug that you reported...?</p>
<p>[13:51] job:
Well, that's a good point. I haven't actually reported it, I've simply asked him, <q>Hey, I know you're open to opening it up. Can you?</q>
And I haven't said that there's...or did I?
I'm not sure, I might have told him that there's a bug, maybe, I don't remember.</p>
<p>[14:07] szabgab:
So the question, why would it be good for him, to open source?
What is the value on open sourcing or what is the value for him not to open source it?</p>
<p>[14:18] job:
Well, I don't really see the value in not open sourcing it, unless there's something he desperately wants to keep secret.
But I don't see the value in that.
I think open sourcing it would only have benefits, because people can use his technology to maybe integrate it in their tools and that would just create better accessibility tools.
Or they could add their own filters to his extension, and I don't really see a...the only negative aspect I could see is then it becomes a community effort, and that maybe brings in a bunch of social collaboration that needs to be managed.
But I don't think that that's not necessarily a problem. If it becomes a problem, deal with it.
I mean, geez, he won't have to do it all by himself, for one.
Because I can still tell him, <q>Hey, the snow filter is broken.</q>
Maybe he'll say, <q>I don't have time the next couple of months.</q>
<q>Oh, I'll have a look, maybe I can fix it.</q>
So, and I'm just speculating, I don't know the guy personally but I'm just saying, this is how...</p>
<p>[15:38] szabgab:
So what other tools do you suggest?</p>
<p>[15:43] job:
If you're testing accessibility, and as I said earlier, it's not about checking off the boxes.
It's about proper testing, so you spoke to Lucy, so you're familiar with the concept of a <a href="https://en.wikipedia.org/wiki/List_of_screen_readers">screen reader</a>?</p>
<p>[15:55] szabgab:
Yeah.</p>
<p>[15:57] job:
So for the audience, it's technology that reads out a page, or your desktop.
So there are a bunch of closed one, for example MacOS comes with a <a href="http://www.apple.com/accessibility/osx/voiceover/">VoiceOver</a>, which I use a lot to test webpage accessibility.
And on Windows, there is, amongst others, like <a href="https://en.wikipedia.org/wiki/JAWS_(screen_reader)">JAWS</a>, which is really, really, really expensive, thousands of dollars (note: this depends on your local Optelec dealer. See <a href="http://sales.freedomscientific.com/Category/11_1/JAWS%C2%AE_Screen_Reader.aspx">the pricing page</a>).</p>
<p>There's <a href="https://en.wikipedia.org/wiki/NonVisual_Desktop_Access">NVDA</a>, which you can download, and the <a href="https://github.com/nvaccess/nvda">code's on GitHub</a>.
And essentially, it's been written by two blind developers, Jamie and Michael, and it's just really impressive, and it gets better all the time.
They've done so much stuff, so many great features, that even competing screen readers like JAWS implemented only years later, that, I mean I'm so impressed with these guys.
But I mean, it's open to everybody and for instance, I was testing some accessiblity feature of a website I was building, and I wanted to know how <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions">live regions</a> worked, and a live region means that you're using a specific attribute on a container like a div, to say, <q>Any content in here, if it changes, re-announce it to me.</q>
So you call it the live region.
And I wanted to know how that worked, because I wanted to know how the different settings influenced the way new content was announced to the reader.
So I went to GitHub, and I looked through the code, and I did some grepping, and there it is.
And with JAWS I wouldn't be able to do that, but this gave me insight in how the tool worked.
How I could maybe improve my website's accessibility.
And even if there's a bug, other people could fix it.
A funny anecdote is, it's written by blind people, so it's a lot of C++ code without newlines or spaces, it's kind of hard to read.
But you can, of course, run it through a prettifier.</p>
<p>[18:08] szabgab:
So what's easy for them, for blind people, it's hard for people who can see, because they are depending on the newlines more.</p>
<p>[18:18] job:
Yeah, the visual structure, we're really used to in our life.
You know, there are whole debates on where your brackets should be, but yeah who cares, because it's interpreted differently that way by them.
So there's also contributions from other people when it comes to translations.
Which is just made so much easier, because you can just use something like GitHub to issue your own pull-request and collaborate and, I mean I know, they're just absolutely swamped doing so much stuff, so making it possible for other people to contribute just really helps everybody.</p>
<p>[18:59] szabgab:
You mentioned the <a href="https://validator.w3.org/">W3 validator</a> and <a href="https://html5.validator.nu/">HTML5 validator</a>, they are...</p>
<p>[19:06] job:
Yeah, but did you know, the original W3 validator is written in Perl?</p>
<p>[19:10] szabgab:
Oh, yeah, I think I know... it still is?</p>
<p>[19:11] job:
It still is, yeah, I actually went through a bit of the code.
It's a bit older but hey, the thing still works.
So that's Perl you know, it's just keeping the web working behind the scenes.
So the older HTML DTD validators are written in Perl.
So that's at <a href="https://validator.w3.org/">validator.w3.org</a>.</p>
<p>There's also a newer one, at <a href="https://html5.validator.nu/">html5.validator.nu</a>, which is more of a modern, living-standard, HTML5 validator.</p>
<p>But they're both open, so you can just go through the source on GitHub (<a href="https://github.com/w3c/markup-validator">W3</a> and <a href="https://github.com/validator/validator">Nu HTML5</a>).
The newer one is written in Java, I think, but what's cool about both of these tools, is that they have an API as well.
So you can use curl, or whatever client you write yourself to just query, the report per page, you get JSON back, you can analyze the JSON, the spec is documented, and then you can, for instance, include it in your task runners, like a <a href="http://gruntjs.com/">Grunt</a> or <a href="http://gulpjs.com/">Gulp</a> or your <a href="https://en.wikipedia.org/wiki/Continuous_integration">continuous integration</a> tooling and so, whenever somebody pushes a change to the frontend, you run it through the validator, if it throws up a warning, then hey, it doesn't pass.
So I think it's really nice, that again, that stuff is open, because other people can contribute, you can adapt it to the way the HTML spec changes as we go forward, and new items are added to the spec.
So, and of course, the W3, it would be weird if something of the W3 is closed, because that stuff is so integrated with the rest of the open web, that I pretty much take that for granted.</p>
<p>Thinking of all the tools I'm using, so there is another one, there's actually two other ones, because I'm talking about validation and the HTML validator and the W3 validator, they're pretty basic.
So the W3 validator is basically just document-side declaration validation, schema validation.
And the HTML5 one is a bit more modern, it will catch a bit more things but there's only so many actual problems you can find with those.</p>
<p>It won't check any of [garbled] for example, at least I don't think it checks the state of ARIA attributes, for accessibility and whether you're using those right.
So there are libraries for that, that help.
There is, I think the <a href="https://github.com/GoogleChrome/accessibility-developer-tools">Google Chrome Accessibility Toolkit</a> is on GitHub, which is a JavaScript library that you can use to query the DOM and run checks on it.</p>
<p>But there's also a toolkit that's make by Deque Systems, which is an accessibility company, they do mostly consultancy around accessibility work.
But they also have something called the <a href="http://www.deque.com/products/aXe/">aXe</a>, and it's the open source accessibility engine, which basically is a whole bunch of JavaScript validation rules.
So since it's a rule-set, you can include it, they've built it that way so it can be included with your own tools.
So you can use their checks to validate your own projects.
And it's <a href="https://github.com/dequelabs/axe-core">open source</a>, so lots of other people are also adding rules to that.
But for instance, those are rules that will go a bit deeper and say, <q>Oh, your headings aren't in the correct order.</q>
Or, <q>You're starting with an h2 heading and you actually don't have an h1 heading.</q>
Or, <q>You're not using the value for this ARIA attribute correctly.</q>
Or basic stuff like contrast rules or font-size rules, and it is difficult to catch all accessibility problems.
I don't think we'll ever get there, there will always be an amount of work that you have to check manually.
There's always going to be the human factor, because otherwise, you get back to that accessibility checkbox that I discussed already.
And oh, I had this good point, and it flew away, it's gone now!</p>
<p>So, I totally lost my train of thought, it's terrible.</p>
<p>[23:47] szabgab:
So I have a different question then, or maybe it's related.
So people who don't know much about accessibility, like myself, but they have a website.
They're not big corporations, they can't afford to hire a company providing this kind of service, how can we learn about accessibility?
Is there some kind of a group, where I could ask people to take a look at my website and they would point out a couple of things maybe, or give directions?
If people can go to a meetup where they meet you, and hear a presentation, that's great.
But most of the people are not close enough to where you live.</p>
<p>[24:36] job:
Right, well there are various accessibility meetups around the world.
But there are, there's the <a href="http://webaim.org/discussion/">WebAIM mailing list</a>, so there's the Web Accessibility Initiative (note: Web Accessibility In Mind), on that mailing list anyone can just ask questions there.
There are various forums, there's of course, forums like <a href="https://www.sitepoint.com/">SitePoint</a>, they're not accessibility-specific, but you can ask your questions there.</p>
<p>There are, again there are tools that will mainly catch a lot of the, for lack of a better term, low-hanging fruit.
For instance, the aXe tooling I talked about earlier, the <a href="http://www.deque.com/products/aXe/">Deque aXe</a>, there's a <a href="https://chrome.google.com/webstore/detail/axe/lhdoppojpmngadmnindnejefpokejbdd">Chrome integrator</a> so what it does, is in your Chrome inspector tools, and there's also that for <a href="https://addons.mozilla.org/en-us/firefox/addon/axe-devtools/">FireFox</a>, but in your Chrome inspector tools, you get this new tab, it says <q>aXe</q>, and you can say, <q>Analyze this page.</q>
So it chugs for a bit and it shows you this whole list, <q>This element has this problem, here's how to fix it. This element has that problem, here's how to fix it.</q>
And that already shows you a lot of the basic stuff that you can catch that way and the whole point of that, is that the tooling prevents, that sort of automated tooling, it prevents regression.</p>
<p>And that's the most important thing, because accessibility shouldn't be something you do at the end, when you're done.
<q>Okay, I've built my site, let's see how accessible it is.</q>
It should be part of the beginning, like you start out writing tests and documentation, and you start out writing decent, accessible code.
And you iterate and iterate and iterate, in a nice agile fashion, but in the same sense, you just make sure that you run your code through your automated tooling and you catch all the basic stuff there.</p>
<p>And for everything else, there's manual testing, like you can hire companies for that, or you can, of course, ask friends to run through your site.
But there are entire companies that specialize, by having a diverse set of people that will go through your site, and tell you what problems they can find.
And there are companies like Deque and the <a href="https://www.paciellogroup.com/">Paciello Group</a>, which will audit your entire site, for a fee of course.
So yeah, if you don't have that option, these open tools are a great alternative to already make sure that your baseline is pretty good.
And personally I'm just happy people will take the effort to make sure that their pages are accessible.</p>
<p>[27:10] szabgab:
Okay, I think we are getting really close to the time when we have to finish this conversation.</p>
<p>[27:16] job:
Already, huh?</p>
<p>[27:17] szabgab:
Yeah, time flies very fast when you enjoy yourselves.
So any shout out that you would like to say to people?
Anything that you haven't mentioned that you really want to?</p>
<p>[27:34] job:
Oh boy, that's difficult.
Shout outs, no I don't want to play favoritism, I think...just, you know, the accessibility community and the awesome stuff a lot of people are doing.
A lot of them in their own free time, to make sure that, making the web work for everybody just becomes easier every day.</p>
<p>[27:55] szabgab:
Yeah, that's a very good call.
So thank you very much for coming on the show and spending the time.
And I hope that we'll be able to get sites more accessible and we can talk later on, on even more about this, because I think it's a very important subject.</p>
<p>[28:13] job:
Awesome, well if you ever have questions, just hit me up, and...thanks for letting me ramble.</p>
<p>[28:16] szabgab:
Don't worry, I will. Bye bye.</p>
<p>[28:21] job:
All right, bye bye.</p>
<p>[/transcript]</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #18: Timi Ajiboye on Client Manager, Resque, Friendly ID and other Rails gems</title>
    <summary type="html"><![CDATA[Timi Ajiboye, A Nigerian Ruby developer, tells us about his current and future projects, some in Sails.js.]]></summary>
    <updated>2016-10-25T11:01:01Z</updated>
    <pubDate>2016-10-25T11:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-18-timi-ajiboye" />
    <id>https://code-maven.com/cmos-18-timi-ajiboye</id>
    <content type="html"><![CDATA[<p>Interview with Timi Ajiboye, a great discussion of his view of open source, and his work in Ruby, his favorite Ruby Gems, and his new projects in Sails.js!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/KcDTf0B3S00" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Timi Ajiboye</h2>
<ul>
<li><a href="https://github.com/timigod">timigod on GitHub</a></li>
<li><a href="https://twitter.com/timigod">@timigod</a> on Twitter</li>
<li><a href="https://medium.com/@timigod">@timigod</a> on Medium</li>
<li><a href="http://helloworld.ng/">Hello World</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="http://cruncherapp.co/">Cruncher</a></p>
</li>
<li>
<p><a href="https://github.com/timigod/client_manager">Client Manager</a></p>
</li>
<li>
<p><a href="https://github.com/resque/resque">Resque</a></p>
</li>
<li>
<p><a href="https://github.com/davidcelis/api-pagination">API Pagination</a></p>
</li>
<li>
<p><a href="https://github.com/norman/friendly_id">Friendly ID</a></p>
</li>
<li>
<p><a href="https://hellosails.com/">HelloSails</a></p>
</li>
<li>
<p><a href="https://www.ruby-lang.org/en/">Ruby</a></p>
</li>
<li>
<p><a href="http://rubyonrails.org/">Ruby on Rails</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[timigod guest1 Timi Ajiboye]</p>
<p>[00:02] szabgab:
Hello there, this is the CMOS, the Code Maven open source podcast and interview video series. I'm Gabor Szabo, your host, and with me is Timi Ajiboye from Nigeria. How are you, Timi?</p>
<p>[00:15] timigod:
I'm good, you?</p>
<p>[00:17] szabgab:
I'm really great, and I'm really happy to have you on the show. Actually, you are the fifth from Nigeria and I was wondering, do you know what a Nigerian scam is?</p>
<p>[00:34] timigod:
Yeah, yeah, I do. It's quite...yes, I do. Everybody does.</p>
<p>[00:43] szabgab:
Okay, I was wondering because I actually haven't seen a lot of those from Nigeria recently, but I saw a lot from other places, so I was wondering whether, at one point I started joking about it, oh, so many people from Nigeria on my podcast, so that's cool. Anyway, so let's start with your background a little bit, how did you get into programming and how did you get into open source?</p>
<p>[01:14] timigod:
Okay, how I got into programming. I've always been sort of drawn towards computers and technology. What really got me into programming was when I was ten, I saw my uncle messing around on his computer and I was like, <q>What are you doing?</q> And he said, <q>This is Visual Basic.</q> Like, show me. So he taught me how to hide UI elements or display them, or how to get values from what the user's inputting, so I made like a calculator, around when I was eleven. Yeah, so since then, I've always understood sort of programming, since I was ten.</p>
<p>[01:56] szabgab:
Okay, and when did you get into open source?</p>
<p>[02:02] timigod:
I'll say, I think about a year or two ago. I think a year ago. It was me and a friend of mine, we built this tool called <a href="http://cruncherapp.co/">Cruncher</a>, it helps you make sense of your bank statement.
So we wanted an open source gem where people can add process for other banks. It wasn't say, there are no standards for banks in Nigeria, all the banks just do as they like.
So you have to make something that will read each statement.
So it made sense to make this open source project where anybody who wants to use the parser and the module, then do whatever they like, and if they want to add stuff, for us, it would be better.
It means our project will parse more statements. So yeah, that was at least a year and a half ago.</p>
<p>[03:05] szabgab:
Okay, so why does it make sense to have it open source, and why does that plug-in system and then let people...?</p>
<p>[03:10] timigod:
Yeah, open source, for me, people tend to paint it like it's an altruistic, selfless, I think it's a tactic.
When I say tactic or tool to be employed, in certain use cases.
So there are some things that would never be as good as they are, if hundreds of developers didn't contribute, so open source is selfish in a sense where, so okay I build because I want, but then I know other people would like to use this, and still make it better for me and for those people making it better, it's selfish, too, so they're like, <q>Okay, this thing has some of the functionality I want but I need to add this one to it, so I can use it.</q>
So that way everybody writes less code but gets it better, much better, much more stable. People are so different and you'd be surprised how differently people can see your code and show you what's wrong or what can be better.
It's which is why, I think, open source is...yeah, I think it's pretty selfish.
It's not in every scenario that it applies, that you can use open source just like, expose all the code.
I don't think it's everything Facebook does is open source, everything that Apple does, but it makes sense in some scenarios like React or tools that we use everyday to write code, it makes sense.</p>
<p>[04:49] szabgab:
So you, if I understand, you're self-employed or you have your own company, right?</p>
<p>[04:55] timigod: Yeah.</p>
<p>[04:57] szabgab:
Can you tell me about that a little bit? What kind of soft, things you are doing there?</p>
<p>[05:03] timigod:
Yeah, mostly, I do stuff for clients.
That's most of my workload. But I have some, we have, <a href="http://helloworld.ng/">Helloworld</a> has, we have some personnel, projects that we would like to get off the ground.
One of them was Cruncher, like I said.
To help you make sense of your bank statements, how you spent money.
There are some other ones in the pipeline, like chat bots, but mostly we just build anything for clients.</p>
<p>[05:38] szabgab:
Web applications? What kind of applications, web applications or...?</p>
<p>[05:44] timigod:
All kinds. I personally can do web and Android and iOS. Yeah, all kinds, all sorts, anything really.</p>
<p>[05:53] szabgab:
Okay, so what is the biggest open source project that you have been involved, or the most, the one that's most interesting that you think?</p>
<p>[06:08] timigod:
Most interesting...yeah, the bank parser one.
The one where we all had to make...there were like five of us so we said, <q>Okay, you make a parser for this bank, this format, you do Excel and this bank.</q>
It was fun, that was my first gem, so for me it was the first gem that I had something to do with. It was fun. It was nice to see how everybody just works on separate parts and everything come together.
The other one, which is the one I made alone, for now, with no contributors, is <a href="https://github.com/timigod/client_manager">Client Manager</a>.
Basically it is to authenticate clients from, if you've been in an API and you want to make it from an application or your iOS to access that API, you just need to install Client Manager to your app and it does a lot of that for you automatically.
You can just use the GAuth auth client or you can add users like you add clients.
And then they get their token and they can add that together. So that's two, those have been pretty...</p>
<p>[07:24] szabgab:
Okay, I'm trying to understand.
This is called Client Manager, is it for people who want to register on the website or...?</p>
<p>[07:33] timigod:
The people who want to build Rails APIs.</p>
<p>[07:37] szabgab:
Rails APIs?</p>
<p>[07:39] timigod:
Yeah.</p>
<p>[07:40] szabgab:<br />
Okay, and what kind of problem does it solve? I'm not sure I understand...</p>
<p>[07:47] timigod:
Okay, let me try to break it down again.</p>
<p>[07:49] szabgab:
Just so you understand, I am not a Rails person, I have never done Rails, so...</p>
<p>[07:54] timigod:<br />
Yeah, okay, cool.
So let me give an example, it's the same example in the ReadMe, if you built a blog with the Rails API and a JavaScript for the framework, you're going to probably have some endpoints that only users who are authors can access.
The request that you've built in, like creating or do you think lockpoints.
And then endpoints, like reading posts, would be unauthenticated, and this means that if someone should go to the endpoint in their browser, they will get the JSON response.
And what would be ideal, would be to make it such that only the frontend application can access all the read murals.
To do this, you might have to generate a random UUID and ask your frontend developer to put it in the header of their request.
And it doesn't scale well.
So what if you wanted to add an Android app? Or an iOS one?
So this is where Client Manager comes in, it helps you manage all of this, with the user interface.
You can easily just create clients, and it gets a...it generates an automatic JSON web-token, which can be used to authenticate requests, or you can create users.
So I can just add Client Manager to my API, go to /client_manager, create a user, frontend developer, and tell him, okay, this is a client who only creates five clients.
And he does that, and he forgets talking to each of those clients, and putting it in the header of all the requests. So it has more possibilities, like you can manage your stats, you can privately rate limits for clients, each received.
Those are things that I would like to do in the future of the gem, so it's pretty straightforward to install, you just need to go to /client_manager and use UI to create clients or to add users that can create clients, it's there.</p>
<p>[09:53] szabgab:
Okay, do you know how many people are using it?</p>
<p>[09:58] timigod:
It's sort of dropped around ten days ago, but I have seen on <a href="https://rubygems.org/">RubyGems</a>, I have about 170 downloads, yeah 172 downloads.</p>
<p>[10:15] szabgab:
Do you get feedback from people?</p>
<p>[10:18] timigod:
So far, yeah, a few people.
One person says he wants to help with tests, so I was on a call with him, telling him how it works.
A couple of people, mostly Nigerian people, yeah.</p>
<p>[10:37] szabgab:
Mostly, sorry?</p>
<p>[10:39] timigod:
Everybody else is set and mostly people around me in Nigeria.</p>
<p>[10:43] szabgab:
Okay so you don't have a lot of access for contact with people in other countries?
I mean, this is nothing to do with Nigeria, this...</p>
<p>[10:54] timigod:
Yeah, I know, but when I check the people who've actually stars it on, say on GitHub, they're not from around here at all.<br />
And there's about 50 stars, so... It means, there can't be many issues, some stars, so...</p>
<p>[11:14] szabgab:
Okay do you know, are there other alternatives for this gem, that people might use?</p>
<p>[11:21] timigod:
No, I wish there was, I wouldn't have had to build it.
Well, maybe I don't know how to search, but I spent a large amount of time looking for something that did this, I didn't find.
The only other thing that came close was like an Oauth manager, but it doesn't do this, because you have to be, you have to want to implement Oauth.
But this, I can extend this to implement <a href="https://oauth.net/2/">Oauth 2</a>, in case you want.
But I haven't seen anything else that does this, I wish I had, I wouldn't have had to build it.</p>
<p>[11:56] szabgab:
Okay, other open source projects? Do you have other of yours or others that you want to talk about?</p>
<p>[12:05] timigod:
Yeah, I really, really love the Ruby Rails community.
Besides Rails, I also build API with <a href="http://sailsjs.org/">Sails</a>, and I do like Android and Ember.
But no community like <a href="http://rubyonrails.org/">Ruby Rails</a>, which isn't surprising, I know when I build Client Manager, there is a gem for everything, everything.
And even sometimes, people say there are too many gems, or they are too heavy, or they're too...someone will go and make a gem that is lightweight.
Like I love Rails and the core group of them that I really like, it's small and they do tiny but indispensable things.</p>
<p>There's one called <a href="https://github.com/norman/friendly_id">Friendly ID</a>. So Friendly ID automatically helps you handle slogs for your modules, so you can have your blog posts but you want to have slogs and you want that slog you be in the URL, rather than in /post/number, you know?
Friendly ID just automatically does it with ease, you just need to add like two lines to your model, and it automatically handles slog creation.</p>
<p>[13:26] szabgab:
Slog creation? I'm not sure what is a slog?</p>
<p>[13:29] timigod:<br />
So you know if you go to a blog post of something, the thing you see in the URL, it's the name of the post but it doesn't have any spaces, it doesn't have special characters, that's a slog.
So even if you're creating stuff in WordPress, you'd use td to add it and get the slog the way you'd like.
Well, most of the time it's automatically generated.</p>
<p>[13:54] szabgab:
So it's basically the part of the URL for that particular post, okay.</p>
<p>[14:00] timigod:
Yeah, so generally everything has to have their slog and you have to be able to find by slog so Friendly ID does that, it's very simple, and it just takes a lot of stress.
So you can just do like a post to find by Friendly ID. And if you pass in the number ID, it works, if you pass in the slog, it works. So Friendly ID is quite nice.</p>
<p>Another thing I use, I use <a href="https://github.com/resque/resque">Resque</a> for a synchronous purposes.
I don't know why I choose Resque over something like DelayedJob, I think it was just easier for me to learn how to use.
But first of all, you create jobs in a jobs folder and you can en queue them.
And if has this other open source gem, that's the Web Interface to see your jobs and your workers.
So I really like how it works, I've used it for stuff like moving images from a workstation to a CDN, you don't want to have it blocking your requests.
You just want it to spot them and move them, and it happened really fast, it moved about 16,000 images in minutes, because I had 14 different workers processing these jobs...</p>
<p>[15:31] szabgab:
And then...so the Resque API is a gem for Rails, right?</p>
<p>[15:38] timigod:
R-E-S-Q-U-E, right, for Rails.</p>
<p>[15:45] szabgab:
And then you just add it to your Rails application?
And how do you write the client for it? Or did you have the client?</p>
<p>[15:58] timigod:
I didn't catch that?</p>
<p>[15:58] szabgab:
So that's the backbend part, that's the Ruby part, that's on the server?
How do you write the client? Does it provide a client, in JavaScript?</p>
<p>[16:08] timigod:
Oh no, you don't need to.
You use Resque like entirely in your Rails backend application and then you can expose, so what I did, it was just a simple endpoint, <q>move images</q> and someone can just create it and make a request.
What you can do actually is sort of give parameters of this, but it forgets the external something like that, yeah, there's no frontend stuff to be done, because you know Rails is in Node or JavaScript, so everything is done asynchronously, so there's no need to monitor asynchronous versus stuff like that.
And Resque does the clients as well.</p>
<p>[16:54] szabgab:
Okay, great, any other gems you would like to mention?</p>
<p>[17:03] timigod:
There are a couple.
There's <a href="https://github.com/davidcelis/api-pagination">API Pagination</a>, makes it easy to do pagination for API, it's very straightforward.</p>
<p>And <a href="https://github.com/ankane/searchkick">SearchKick</a>, is an abstraction for <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html">ElasticSearch</a> and it's awesome.
So you make search in your app work even easier than it once did.</p>
<p>[17:23] szabgab:
So I guess you have used all of these, right?</p>
<p>[17:27] timigod:
All of them.</p>
<p>[17:28] szabgab:
What kind of applications have you built with these?</p>
<p>[17:32] timigod:
Okay, all kinds.
I've build chat bots, APIs for chat bots, I've built regular CREP apps to store computers or people, and then you need to search, with pagination.
You need to have some currency process. I've done, there's one I did for a client, it had to do with text messaging.
You...basically you can fulfil orders with text messaging, so I added a bit to do a lot of things.
All kinds, it varies wildly.</p>
<p>[18:25] szabgab:
Okay, great.
So let's get back to the open source part, especially one thing that I wanted to ask that I wonder if someone wants to start contributing to open source, what would you suggest to this person?
How to get started?</p>
<p>[18:51] timigod:
Well, usually, initially it's one thing, because I've always wanted to make a contribution to some haystack but it just felt very daunting.
Some people who create open source projects actually tag some of their issues as for beginners, which helps, so you can go and solve those beginner issues.
There's always a small thing that you can do, it might be a typo, it might be to just to make a method or a function look nicer.
There's always something you can run.
Once you start with that small thing, you'll become more confident and if you'll just refactor a class and it looks neater and the MLD requisite prerequisites, you'll become more competent at that.
<q>Maybe I do know something, maybe I can do this,</q> and you'll be able to.
But you'll have to...it's better if you're doing it on projects you actually want to use, and you like.
Because that way, fixing those things would affect your own applications that you're building and there's more on the line, so there's more motivation to fix those things.</p>
<p>[20:12] szabgab:
So then you have the selfish motivation that you also mentioned earlier.
I want this to be working better, right?</p>
<p>Okay, thank you very much, I think we can get to the end of this interview.
Do you have any other issues you wanted to mention that we have skipped over, forgotten?</p>
<p>[20:42] timigod:
I guess the only thing I didn't talk about were my blogs.
And I wanted to mention how open source allows you to write a tutorial and then write some projects and just share it.
So I have two, I have one <a href="https://hellosails.com/">HelloSails</a> to come, entirely dedicated to building stuff with Sails, so a lot of time when I do tutorials teaching how to do stuff, I put up the code and the requisite tree, and if helps because not only does it help people who are trying to learn, but it helps me.
Because I make mistakes and people who read my tutorial who know about one part of it more than I do, are just...have an opposite issue, or fix it.
Make it correct.
So it's better for everybody, it's better for all the newbies learning, it's better for me, I won't make the mistake again, it's better for them, so the HelloSail's one and the other one is JumpsSoCool.</p>
<p>JumpsSoCool is quite weird because it doesn't have any particular theme, I'm just teaching how to build anything I've built before.
So if I built a voice-activated home automation motor, I write really long tutorials on how to...which there's one series like that going on.
I just write anything I've built, maybe because I do a lot of experiments and they never see the light of day.
They're never public.
So I figure that'd be a good way to show it off and to teach people how to do them. And get some much-needed help.</p>
<p>[22:20] szabgab:
That's excellent.
I really also like to write articles, mostly because I'm learning a lot from these.
In many cases, if you write software, then you think that you know something and then when you have to explain it, you find that, <q>Oh, I didn't know this and this and this!</q></p>
<p>[22:41] timigod:<br />
Yeah, it's amazing, people are so different and it opens up your mind.
You think you've covered, in fact there are some things that, just by being a different person, you'd be more concerned about and it's amazing that everybody can work on something at the same time at different, I can't find the language.
I really like the idea of collaboration and opening people's minds to see things.
And again, the main thing is you can't do it all alone, which is why we have so many different kinds of developers.</p>
<p>We have frontend and backend.</p>
<p>We have people like me, who sort of do everything, but the frontend is my weakest aspect, I don't think I'm every going to be a full, really good frontend developer.
But my experience in doing all of these things is different from the experience of someone doing only frontend. I'm doing backend and all of us kind of learn from each other.
It's amazing.</p>
<p>[23:57] szabgab:
Yeah, right, and that was an excellent conversation, I think.
And thank you for coming on the show and I think we can try to think of a couple of other projects later on and talk about those.
A couple of months from now, or so? Okay, great.</p>
<p>[24:16] timigod:
Yeah, cool.</p>
<p>[24:19] szabgab:
So thank you very much, bye bye.</p>
<p>[24:20] timigod:
Yeah, very cool. I don't know how to pronounce your name, I meant to ask?</p>
<p>[24:24] szabgab:
Gabor, Gabor Szabo.</p>
<p>[24:29] timigod:
Okay, Szabo, cool also, nice to meet you Gabor.</p>
<p>[24:31] szabgab:<br />
Thank you.</p>
<p>[/transcript]</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #17: Moyinoluwa Adeyemi creating Android Watch in Yorùbá</title>
    <summary type="html"><![CDATA[Creating Android Watch Face in Yorùbá. Facial recognition API in Android, using landmarks for the facial features, to locate specific parts of the face.]]></summary>
    <updated>2016-10-21T10:01:01Z</updated>
    <pubDate>2016-10-21T10:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-17-moyinoluwa-adeyemi" />
    <id>https://code-maven.com/cmos-17-moyinoluwa-adeyemi</id>
    <content type="html"><![CDATA[<p>Interview with <a href="https://twitter.com/moyheen">Moyinoluwa Adeyemi</a> about her Yorùbá Watch Faces app, available on the Google Play Store for Android phones, and her Face Detector work, now on <a href="https://github.com/moyheen/face-detector">GitHub</a>, but perhaps soon it will be an Android app. Moyinoluwa also tells us about the great developers now available in Nigeria!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/tJt4Dpgql4c" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Moyinoluwa Adeyemi</h2>
<ul>
<li><a href="https://twitter.com/moyheen">@moyheen on Twitter</a></li>
<li><a href="https://github.com/moyheen">GitHub</a></li>
<li><a href="https://ng.linkedin.com/in/moyinoluwa">LinkedIN</a></li>
<li><a href="https://medium.com/@moyinoluwa">@moyinoluwa on Medium</a></li>
</ul>
<!--
## Links - articles about Moyinoluwa Adeyemi
* [The Female App Developer](http://techherng.com/moyinoluwa-adeyemi/)
* <a href= "http://womenofrubies.com/2016/08/10/meetprofile-moyinoluwa-adeyemi-the-woman-who-built-an-android-watch-that-tells-time-in-yoruba/">The Watch that Tells Time in Yorùbá</a></l>
* [Another article about the Yorùbá Watch](http://woman.ng/2016/08/how-moyinoluwa-adeyemi-built-an-android-watch-face-that-tells-time-in-yoruba/)
* [Sunday Adalaja's Blog about the Yorùbá Watch](http://sundayadelajablog.com/nigerians-moyinoluwa-adeyemi-builts-android-watch-tells-time-yoruba/)
* [More about the Yorùbá Watch](http://howafrica.com/this-is-moyinoluwa-adeyemi-the-nigerian-lady-who-builds-watchface-that-tells-time-in-local-dialect-yoruba/)
-->
<h2 class="title is-4">Links</h2>
<ul>
<li><a href="http://radar.techcabal.com/">The Radar Online Tech Community in Nigeria</a></li>
<li><a href="https://en.wikipedia.org/wiki/Yor%C3%B9b%C3%A1_language">The Yorùbá Language</a></li>
<li><a href="https://hackernoon.com/machine-learning-for-android-developers-with-the-mobile-vision-api-part-1-face-detection-e7e24a3e472f">Moyinoluwa Adeyemi writes about Machine Learning in Android / Face Detection</a></li>
</ul>
<!--
* A podcast where [Carina C. Zona interviewed at @codenewbie](http://www.codenewbie.org/podcast/algorithms) starting at 21:00 she talks about racial bias in photographic film in the U.S. in the 1950s and how that carried over into digital photography.
-->
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[moyheen guest1 Moyinoluwa Adeyemi]</p>
<p>[00:03] szabgab:
Hello there, this is CMOS, the Code Maven open source podcast and video interview series, and I'm your host, Gabor Szabo.
And with me is Moyinoluwa Adeyemi. Hi!</p>
<p>[00:17] moyheen: Hi!</p>
<p>[00:18] szabgab:
Please correct the pronunciation, I'm really bad at this, I think.</p>
<p>[00:21] moyheen:
No, it's okay, it's okay, you tried.</p>
<p>[00:23] szabgab:
Okay, so welcome to the show.
It's been some time, I was looking for you actually, I couldn't get a way to contact you.
I was a little bit afraid of publicly talking on Twitter, so I really thank you for coming on the show.
I understand that you are from Nigeria, right?</p>
<p>[00:48] moyheen:
Yes, I'm from Nigeria.</p>
<p>[00:50] szabgab:
So, tell me a little bit about your background.
How did you get to coding and to open source, and I saw this Google Glasses on you, and quite a few things that I saw a couple of articles.
So I would like to get some background about you.</p>
<p>[01:10] moyheen:
Okay, so I started computer science in the university here and while on campus, I got involved with the Google Developmenter group in my school.
And that had a couple of experienced students who were developers too, and they tried to bring the rest of us into the field, and that was how I got started with programming seriously.
And I was interested also in GitHub and I started learning it and from then up to now, it has been about three years of getting into the field and working with it professionally.
I'm through school now and I'm a full-time Android developer, based on what I picked up back in school.</p>
<p>[01:56] szabgab:
Okay, so where do you work now? Are you employed somewhere?</p>
<p>[02:01] moyheen:
Yes, I'm employed, I work at <a href="http://www.swifta.com/">Swifta Systems</a> in Nigeria. I'm an <a href="https://www.android.com/">Android</a> engineer there.
And it's like a developer agency, although we started to sell our own products now.</p>
<p>[02:13] szabgab:
Okay, so do you...so I understand that most of the things are out-sourcing but you also have your own product now?</p>
<p>[02:22] moyheen:
Yeah, well we build apps for other companies but we also are starting to have our own product now.</p>
<p>[02:30] szabgab:
And are your clients primarily in Nigeria, other African countries?</p>
<p>[02:34] moyheen:
Yes, primarily Nigerian, most of them.</p>
<p>[02:41] szabgab:
Okay, and your open source world, so when have you started to write open source code?
Right in the university?</p>
<p>[02:49] moyheen:
Well, not really. I...of course everyone has used the open source code from other developers but I think I started that actively after school.
So I discovered that while programming for Android, sometimes I will need a couple of things, and I'll end up using libraries written by other developers and so after a while, after I got comfortable enough, after my Android developer and I earned a degree, I thought, <q>Why not contribute back to the society.</q>
And well, I started with a workspace, I contributed, I build a webspace for a tech community in Nigeria and it was well-received, so I thought, why not just continue and build more.
So most of the time now, when I write articles, I make sure I have source code to go along with it and then I push that to GitHub, hopefully to help somebody, somewhere, sometime.</p>
<p>[03:46] szabgab:
So, what is this watch face? I think I understand that it's some kind of a watch, right, I guess, running Android?</p>
<p>[04:00] moyheen:
Yeah, well so a watch face is like, it's not exactly exclusive but it's like building exclusively for Android-built devices, just like this tells the time, in realtime.</p>
<p>[04:14] szabgab:
Okay, so what...?</p>
<p>[04:16] moyheen:
So the open source one I built was an analog one, for <a href="http://radar.techcabal.com/">Radar</a>, a tech community, an online tech community for Nigeria, the biggest actually.
And well, the notebook kind of looked like a watch already, so I thought, why not just make this into watches.
And programming for Android is not really common for programmers in this region, so they love excitement.
So people were excited so then I learned how to get started, which was what's the open source code.</p>
<p>[04:50] szabgab:
So do you have an Android watch, using this?</p>
<p>[04:52] moyheen:
Yes, I have a model 360, first generation.</p>
<p>[04:59] szabgab:
Do a lot of people...I understand that one of them was for the Radar community, right?
That's the first one and then you created one for speaking <a href="https://en.wikipedia.org/wiki/Yor%C3%B9b%C3%A1_language">Yorùbá</a>?</p>
<p>[05:13] moyheen:
Yeah, I did one for speaking in Yorùbá.</p>
<p>[05:15] szabgab:
So it does say aloud things, or just...?</p>
<p>[05:19] moyheen:
No, no, it just writes, does the time and writes it out on the watch face.</p>
<p>[05:25] szabgab:
And are there many people using it?</p>
<p>[05:29] moyheen:
Okay, yeah, there's a bit of story around that, because when I first created that, since a lot of people here were not used to Android-web devices, I got a lot of negative feedback.
I was getting more stars on the Google Play Store, because people did not know how it works.
They expected it to pop up on their phones.
So when I discovered that, I went and viewed another application that works on the phone, too.
So that's the applications now, there's one for the web-device and there's one for the Android phone.
So even if you don't have an Android web device, you can still tell the time on your phone in Yorùbá.</p>
<p>[06:06] szabgab:
Okay, I understand. And are these both open source, the applications?</p>
<p>[06:11] moyheen:
No, the Yorùbá one is not open source, although I plan to open source the code, but just the conversion, because I did that myself.
I talked to a couple of local speakers because I worked with them to get the translation from Yorùbá to what the app needed.
So translate from realtime into Yorùbá, so I'm going to open source that.
I've not gotten around to doing that yet but I plan to do that someday.</p>
<p>[06:41] szabgab:
Okay, so let me try to understand this. What was the problem? What did you have to translate? I don't understand that part?
If I understand, you speak English and isn't Yorùbá also your mother tongue? Or...?</p>
<p>[06:58] moyheen:
Yeah, so I also speak Yorùbá.
And what happens is a lot of people don't speak the language any more, and then there's this fear about the language dying off.
So I thought that was one way the watch face could help, if it could teach, at least people in my age-group, how to speak the language.
So I take the time in Ekiti states, say it's 5:42, and then I translate it and on the watch face what you see is 5:42 but in Yorùbá, not in English.</p>
<p>[07:31] szabgab:
Okay, so you had to translate the time to Yorùbá, that's what you're saying?</p>
<p>[07:40] moyheen:
Yes, I had to write algorithms to translate the time.</p>
<p>[07:43] szabgab:
Oh, you had to...oh, okay, is it difficult to say it in Yorùbá? Is it very different from English?
The order of the number, or...?</p>
<p>[07:50] moyheen:
Yeah, the numbers are different, it's a lot different from English.
But anyone that  knows how to speak the language, would not have too much of a problem to learn to speak the time with the app.</p>
<p>[08:06] szabgab:
So for the one on regular Android phone, do you have a lot of downloads there?</p>
<p>[08:16] moyheen:
I have up to 500 downloads now although I am hoping that will sort of increase. I have about 500 downloads.</p>
<p>[08:29] szabgab:
Well, it's okay, I have no idea how many people would want to listen to this, or read it in Yorùbá, and have Android phone and know about it, right?</p>
<p>[08:43] moyheen:
Yeah, sure.</p>
<p>[08:45] szabgab:
How can people know about it?</p>
<p>[08:48] moyheen:
About the app?</p>
<p>[08:49] szabgab:
Yeah?</p>
<p>[08:51] moyheen:
Well, it's on the <a href="https://play.google.com/store/apps/details?id=com.moyinoluwa.yorubawatchfaces&amp;hl=en">Google Play Store</a>, so anybody that wants it can go download it.
It's still Yorùbá Watch Faces, I don't know if that name is correct since it's more than a watch face now, but it's still called <a href="https://play.google.com/store/apps/details?id=com.moyinoluwa.yorubawatchfaces&amp;hl=en">Yorùbá Watch Faces on Google Play Store</a>.</p>
<p>[09:12] szabgab:
Do you have some way to encourage people?
To let each other know about it?
So, to create some kind of a way for people to tell about it?
So otherwise, I mean, how many people would look for it, right?</p>
<p>[09:31] moyheen:
Well, not so much for now.
But at a time you really need it, I don't think you would think of it.
But we're doing a lot of publicity so anybody I meet, I ask them, <q>Do you have this on your phone?</q>
If they say no, they are going to download it immediately.
But I've been doing a lot of word of mouth but I guess I'll have to figure out how to improve that.
But then it started as a side projects, I didn't go into it thinking I was going to solve this problem, so I'll have to just think about how to promote it.
How to promote the app.</p>
<p>[10:09] szabgab:
Okay, I also saw another article from you.
I don't know if it has more parts or only the first part, about the <a href="https://hackernoon.com/machine-learning-for-android-developers-with-the-mobile-vision-api-part-1-face-detection-e7e24a3e472f">face detection</a>.
Tell me about that one, please?</p>
<p>[10:23] moyheen:
Yeah, okay, so very recently there was the <a href="https://developers.google.com/startups/accelerator/">Google Launchpad</a> Summit in Nigeria by the <a href="https://developers.google.com/">Google Developer</a> developing, and one of the sessions was machine learning with the Google API's methods, and that looks cool.
After I attended the presentation, I thought it was cool, so I had free time on my hands and decided to check it out.
It was fine and interesting because at least for the face detection, there are three APIs for mobile developers, and I checked out the face detection, it looked interesting.
I tried to...I went through the <a href="https://codelabs.developers.google.com/">Codelab by Google</a>, and tried to replicate it and then make it personal.
I'll build my own thing out of it, when I started learning it, I found how interesting it would be to take images, get them, and then transpose other images on top of them.
So I thought I'd never read an article about this before, about the official work from Google site, but it's VR that they write about.</p>
<p>[11:36] szabgab:
I saw the article, that you had the faces, and then you put eye patches on that?</p>
<p>[11:43] moyheen:
Yeah.</p>
<p>[11:44] szabgab:
Did you do that programmatically?
Or did you put it manually and then was using the face recognition to not recognize that there are eye patches there?</p>
<p>[11:57] moyheen:
Yeah, so pattern thinks the API helps you to detect landmarks on the face, like the eye, the cheeks, and then the mouth.
So what I did was I detected the eyes and then I did it programmatically, so I positioned the images relative to the positions of the landmark.
So it works for any image, but I have not published the app yet, but I expect it to work for any image.
So once I improve it, and put image where the eyes were, and then puts the eye patch itself.</p>
<p>[12:30] szabgab:
And images of a face of someone, right?</p>
<p>[12:34] moyheen:
Yes, the face of people.</p>
<p>[12:36] szabgab:
Okay, and then what kind of calls do you have like a landmark, get me the left eye or get me the right eye, like this?</p>
<p>[12:46] moyheen:
So each eye, I discovered that each of the landmarks have unique numbers, but I don't know what those numbers stand for, but I checked on it and I discovered all the faces had unique numbers that were identical, so the left eye was, I think four, I'd have to check that again, but each of the landmarks had unique numbers so all I did was, if the landmarks type is four, then put this image there.
If the landmarks type is say five, and then five is the cheek, put another image there.
So all I did was just detect the landmarks and then put images based on what landmark it was.</p>
<p>[13:29] szabgab:
What are your plans with this project?</p>
<p>[13:34] moyheen:
Well, like how all my interesting projects start off, I just did this for fun, at least initially, but it might come together in a piece, I don't know yet what...I don't know, I think I'll just keep working with it, I plan to improve it and at least make the code cleaner and follow more practices.
As of now, I'm currently doing the presentation on the main frame, I plan to move it to the background, create another of that...and I honestly don't know what will come out of this but maybe something more interesting than the Yorùbá, because that also started as an experiment and before I knew it, it became a full app.</p>
<p>[14:19] szabgab:
Okay, and I saw that the source code is available on <a href="https://github.com/moyheen/face-detector">GitHub</a> and is that also an app in the Android store?</p>
<p>[14:27] moyheen:
No, no, no, it's not yet. This was just to show what was possible. It's not on the store yet.</p>
<p>[14:34] szabgab:
It's a pity, when is it going to be there?</p>
<p>[14:37] moyheen:
I'll have to do a lot more work before it can go on there. For now, like I wrote in the article, I didn't follow any best practices.
I just wanted to show what was possible so I'll have to clean up the code, maybe add a couple of more featurs, because I don't think anybody's going to just download an app that's just putting an eye patch over their left eye?</p>
<p>[15:02] szabgab:
Well, you might be surprised!</p>
<p>[15:06] moyheen:
Well, and then there were, I noticed a bit of an issue with some of the faces.
For faces that were facing the camera directly, my face was, I was deleting that picture.
I didn't have any issues with the image of my face because I was looking directly into the camera.
But you noticed that some people in the picture had their heads bent and the image wasn't aligned perfectly with the left eye, so I will have to go back and see how I can optimize for that, detect faces that are bent and then try to calculate the positions of the image, based on the face.
I still have more work to do on that, and then...</p>
<p>[15:47] szabgab:
So what about uploading, adding some features to the application that, where people can give you feedback?
How well it works?
And then you can upload it to the apps store and tell people, this is for demo and this is for learning it, so don't expect anything, but I need feedback for how it behaves, works for you?</p>
<p>[16:10] moyheen:
Okay, I think I'll consider that. I didn't look at it that way.</p>
<p>[16:16] szabgab:
So there's a very, I don't know, strange and interesting aspect of this, because when I saw <a href="https://hackernoon.com/machine-learning-for-android-developers-with-the-mobile-vision-api-part-1-face-detection-e7e24a3e472f#.qzflujbdj">that article</a>, and you had this picture with five people, I think, and the landmarks pointed out.
And obviously all the people were black, and the interesting thing is, just a couple of weeks ago I read an article explaining that most of the photo-recognition software algorithms work much better for light or white faces, than for dark and black.</p>
<p>(Actually this was a <a href="http://www.codenewbie.org/podcast/algorithms">podcast</a> where Carina C. Zona, the interviewee, is talking about film development in years past. Starting at 21:00.)</p>
<p>[16:56] moyheen:
Oh, really?</p>
<p>[16:58] szabgab:
Yeah, and it was basically a complaint, that the companies probably, I mean these are all probably U.S.-based companies, and then because of the market, being primarily light or white people, so they hadn't invested enough in the algorithm for black faces.</p>
<p>[17:23] moyheen:
Well, this is the first time I'm hearing that actually!
I expected it to work since they said it worked for all faces, I really wasn't expecting any issues.</p>
<p>[17:39] szabgab:
Yeah, I don't know if this software has the same issues or not.
Or even if any of this whole thing is really true, I haven't really researched it.
I just read an article about it, like a week or two ago, and well, I was surprised, obviously, a little bit, maybe not too surprised, because I mean, I don't know, these strange things do happen.
But I was wondering first of all, whether you know about it, apparently you don't.
And would be interested, if have you tried the software on white people as well?</p>
<p>[18:26] moyheen:
Well, I haven't but now that you mention it, maybe I'll go back and do that and edit my article, but I wasn't expecting any issues and I didn't have any real issues with it, it worked as expected.
And the only places where there were challenges was where some of the heads are bent.
If you notice the last picture, to the right, the head was a bit bent, so the software didn't pick up the right eye and a couple of other landmarks on the face, but that was practically all the challenge I had with it.
I'll go look for this article and see what it says.</p>
<p>[19:02] szabgab:
I'll try to find it and send it to you, if you don't find it.
But it's definitely an interesting thing and I would really want to know a little more about it, whether it's improving or it's a non-issue, actually.</p>
<p>[19:25] moyheen:
Yeah, I think it is so.</p>
<p>[19:28] szabgab:
Okay, great. What other open source projects have you been doing?</p>
<p>[19:37] moyheen:
Let's see, I have...well I am practically just starting out seriously with open source and the two you've mentioned have been my biggest so far but I can definitely say, expect more from me because I'll continue trying out new stuff and I'll definitely write about it, and if I write about it, then I'll have to publish the code to GitHub.
So it's quite new to me but I'll keep pushing out more stuff.</p>
<p>[20:08] szabgab:
What would you say to...so these applications, they're primarily your playground, right?
Do you have...do you expect people to contribute code?
Or help in any way, in your applications? Or you just want...?</p>
<p>[20:27] moyheen:
Yeah, some people have already started helping.
Someone sent a pull request about two days ago, because I had quoted the positions of the eye patch relative to the eye, and someone sent in some contribution to calculate that position programmatically and I accepted it because it worked fine, so anyone can contribute now, it's free to contribute.
If you think you have something that can make it work better then I'll be waiting for the pull requests, whenever that comes.</p>
<p>[21:03] szabgab:
Great, thank you.
Before we close this interview, do you have anything else that we haven't discussed that you would like to tell the listeners or the people who are watching it?</p>
<p>[21:18] moyheen:
Yeah, well, maybe watch out for developers from Nigeria.
I know we don't hear a lot about us too often, but there are a lot of good guys here doing good stuff.</p>
<p>[21:32] szabgab:
Yeah, actually I have... you are, I think, the fourth from Nigeria that I have interviewed on the podcast and there are really interesting things that all of you have been telling me, so...yes, I agree!</p>
<p>[21:49] moyheen:
Yeah, so watch out for us!</p>
<p>[21:50] szabgab:
Okay, thank you very much for coming on the show.</p>
<p>[21:54] moyheen:
Yeah, thank you for inviting me, it was nice.</p>
<p>[21:55] szabgab:
Bye bye.</p>
<p>[/transcript]</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Showing objects in the JavaScript console without going mad</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-10-18T21:30:01Z</updated>
    <pubDate>2016-10-18T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/logging-javascript-objects" />
    <id>https://code-maven.com/logging-javascript-objects</id>
    <content type="html"><![CDATA[<p>We have already seen how to <a href="/logging-in-javascript">print logging in JavaScript</a>, but the really interesting
part is when we would like to see the content of variables. Especially variable that hold objects.</p>
<p>It is actually quite easy, but there is a catch.</p>
<h2 class="title is-4">Logging JavaScript object</h2>
<p>In this example we create a simple object and then use the <code>console.log</code> function to print
it to the <a href="/open-javascript-console">JavaScript console of the browser</a>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging_object.js">examples/javascript/logging/logging_object.js</a></strong></p>
<pre><code class="language-js">function log_them() {
    var p = {
        'fname' : 'Foo',
        'lname' : 'Bar'
    };
    console.log(p);
}

log_them();

</code></pre>
<p>The result shows the object. In Chrome, after clicking on the small <code>+</code> sign it looks like this:</p>
<img src="/img/javascript_logging_object_chrome.png" alt="Logging JavaScript object in Chrome" />
<p>Here is the HTML you might need to try it right here.</p>
<p>&lt;try file=examples/javascript/logging/logging_object.html&quot;&gt;</p>
<h2 class="title is-4">Logging JavaScript object that changes</h2>
<p>Printing out the content of an object is important, but we usually do that when we would like to see
how has the content changed. So let's see how does that work out.</p>
<p>In this example we have created the same object as above, printed it to the console, changed it, and then printed it again:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging_changed_object.js">examples/javascript/logging/logging_changed_object.js</a></strong></p>
<pre><code class="language-js">function log_them() {
    var p = {
        'fname' : 'Foo',
        'lname' : 'Bar'
    };
    console.log(&quot;Before Change&quot;, p);
    p[&quot;email&quot;] = 'foo@bar.com';
    console.log(&quot;Acter Change&quot;, p);
}

log_them();

</code></pre>
<img src="/img/javascript_logging_changed_object_chrome.png" alt="Logging JavaScript changed object in Chrome" />
<p>Oh-oh. That does not look good. The JavaScript object printed both before and after the change has the same content.
In this example it is obvious that there is some problem, but in the real world this object might further change before
you look at the output and it will always reflect the last state of the object and not the one that was in it when you called
<code>console.log</code></p>
<p>No matter what, you'll spend a lot of time wondering what's going on in your code.</p>
<p>The problem is that in some browsers (at lest Chrome), the <code>console.log</code> does not really print the
object. It only &quot;connects&quot; it to the console. So when you look at it later you'll see the content
of the object at the time when you look at the object.</p>
<p>You can try it yourself with the following HTML that loads the above JavaScript.</p>
<p>&lt;try file=examples/javascript/logging/logging_changed_object.html&quot;&gt;</p>
<h2 class="title is-4">Clone the object before printing</h2>
<p>The solution is to copy the content of the object when printing it to the console.
There are a number of ways to do that in plain JavaScript. We are going to see one
using the <code>stringify</code> and <code>parse</code> methods of the <code>JSON</code> object.</p>
<p>Effectively for every logging we first convert the object to a <a href="/json">JSON string</a>
and then convert it back to a JavaScript object before sending it off to <code>console.log</code>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging_cloned_object.js">examples/javascript/logging/logging_cloned_object.js</a></strong></p>
<pre><code class="language-js">function log_them() {
    var p = {
        'fname' : 'Foo',
        'lname' : 'Bar'
    };
    console.log(&quot;Before Change&quot;, JSON.parse(JSON.stringify(p)));
    p[&quot;email&quot;] = 'foo@bar.com';
    console.log(&quot;Acter Change&quot;, JSON.parse(JSON.stringify(p)));

}

log_them();

</code></pre>
<p>The output now looks as we expect. The content of the object is shown properly.</p>
<img src="/img/javascript_logging_cloned_object_chrome.png" alt="Logging JavaScript cloned object in Chrome" />
<p>You can try it yourself using this HTML file:</p>
<p>&lt;try file=examples/javascript/logging/logging_cloned_object.html&quot;&gt;</p>
<p><code>Solutions</code></p>
<p>There are a number of ways to achieve similar results.</p>
<p>We used the  <code>JSON.parse(JSON.stringify(obj))</code> to create a real clone and let the browser do its folding of the data structure.</p>
<p>If you'd like to type less it is enough to write <code>JSON.stringify(obj)</code>,
but then you get a single string which might be hard to read if the object has a lot of data in it.</p>
<p>You could also use the longer <code>JSON.stringify(obj, null, 4)</code> that will beautify the
content of the object by showing each element on a separate line and indenting the internal
elements 4 spaces.</p>
<p>The drawback of these options is that a large object might take up a lot of
real-estate in the console and it might be harder to navigate.</p>
<p>You'll have to experiment yourself.</p>
<h2 class="title is-4">Cloning JavaScript object in AgularJS</h2>
<p>If you are using <a href="/angularjs">AngularJS</a> you can use the
<code>angular.clone(obj)</code> method to clone the object.</p>
<h2 class="title is-4">Cloning JavaScript object in JQuery</h2>
<p>In JQuery there is a method called <a href="https://api.jquery.com/jquery.extend/">extend</a> that can
achieve the same this way: <code>$.extend({}, obj)</code>.</p>
<h2 class="title is-4">Comments</h2>
<p>Hey
Its really helped..thanks a lot</p>
<hr />
<p>Me trying the wrong code (examples/javascript/logging/logging_changed_object.js):</p>
<p>Before Change {fname: &quot;Foo&quot;, lname: &quot;Bar&quot;}
Acter Change {fname: &quot;Foo&quot;, lname: &quot;Bar&quot;, email: &quot;<a href="mailto:foo@bar.com">foo@bar.com</a>&quot;}</p>
<p>Anyway, there's a typo: &quot;Acter&quot; instead &quot;After&quot;.</p>
<hr />
<p>What about if the object has 'get' and 'set'?
function Foo() {}
Foo.prototype = {
get val() {
return {
bar: 3
}
}
}</p>
<p>let foo = new Foo()
console.log(foo) // {}</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #16: Jan Henning Thorsen and Marcus Ramberg about Convos, the web-based IRC client</title>
    <summary type="html"><![CDATA[Convos, the web based IRC client that won't lose your connection even when you are off-line.]]></summary>
    <updated>2016-10-14T13:45:01Z</updated>
    <pubDate>2016-10-14T13:45:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-16-jan-henning-thorsen-and-marcus-ramberg" />
    <id>https://code-maven.com/cmos-16-jan-henning-thorsen-and-marcus-ramberg</id>
    <content type="html"><![CDATA[<p>Interview with <a href="http://thorsen.pm/">Jan Henning Thorsen</a> and <a href="http://marcus.nordaaker.com/">Marcus Ramberg</a> about <a href="https://convos.by/">Convos</a>, their open source messaging and chatroom app, with many features. It's written in Perl and uses Mojolicious!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/kUJC_trDR6I" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Jan Henning Thorsen and Marcus Ramberg</h2>
<ul>
<li><a href="https://github.com/marcusramberg">Marcus Ramber on GitHub</a></li>
<li><a href="http://marcus.nordaaker.com/">Marcus Ramberg</a></li>
<li><a href="https://twitter.com/marcusramberg">@marcusramberg</a></li>
<li><a href="https://github.com/jhthorsen">Jan Henning Thorsen on GitHub</a></li>
<li><a href="http://thorsen.pm/">Jan Henning Thorsen</a></li>
<li><a href="https://twitter.com/jhthorsen">@jhthorsen</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li><a href="https://convos.by/">Convos</a></li>
<li><a href="https://github.com/Nordaaker/convos">Convos on GitHub</a></li>
<li><a href="http://www.irchelp.org/">IRC</a></li>
<li><a href="http://www.reisegiganten.no/">Reisegiganten</a> where they both work now</li>
<li><a href="http://telenor.no">Telenor</a> where Jan used to work</li>
<li><a href="http://www.uio.no/">UIO (University of Oslo)</a> where Marcus used to work</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[batman guest1 Jan Henning Thorsen]
[marcus guest2 Marcus Ramberg]</p>
<p>[00:01] szabgab:
Hello there, this is the CMOS, the Code Maven Open Source podcast and video interview series and I'm your host, Gabor Szabo, and with me here is Jan Henning Thorsen, also known as Batman, and Marcus Ramberg, also known as Marcus.
What is your nickname?</p>
<p>[00:31] batman:
It's actually Batman.</p>
<p>[00:33] szabgab:
Yeah, Batman.
Did I say something else?</p>
<p>[00:36] batman:
No.</p>
<p>[00:38] szabgab:
Good.</p>
<p>[00:39] batman:
3D Batman.</p>
<p>[00:43] szabgab:
So we guys know each other for quite a long time from the Perl community.
But many of the listeners don't. And I actually don't know why are you Batman?<br />
So please tell me a little bit about your history, how did you get into programming, how did you get into open source, and then from there we get to the product that you want to talk about.</p>
<p>[01:03] batman:
Right, so in 2001, I started working for a cable company, and they wanted me to make a provisioning system for them, and I didn't know any programming at the moment.
So I started Googling and the first thing that came up was some Perl code, so from now I'm really happy that I...like the first hit wasn't PHP instead.
Because if PHP was number one on Google, then I would be programming in PHP instead.</p>
<p>[01:36] szabgab:
Okay, I don't know what to say about that.
Maybe you'd be better off there!</p>
<p>[01:42] batman:
Maybe, but yeah, who knows.
Anyway, so I did Perl pretty much by myself for many, many years but then I started getting more active on the <a href="http://www.irchelp.org/">IRC</a> and I met some people from Oslo who also did Perl and then I started hanging out on the YAPC::Europe Conferences and stuff like that.
So then I got more into the whole Perl community and everything.
But for a long time I was just doing scripting by myself, so the code was really awful at that moment.</p>
<p>[02:19] szabgab:
Marcus, if I am not mistaken, you are both from Oslo, right?</p>
<p>[02:25] marcus:
No, I am originally from Lillehammer, but I've lived there since 99 so I guess I'm from Oslo now.
But I've been active in open source for a really long time.
I think my first active contribution was translation of the Window Maker project.
I don't know if you remember Window Maker from the 90s? The window manager for XLM?</p>
<p>Anyways, I've been doing Perl and some C stuff for quite a long time.
I used to do the development using Mason, back in the early 2000s and I really disliked how disorganized it was, so when Simon Cozens came up with the Maypole project, I got involved in that and I eventually moved on to become part of the Catalyst team.
I was release manager for Catalyst for a few years.
And more recently, I've been contributing to the Mojolicious project as part of the core.</p>
<p>[03:22] szabgab:
We had Joel from the Mojolicious project on the show.
So do you guys still using Perl a lot in these days?</p>
<p>[03:35] marcus:
Yeah, well I've been doing operations with it for the years but I've just come back to a Perl job now.
We're working together at a company called <a href="http://www.reisegiganten.no/">Reisegiganten</a>, which is a travel site.</p>
<p>[03:45] szabgab:
Okay, so that's not your company, is it?</p>
<p>[03:48] marcus:
It's not my company, I had my own company for six years and then I went back to being an employee again.
It's much less stressful to work for someone and get money and go home. So I'm quite happy to work at the Reisegiganten, they are a big Perl shop, they have several Catalyst applications and I've been moving them along to Mojolicious within the last couple of years, which is why they wanted to have us onboard.
So I'm very glad to be able to do Mojo again in my daytime job, because it gives me an excuse to contribute more back to the project.</p>
<p>[04:20] szabgab:
Oh that's really nice.
So you are moving applications from Catalyst over to Mojolicious?</p>
<p>[04:26] batman:
Yeah, yeah, for sure.</p>
<p>[04:29] szabgab:
Okay, why is that?
Why do you do that?</p>
<p>[04:32] batman:
Well, it's a much leaner framework to work with.
So it's like, instead of programming Java, you can just...you don't have to program that much to make stuff actually work.</p>
<p>[04:47] marcus:
And we're really happy with the async capabilities that Mojo gives us.
And also our travel site is built around Solar, which is like HP based, so using the Mojo IO loop and the async, we can do a lot of operations in parallel and still have really fast responses and stuff like that.
So being async is a really big benefit for us.</p>
<p>[05:07] szabgab:
Okay, and do you...so the project you created, <a href="https://convos.by/">Convos</a>, that we wanted to talk about and as I understand, it's an IRC client basically, or a web interface for IRC?
Do you use IRC at work?
Or only for your open source involvement?</p>
<p>[05:29] batman:
In my previous work, we used IRC and Convos actively and internally.
But...</p>
<p>[05:40] marcus:
At the moment, they are using a proprietary internal chat client at our new job.
But we are planning on moving them over eventually.
We just need to make it as good for their purposes.
So that's one of our internal goals actually.
So we can get it to work to make the integrations that they require for their workday.</p>
<p>[06:02] szabgab:
Okay, so let's get to the beginning of Convos.
Tell me what is it and why did you create it?</p>
<p>[06:11] batman:
So, I think it's back in 2012, by accident I was talking to Marcus and he was actively using IRC client at the moment, which he really enjoyed.
But he wanted something for himself, and me, myself, I was really tired of using IRC.</p>
<p>[06:35] marcus:
Yes, like a screen-based console client, right?</p>
<p>[06:39] batman:
Because I wanted to have my chat with me everywhere.
So I was thinking I should make a web-based IRC client so I could use it on my cell phone.</p>
<p>[06:49] marcus:
And be on the browser where ever you go, right?</p>
<p>[06:51] batman:
Yeah, so we were starting talking about it and then we just started hacking on Convos.</p>
<p>[06:59] szabgab:
Are there applications, that you can install on your mobile phone, that would allow you to use IRC?</p>
<p>[07:08] batman:
At the moment we're focusing on just making it...</p>
<p>[07:12] marcus:
No, he means older applications.</p>
<p>[07:13] szabgab:
Others, others?</p>
<p>[07:15] marcus:
Well, that doesn't really work well, if you're having your IRC and then you're only online while you're running the application and then you need to enter the proxy or something like that, and then it's really suboptimal because maybe some messages get pushed to your desktop while you're there.
And then you connect with your web-base and you can't see the history because it's scrolled out, and so you won't be always in sync and always have access to all of the history and see what, go back and see what happened to your chat, right?
If you use native IRC client on your mobile, you'll only connected while you open the phone.
Now the idea with Convos,  is that you're always online, right?
You're always connected to IRC and then you just go into your web browser or your application and continue the conversations you were having with another client.</p>
<p>[08:10] szabgab:
So as I remember, I actually stopped using IRC a couple of years ago because I found that it's too much distraction, too much discussion going on, and I can't get the job done.
But I had two ways of using IRC.
One of them was when I had an IRC client on my own desktop and whenever I connected, then I could use it.
And the other mode was when I had an IRC client running on a server, inside a screen-session, and then I could connect to it.
So if I understand Convos provides this kind of capabilities?</p>
<p>[08:50] marcus:
Because you have it running on a server, but it's more like a native client in your web browser, right?</p>
<p>[08:55] batman:
So even if you close your web browser, you're still actively on the IRC service that you connected to.
So that means, let's say if you're using your desktop or your laptop at work, and then you're on your bus on your way home, then you can just open up your cell phone and you can continue the conversations and you can see and read messages on your cell phone.
And so they are, it doesn't matter where you open up your browser, you are always connected to the same server.</p>
<p>[09:33] marcus:
Yeah, and if someone mentions you while you're disconnected, you instantly see, there's like a red flag in the corner there, it's like 300 messages.</p>
<p>[09:40] szabgab:
Okay, do people, how do other people see you?
So when you're not connected to the server, but the server is still connected to the IRC channel, do they...?
They can't see you?</p>
<p>[09:55] batman:
No, just see you as if you're online.</p>
<p>[09:58] marcus:
Same as if you're on screen.</p>
<p>[10:00] szabgab:
Okay, so that's...you started to build, or started together?
How did you start to build? Who started it?</p>
<p>[10:10] batman:
Marcus started out and then we, after a month or something, I joined in.
And then we just met regularly and we hacked. We were using GitHub so we could contribute and collaborate that way.</p>
<p>[10:27] marcus:
I'm a big fan of the GitHub workflow.
We were using GitHub to track new ideas, and you can see what Jan Henning has been doing for the interface and stuff like that.
So it makes it really easy to collaborate.</p>
<p>[10:40] szabgab:
Okay, so if someone doesn't use IRC or... how can you describe this feature or the software and IRC together, so...?</p>
<p>[10:54] batman:
One of the focuses that we are having is we don't want the user to know that it's IRC, we just want it to be like a regular chat application. So for example, like Facebook Messenger or similar applications.
They should feel the same way, so even though we're using IRC as a transport now, that's not really a limitation to the application.
So let's say if you would like to have a Jabber back-end instead, you could build that instead, and you wouldn't know if you were on Jabber or IRC or whatever you're connected to.</p>
<p>[11:42] marcus:
Or even like, if you just want to use Convos as your internal chat, you could just have a loop back-end.
And the only people using Convos. Basically it's a generic chat application but IRC's a transport that we've chosen, because we mostly use IRC.</p>
<p>[11:58] szabgab:
So if you...so okay, if there's a company that wants to have a chat application inside a company for its employees, can they use just Convos without having an IRC server there?
Or do they still need an IRC server?
How difficult would it be to set it up?</p>
<p>[12:15] batman:
So I used to work at <a href="http://telenor.no">Telenor</a>, where one of the biggest telecom company in Norway, where we used Convos internally.
So the nice thing about Convos there was that I was able to connect and chat with people who have no idea about what IRC was.
I just gave them an account to Convos and then we just used it as it would be Facebook Messenger, or any other messaging service.</p>
<p>[12:49] marcus:
But right now to use Convos you need to set up a simple IRC server on the backend. I eventually plan to get rid of that requirement, so that you can just spin-up a chatroom internally in the Convos application, without any IRC server, but really it's not very hard to install.
It's just apt get install command to get IRC installed.</p>
<p>[13:13] batman:
So you don't really have to connect to any global IRC server, so that was one of the requirements because some of the things we were discussing, we couldn't share with a public IRC server.
So that's basically what Marcus was telling about now, is that we just installed IRC server on the RedHat, and then we installed Convos, and then we were up and running.
So then we would have our own isolated chat application that were local to the company.</p>
<p>[13:47] szabgab:
So IRC recently released a new version and one of the big things was the easier way of installing it.
I've never tried to install an IRC server, and I've never tried it, so I wondered, you say, installing an IRC server is just installing the relevant package in your Linux distribution?</p>
<p>[14:09] batman:
Yeah, Red Hat or Debian or something like that, it's quite easy to get up and running.</p>
<p>[14:16] szabgab:
And then what do you need to install Convos?</p>
<p>[14:19] batman:
There's...on our web page, which is <a href="https://convos.by/">Convos.by</a>, there's an installation guide, which is just a one-liner.
So I guess you shouldn't really pipe something into your shell but if you trust HTTPS, then you can run that one-liner and it will download Convos and install it.</p>
<p>[14:46] marcus:
Or you can just get the scrapes. I mean, it's very lightweight in its dependencies, so it's very quick to install.
That was one of the things we wanted to get, the previous version was using Redis as a backend, so then you needed to install Redis and stuff like that.
So we got rid of that requirement, now we can just use it just by...</p>
<p>[15:03] szabgab:
What are the building blocks of Convos?</p>
<p>[15:08] batman:
So right now, we decided to go to a plain file backend.
So that means you don't need any MySQL or Redis or PostGRES or anything, you can just run the one-liner and then you have Convos up and running.
And then you can start connecting to global IRC servers, so the only reason you would need to install your own IRC server would be if you need to exchange data that you don't want to...</p>
<p>[15:37] marcus:
Well, if you need a company chat, basically.</p>
<p>[15:41] batman:
So Convos is built on the Perl Toolchain but it's...the installer script is custom-made for Convos to make it super
simple to install. And that's one of the things that I think is really cool, is that people are joining our Convos help
chat and then they're, <q>Oh how do I install this?</q>
And I'm just pointing them to the installation guide and then they're <q>Oh man, I just installed it and it was so simple!<q>
So you don't need any knowledge of the Perl Toolchain yourself, so you don't need to know how to use CPAN or cpanminus or any of that, you can just download Convos and then it will bootstrap itself.</p>
<p>[16:34] szabgab:
Okay, that's good, probably for most of the people who are not using Perl.
And probably also for people who are using Perl, because easy installation is always good.
So who is using your project?</p>
<p>[16:50] batman:
We would love to know.</p>
<p>[16:53] marcus:
We see the people who come and get support but you know the silence of open source people.
You put it on internet and you don't really know who is using it, right?
We know that some companies have it but...</p>
<p>[17:04] szabgab:
Have you received any outside contributions?
Are you two the team? Or are there more people in the team, building it?</p>
<p>[17:11] batman:
So it's basically me and Marcus, discussing the design and then Joel, like you mentioned earlier, from the Mojolicious core team, he's also done some stuff and then we had a hackathon, I think it was in June, where we had two other people who were contributing and writing unit tests and implementing free text search and stuff like that. So that was really cool.</p>
<p>[17:43] marcus:
And we get issues and we get people contributing ideas and stuff like that.
And we have some pull requests as well, so basically anyone's free to open up a request and contribute.</p>
<p>[17:55] szabgab:
Do you know any other projects that provide similar service or features?</p>
<p>[18:03] batman:
There are a lot of different projects that have the same kind of functionality but a lot of them are online so you can't really...so let's say if you see it from a user experience perspective, then there's a lot of contributing, or sorry not, a lot of competing products but our product is...</p>
<p>[18:33] marcus:
There's not as many like cell phone products like this.
There is one or two Node-based projects that we're competing with and that makes sense I guess. Node is, just like Mojolicious, an async run-loop so it's a good platform to build the same kind of thing.
For us it was more obvious to use Perl or course, because we know it very well and we're very happy with it.</p>
<p>[18:58] batman:
But to mention some, there's Slack and IRC Cloud and you have Shout and MIbbit and there's like...yeah, all of those are hosted. But there's probably at least 20 other projects and maybe 15 of them is written in Node, I guess.</p>
<p>[19:18] szabgab:
Okay, so the... I guess if I wanted to use something like this, I would probably look for something which is hosted? So I wouldn't want to set up my own..if I was using for my personal use and I wanted to access all kind of public IRC channels, then I would probably not want to run my own, if possible, I would rather run...</p>
<p>[19:47] marcus:
Why would you trust a random service on the internet with your private data?</p>
<p>[19:55] szabgab:
If I'm only talking on a public IRC channel?</p>
<p>[19:58] marcus:
Well, you have private messages as well on an IRC server.</p>
<p>[20:02] szabgab:
Okay, that's true.</p>
<p>[20:04] marcus:
One of the problems for me, for instance with IRCCloud, some of the business models are prohibited.
Like you can get started very cheaply but then if you want to be connected to more IRC servers, they want to have a lot more money per month.
So you end up with a lot of running costs to pay for this thing, right?
For instance, a lot of companies are using Slack now, which is fine for free, but then if you want to have your whole history, like you can on Convos, right now you can go back and search in all of the history you chatted, then you have to start paying and for a medium-sized company, that can be hundreds of dollars per month.
Just to have a company chat.</p>
<p>[20:43] szabgab:
Yeah, definitely. So the company chat, for a company chat I would definitely want to have my own everything.</p>
<p>[20:50] marcus:
IRCCloud, I think I was looking, because they were limiting it by the number of IRC servers that you could connect to.
And I want to be on freenode, or MagNET, or something, and then suddenly the price is running up, like 40 - 50 dollars a month, just for a personal account.
For that, I can buy a hosted servers and not just run Convos but run several different things there.
Right?
So.. customize it or improve it, the way you want.</p>
<p>[21:18] batman:
But I can see from, let's say you have no experience with CLI or you don't know how to use Linux or anything, then of course it would be difficult to install Convos but that's one of the things we want to do, hopefully in the beginning of next year, is to write a...I forgot what it's called...but in Ubuntu now, you have these self-contained packages instead of using ordinary Debian packages, so then I would like to make one of those, sorry, I can't remember what it's called, but anyway so you could actually download it and then you can install it as easy as you would install XChat or any of the other desktop clients.</p>
<p>[22:12] marcus:
Even though it's been looking up the solution because I have this set-up for building images of prepared applications.
Link pages is five dollars a month to get your server with Convos and then one click and it's installed and then you have a server in the cloud, which you can reach from anywhere.</p>
<p>[22:32] batman:
And then you wouldn't have any limitations like you would have with hosted services.
So that's probably why I would use Convos instead of just going to a hosted service.</p>
<p>[22:44] szabgab:
So basically for five dollars a month, you would get unlimited connections?
And unlimited users?</p>
<p>[22:52] marcus:
You have your own server and then  you're just limited by the storage of the servers, which is like 40GB or something.</p>
<p>[22:57] batman:
So you could have a lot of chat history.</p>
<p>[23:00] szabgab:
So do you have any business plans with this project?</p>
<p>[23:04] batman:
We were considering it earlier but now we have just been too busy to...like if you were to go into a business, then you would have a business strategy and then you would have, you would need some kind of support plan, and there's a lot of stuff that...so we kind of abandoned that idea. But one of the cool things about Convos is that it's under the MIT license so that means that if anyone else would like to run a business on top of Convos, then they could actually do that.</p>
<p>[23:35] marcus:
We are very open to that idea, if someone wants...</p>
<p>[23:37] batman:
Yeah, I mean that would be awesome, if someone else would...so for example, let's say if you want to make your own hosted Convos server, where people pay you for having their account there, then you're free to do that. There's no limitations on what you can do with our software.</p>
<p>[24:00] szabgab:
Who would be your dream customers, or dream users, not customers, because you're not a business?</p>
<p>[24:07] batman:
One of the things that I would just love if people told us that they were using the software.
I mean there's one of the things that I like the most, when I make an open source project, no matter if it's just a library or it's Convos or it's some other application, then one of the things that fuels me to make the application even better, and of course, fix bugs and all the other stuff, is just knowing that people use it.
So if they just drop us an email or something and just tell us, <q>Yeah, we're using it,<q> then it would be really cool even though if it's just one person somewhere or if it's a big company.</p>
<p>[24:49] marcus:
And if they fail to use it, we want to hear about why as well.</p>
<p>[24:51] batman:
Yeah.</p>
<p>[24:52] marcus:
So we can make sure that they don't fail any more.</p>
<p>[24:54] batman:
Exactly.</p>
<p>[24:55] szabgab:
Actually, regarding that.
If someone wants to start using Convos, they can go and download, go to the website <a href="https://convos.by/">Convos.by</a> and download it and install it and start using it.
But if they need help, where can they go to get help?</p>
<p>[25:14] batman:
So there's a lot of options for getting help as well and you can also see that on the Convos.by web page.
But you can contact us on Twitter, or you can send us an email, or you can open an issue on GitHub, or you can join the Convos channel on chat.freenode.net.</p>
<p>[25:34] marcus:
Or you can just go into our demo application, there's a demo that you can use online if you want to look at it before you try to install it.
And we'll be online there and eventually will answer you.
Maybe not 24/7 because we're both in the same timezone and have to sleep sometimes.</p>
<p>[25:53] batman:
But there are people dropping in, maybe not everyday, but there are questions dropping in on the chat.freenode.net all the time so...</p>
<p>[26:05] szabgab:
So is the channel, the Convos channel, on the demo server, is it connected to the Convos channel on the public IRC server?</p>
<p>[26:17] batman:
No, we had some issues, because a lot of the IRC servers, like the public IRC servers, they have limitations on number of connections.</p>
<p>[26:29] marcus:
Per IP.</p>
<p>[26:29] batman:
Yeah, per IP.
So that means that in the beginning we were running, you could connect to whatever you wanted but then we got banned from a lot of the networks so we had some bad publicity in the beginning.</p>
<p>[26:46] marcus:
That's why we restricted the demo, to just local IRC server.</p>
<p>[26:51] szabgab:
Okay, so people were using the demo, and then that triggered a lot of connections, if I understand it right?</p>
<p>[26:56] batman:
Yeah, but now the demo is locked, so you can't connect to ... you can only connect to one server that we are running.
So we are running our own IRC server, where we are also connected to. So that means that if someone asks us questions in the demo channel then we will answer there as well.</p>
<p>[27:17] marcus:
Yeah, because of course, you can be in more than one server with the full-fledged Convos.
It's just the demo that's locked, the Convos that we are using, you can connect to several IRC servers and get all the channels listed.</p>
<p>[27:31] batman:
Yeah. So we can talk a little bit about the features, which is what we just said, that you can be connected to as many IRC networks as you like. And of course, you have private conversations and then you also have chatrooms.
That's the basic stuff with IRC. For people who are used to other internal chat applications at their work, then one of the big benefits of using Convos is that you actually have the chatrooms.
Because then a lot of people can share ideas and discuss stuff.
That's basic knowledge for anyone who's been using IRC but for people who are just using chat applications, then it's mostly private messages instead of having collaborative chatrooms.</p>
<p>[28:33] szabgab:
Okay, and does the server automatically record history of the channel?</p>
<p>[28:38] batman:
Yes.
So you have unlimited scrollback and we're also implemented search in the backend but we haven't exposed that feature in the frontend yet.
But that will also be unlimited, like you can search back whatever you like.</p>
<p>[28:59] marcus:
I think one of my favorite features is the link embedding. So if someone shares a link to you, for instance, to do it automatically, we embed it into the chat or like GitHub Gists,  you can see a preview of the Gists that someone pastes in the chat.
So it makes the experience more rich.
We also have emoji support now, which is obligatory for a modern application of course, so that you can have smiling cats with teary eyes or whatever.</p>
<p>[29:26] batman:
Yeah.</p>
<p>[29:27] szabgab:
Okay, guys we're running out of time.
Actually we've over the regular time limit, but that's okay because it was interesting to talk about this.
So I would really like to thank you for coming on the show. I hope to...maybe I'll have to try IRC again through Convos, and I'll see if maybe I can handle it and maybe I'll see you there.</p>
<p>[29:54] marcus:
That would be great.</p>
<p>[29:54] batman:
Let us know if you have any problems installing Convos.</p>
<p>[29:58] szabgab:
Okay, thank you.
Bye bye.</p>
<p>[30:00] marcus:
Bye.</p>
<p>[30:01] batman:
Bye.</p>
<p>[/transcript]</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Stack trace in JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-10-10T02:00:11Z</updated>
    <pubDate>2016-10-10T02:00:11Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/stack-trace-in-javascript" />
    <id>https://code-maven.com/stack-trace-in-javascript</id>
    <content type="html"><![CDATA[<p>We have already seen 5 levels of <a href="/logging-in-javascript">logging in JavaScript</a>. Each one showed the line number where the
function was called. That's very nice, but if the same function can be called in multiple places then having
that context can improve your understand what has happened.</p>
<p>Printing a full stack trace can help a lot.</p>
<h2 class="title is-4">Using console.trace</h2>
<p>Luckily the <code>console</code> object also has a method called <code>trace</code>.</p>
<p>In the following example we have a few totally useless functions calling each other and then
calling the <code>add</code> function, that calls <code>console.trace</code>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging_trace.js">examples/javascript/logging/logging_trace.js</a></strong></p>
<pre><code class="language-js">function add(x, y) {
    console.trace('add called with ', x, 'and', y);
    return x+y;
}

function calc() {
    return add(8, 11) + add(9, 14);
}

function main() {
    var x = add(2, 3);
    var y = calc();
}


main();

</code></pre>
<p>The output in <a href="/open-javascript-console">the JavaScript web console</a>
of Chrome looks like this:</p>
<img src="/img/javascript_trace_in_chrome.png" alt="console trace in Chrome" />
<p>In Firefox it looks like this:</p>
<img src="/img/javascript_trace_in_firefox.png" alt="console trace in Firefox" />
<p>If you'd like to try it yourself, here is the HTML that will load the above JavaScript file.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging_trace.html">examples/javascript/logging/logging_trace.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;script src=&quot;logging_trace.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;a href=&quot;http://code-maven.com/open-javascript-console&quot; target=&quot;_blank&quot;&gt;Open the JavaScript console&lt;/a&gt;
    in order to see the logging messages.
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/javascript/logging/logging_trace.html">view</a></p>
<h2 class="title is-4">Stack trace as a string</h2>
<p>There are cases when you might not necessarily want to print the stacktrace immediately,
or you might even want to save it or send it to the server. For such cases, it would be nice
to be able to get a string version of the stack trace.</p>
<p>The following solutions are based on ideas found on
<a href="http://stackoverflow.com/questions/591857/how-can-i-get-a-javascript-stack-trace-when-i-throw-an-exception">this</a>
and <a href="http://ivan-gandhi.livejournal.com/942493.html">this</a> page.</p>
<h2 class="title is-4">Stack trace with Error object</h2>
<p>In this solution we create and <code>Error</code> object and then return (and print)
the <code>stack</code> attribute.</p>
<p>The full JavaScript code looks like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging_trace_with_error.js">examples/javascript/logging/logging_trace_with_error.js</a></strong></p>
<pre><code class="language-js">function add(x, y) {
    console.log(new Error().stack);
    return x+y;
}

function calc() {
    return add(8, 11) + add(9, 14);
}

function main() {
    var x = add(2, 3);
    var y = calc();
}


main();

</code></pre>
<p>The corresponding HTML file is not very intersting, but it is included to make
it easier for you to try it:
<strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging_trace_with_error.html">examples/javascript/logging/logging_trace_with_error.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;script src=&quot;logging_trace_with_error.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;a href=&quot;http://code-maven.com/open-javascript-console&quot; target=&quot;_blank&quot;&gt;Open the JavaScript console&lt;/a&gt;
    in order to see the logging messages.
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/javascript/logging/logging_trace_with_error.html">view</a></p>
<p>The output in Chrome:
<img src="/img/javascript_trace_with_error_in_chrome.png" alt="console trace in Chrome" /></p>
<p>and in FireFox:
<img src="/img/javascript_trace_with_error_in_firefox.png" alt="console trace in Firefox" /></p>
<h2 class="title is-4">Stack trace using caller object</h2>
<p>In this solution we have implemented a function called <code>stacktrace</code>
that will return a string representing the call history to the point
where <code>stacktrace()</code> was called.</p>
<p>Internally it uses another function called <code>st2</code> that will be called
recursively traversing the call-tree up till the point where we reach the main
body of our JavaScript script.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging_stacktrace.js">examples/javascript/logging/logging_stacktrace.js</a></strong></p>
<pre><code class="language-js">function add(x, y) {
    console.log(stacktrace());
    return x+y;
}

function calc() {
    return add(8, 11) + add(9, 14);
}

function main() {
    var x = add(2, 3);
    var y = calc();
}


main();

function stacktrace() {
  function st2(f) {
    var args = [];
    if (f) {
        for (var i = 0; i &lt; f.arguments.length; i++) {
            args.push(f.arguments[i]);
        }
        var function_name = f.toString().split('(')[0].substring(9);
        return st2(f.caller) + function_name + '(' + args.join(', ') + ')' + &quot;\n&quot;;
    } else {
        return &quot;&quot;;
    }
  }
  return st2(arguments.callee.caller);
}

</code></pre>
<p>At the end of the declaration of <code>stacktrace</code> we call <code>st2</code>
with the <code>arguments.callee.caller</code>.
<a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/arguments">arguments</a> is
a special object that belongs to the current function call and that contains a lot of
information about the current call. For example the <code>callee</code> attribute refers to the
currently executing function which is <code>stacktrace</code>.</p>
<p>We can probably replace <code>return st2(arguments.callee.caller);</code>
by <code>return st2(stacktrace.caller);</code>, but then we repeat the function name which
will make it harder to rename the function.</p>
<p>the <code>st2</code> function is then called recursively and it returns the stacktrace string so far.
When it reaches the top-most function call (in our case <code>main</code>) the next recursive call
will be with an <code>undefined</code> value received from <code>f.caller</code>. That will make it
return an empty string without further recursive calls.</p>
<p>If <code>f</code> is not yet <code>undefined</code> we build up the current call at the current
level of the stacktrace.
We use the <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/arguments">arguments</a>
object of the current function. Because it is not a real Array we cannot use <code>join</code> and we have to
loop over the elements to build up the list of arguments received by this call. That's what is saved
in the <code>args</code> array.</p>
<p><code>f.toString()</code> returns the string representation of the function <code>f</code>.
Each such string representation starts with <code>function some_name(param, param) {</code>.
<code>split('(')</code> cuts that string at the <code>(</code> characters in the source code of
the function, including the first <code>(</code> in the argument declaration.</p>
<p>The <code>[0]</code> means we take the first element from the returned array. That returns
<code>function some_name</code>. Calling <code>substring(9)</code> take all the characters
except the first 9 and returns that string. The returned string is the name of the
function. In our example it is <code>some_name</code>. That's how we can extract the name
of the currently called function.</p>
<p>Now that we have both the name of the current function and the list of parameters it
received we can create a string that represents the call.</p>
<p>The result looks like this in Chrome:</p>
<img src="/img/javascript_stacktrace_chrome.png" alt="console trace in Chrome" />
<p>and this in FireFox:</p>
<img src="/img/javascript_stacktrace_firefox.png" alt="console trace in Firefox" />
<p>If you'd like to try it yourself, here is the corresponding html file:
<strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging_stacktrace.html">examples/javascript/logging/logging_stacktrace.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;script src=&quot;logging_stacktrace.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;a href=&quot;http://code-maven.com/open-javascript-console&quot; target=&quot;_blank&quot;&gt;Open the JavaScript console&lt;/a&gt;
    in order to see the logging messages.
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/javascript/logging/logging_stacktrace.html">view</a></p>
<h2 class="title is-4">The console API</h2>
<p>For even further details check out the
<a href="https://developer.chrome.com/devtools/docs/console-api">console API of Chrome</a>
and the
<a href="https://developer.mozilla.org/en/docs/Web/API/console">console API of FireFox</a>.</p>
<h2 class="title is-4">Comments</h2>
<p>As far as I understand, &quot;Stack trace using caller object&quot; part doesn't work in modern browsers, after <code>arguments.callee.caller</code> deprecation, right?</p>
<hr />
<p>Thanks. It works well in Flash too!</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #15: Prosper Otemuyiwa - Laravel</title>
    <summary type="html"><![CDATA[Prosper Otemuyiwa]]></summary>
    <updated>2016-10-07T21:01:01Z</updated>
    <pubDate>2016-10-07T21:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-15-prosper-otemuyiwa" />
    <id>https://code-maven.com/cmos-15-prosper-otemuyiwa</id>
    <content type="html"><![CDATA[<p>Interview with <a href="http://goodheads.io/">Prosper Otemuyiwa</a> from Nigeria about <a href="https://laravel.com">Laravel</a>, being a GDE and a lot of other things.</p>
<podcast>
<h2 class="title is-4">Prosper Otemuyiwa</h2>
<ul>
<li><a href="http://goodheads.io/">GoodHeads</a></li>
<li><a href="https://twitter.com/unicodeveloper">Twitter: @unicodeveloper</a></li>
<li><a href="https://github.com/unicodeveloper">GitHub</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="https://developers.google.com/experts/">Google Developer Expert</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/National_Youth_Service_Corps">National Youth Service Corps (NYSC)</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/Igbo_language">Igbo language</a></p>
</li>
<li>
<p><a href="https://andela.com/">Andela</a></p>
</li>
<li>
<p><a href="https://github.com/unicodeveloper/awesome-opensource-apps">awesome-opensource-apps</a></p>
</li>
<li>
<p><a href="https://laravel.com/">Laravel</a></p>
</li>
<li>
<p><a href="https://forge.laravel.com/">Laravel Forge</a></p>
</li>
<li>
<p><a href="https://laravel.com/docs/envoy">Envoy</a></p>
</li>
<li>
<p><a href="https://laracasts.com/">Laracast</a></p>
</li>
<li>
<p><a href="https://twitter.com/jeffrey_way">Jeffrey Way</a></p>
</li>
<li>
<p><a href="http://railscasts.com/">Railscasts</a></p>
</li>
<li>
<p><a href="https://github.com/unicodeveloper/laravel-paystack">laravel-paystack</a></p>
</li>
<li>
<p><a href="https://github.com/unicodeveloper/laravel-emoji">laravel-emoji</a></p>
</li>
<li>
<p><a href="https://github.com/unicodeveloper/laravel-mentions">laravel-mentions</a></p>
</li>
<li>
<p><a href="https://github.com/unicodeveloper/laravel-hackathon-starter">laravel-hackathon-starter</a></p>
</li>
<li>
<p><a href="https://github.com/unicodeveloper/jwt-for-babies">jwt-for-babies</a></p>
</li>
<li>
<p><a href="https://github.com/unicodeveloper/es6-for-babies">es6-for-babies</a></p>
</li>
<li>
<p><a href="https://auth0.com/docs/jwt">auth0 jwt</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[unicodeveloper guest1 Prosper Otemuyiwa]</p>
<p>[00:02] szabgab:
Hello there, this is the CMOS, the Code Maven open source podcast and this time, it's only a podcast, not a video.
This is your host, Gabor Szabo, and with me is <a href="http://goodheads.io/">Prosper Otemuyiwa</a>.
Hello Prosper!</p>
<p>[00:17] unicodeveloper:
Hi Gabor!</p>
<p>[00:18] szabgab:
How are you?</p>
<p>[00:19] unicodeveloper:
I'm fine, how are you doing?</p>
<p>[00:21] szabgab:
I'm really good.
I'm a little bit sad that we couldn't manage to set up the video properly this time, but I hope the listeners will forgive us this time.</p>
<p>[00:33] unicodeveloper:
I hope they do.</p>
<p>[00:35] szabgab:
So, let's talk about one thing that we talked about a little bit earlier, about your handle, the <q><a href="https://twitter.com/unicodeveloper">Unicodeveloper</a>.</q></p>
<p>[00:45] unicodeveloper:
Oh, okay, so how that came about, actually very funny.
Back in college, somebody called me <q>Unicode</q>, you know when he entered my room.
Because a lot of people come to my room to look for programming solutions, to ask me how they could go on, creating apps and stuff, back in the university.
So he called me Unicode, it sounded nice. I also got to to intern at a place just immediately I was done with school.
And my boss there, too, was calling me Unicode.
So I was, <q>Okay.</q>
So I wanted to create a Twitter handle, no actually I had a Twitter handle, and I was trying to revamp it.
I was trying to get the new handle to become much more active on stuff.
So I just said, <q>Okay, let me combine Unicode and Developer.
And to become <a href="https://twitter.com/unicodeveloper">Unicodeveloper</a>.</q> And it sounded like a good name to me then, so I just said, <q>Okay, let me use it.</q>
And here we are today!</p>
<p>[01:39] szabgab:
Great, so I understand that you recently became a <a href="https://developers.google.com/experts/">Google Developer Expert</a>?
Is that right?</p>
<p>[01:48] unicodeveloper:
Yes, that's actually very true.</p>
<p>[01:50] szabgab:
So tell me, your original story, from the beginning until the point where you become a GDE?</p>
<p>[01:58] unicodeveloper:
Wow...oh my God...well, okay, so I guess I'll start from when I was in university.
So I graduated from the university three years ago.
And yes, so in Nigeria, we have a compulsory one-year service program, where you have to serve the government.
So I went for that, I finished in 2014...</p>
<p>[02:28] szabgab:
What is this?
What is this program, the one year?</p>
<p>[02:31] unicodeveloper:
It is called <a href="https://en.wikipedia.org/wiki/National_Youth_Service_Corps">National Youth Service Corps</a>, NYSC, so you'll be transported on other states for one year, to just work for the government.
And they give you some peanuts, small amount of money, to survive.
So it's almost like..</p>
<p>[02:49] szabgab:<br />
Why is that?</p>
<p>[02:51] unicodeveloper:
They said it's the first time, people from different regions, so I really don't know if they use the same purpose, but back when it was created it was because the people from the west were so different from the people from the north, there was no collaboration.
So they wanted collaboration between people, so that's how the program came about.
To transform, on the path of the nation, that's where you get to know new people and you interact with people from different culture, people can bond and become friends and good things can come out of that.
So that was the purpose of the program, I guess.</p>
<p>[03:27] szabgab:
So do you think that it worked for you?
Have you met a lot of different people, from different...?</p>
<p>[03:33] unicodeveloper:
When I was transported east, so I met some new people but, to be true, I still met a lot of people from my own culture, from Lagos or hereabouts.
So I really don't know but I really loved it during my time, because I got to learn new things, I got to learn the language they were speaking there, which is <a href="https://en.wikipedia.org/wiki/Igbo_language">Igbo</a>, Igbo language.
And what else...I think it was cool for me but for some other people, it was not really that good.
Some people were angry, trying it for one year.
But for me, it was kind of a nice experience.</p>
<p>[4:14] szabgab: OK.</p>
<p>[4:16] unicodeveloper:
Yeah, so after my youth service, I joined an organization called <a href="https://andela.com/">Andela</a>.
Andela was barely started, so I joined an organization called Andela where I started working as a technical trainer.
So if you don't know Andela, a little context.
Andela is the company that Mark Zuckerberg and Google Ventures invested in some 24 million dollars.
It was on the news.
And Mark Zuckerberg came to Africa recently and that was one of the places he came to check out.
So that's a little context about Andela.</p>
<p>So back then, Andela was just starting up, so nobody knew about Andela like that, it was just starting up.
So I joined, as a technical trainer and I guess a lot of things happened there.
A lot of things, the mission of Andela is actually to train people in Africa to become world-class software engineers, so that they can just outsource those developers to companies in the U.S.
Because a lot of companies in the U.S. were finding it difficult to get affordable developers since the market was saturated, because a developer in the U.S. was very expensive, so if you have brains in Africa, you could hire a developer from Africa at the much lower cost.
And see the same output you get by hiring a developer from the U.S.
So that was the purpose.</p>
<p>So we're training these guys in the art of software development, a lot of that.
So that was where I became very active in open source.
I started my open source bouts in Andela.
I always dreamed my evangelizing in Andela, I was always trying to inspire people to be world-class, to know the new processes in world software development, to test their code, I was really big on open source projects and I was also speaking at events.
I was organizing meet-ups, I was just trying to bring the Nigerian developer community to a place where people outside of Africa can look at Nigerian community and say <q>Wow, these guys have a handful of very good, awesome developers.
These guys have the community, these guys are good.</q>
We needed the credibility, so that was just my focus and apparently, I guess I did well. And someone nominated me to be a Google Developer Expert.
And I went through all the interviews, apparently I also did well, so here we are. I'm now a Google Developer Expert.</p>
<p>[06:39] szabgab:
So congratulations!</p>
<p>[06:43] unicodeveloper:
Thank you very much.</p>
<p>[06:44] szabgab:
Back to Andela a little bit.
Is it only working in Nigeria?
Or does it have operations in other countries in Africa?</p>
<p>[06:54] unicodeveloper:
Yes, so Andela started in Lagos, so Andela is in currently Lagos.
Andela is in Kenya, I think they have plans of moving to South Africa, I'm not really sure about that for now.
Then they also have offices in the U.S.
They have an office in the U.S., yes, so that is how Andela is right now.</p>
<p>[07:15] szabgab:
Good, but still there are a lot of other countries in Africa, so do you have connections in other countries, as well?
Personally, or...?</p>
<p>[07:27] unicodeveloper:
For Andela or for me?</p>
<p>[07:27] szabgab:
No, for you, personally, within the high-tech community especially?</p>
<p>[07:33] unicodeveloper:
Okay, yes, so I have a lot of developer friends in Kenya.
I also have some developer friends from Uganda, from Ghana, and so my goal is to get to a lot of those other African countries and organize meet-ups and conferences.
But right now, I think I'm organizing my own life.
Like on Twitter, so I make a lot of noise on Twitter about development and being a world-class developer.
So I have a lot of people that follow me from those countries.
So from Ethiopia, from Kenya, from Ghana, from Zimbabwe, from Uganda, and I've just been to a few of those countries, like Kenya and Tanzania.
I am hoping to go to Ghana this month and then I will start trying to plan my trips to get to see developers in these other countries.</p>
<p>[08:34] szabgab:
Interesting, okay...so open source?
You do all kinds of open source projects.
There's one, it's actually not a project I think, it's the <a href="https://github.com/unicodeveloper/awesome-opensource-apps">awesome-opensource-apps</a>?
I think that's a repository that you maintain, right?</p>
<p>[08:52] unicodeveloper:
Yes, yes, I do.
Awesome-opensource-apps is a... so, one of the things I observed when I was in Andela, was I discovered that when people get into programming for the first time, they learn the fundamentals of programming.
They learn operators, they learn functions, they learn return types, now those are the basics of programming, right?
Now how do you transition from learning the basics of programming to building a full-fledged app, okay?
So you come and you say <q>Oh, I'm going to use HTTL and CSS with these.</q>
Or there's a database that maintains this information.
Or, okay there's this, oh that's wrong.
How do you put all these resources together, how do you put all this stuff together? How do you get to do push notifications? How do you get to understand how programmer workers work?
How do you get to understand how to do this work?
All of those complex processes, so I just looked and I was always on GitHub, so I discovered, <q>Oh, we already have open source apps.</q>
We have other things existing that people just...developers just found it in their minds to put it online for people to look at the code.</p>
<p>So I was, <q>Oh, if you could have a place where you could find different open source in different languages or different frameworks so that somebody that's past the level of trying to understand the basics, can just jump into that app, look at the features it implements, look at how it's been implemented online, then learn from it, and go ahead and implement it in your project.</q>
So that's how the Awesome-opensource-apps came to be and currently I discovered a lot of people are finding it very useful.
I mean it has about 250 stars already and a lot of people are contributing to it.</p>
<p>[10:41] szabgab:
So it's a list of projects, right?</p>
<p>[10:44] unicodeveloper:
Yes, it's a list of open source projects.</p>
<p>[10:46] szabgab:<br />
Okay, and are these projects...are these web applications, or other things as well?</p>
<p>[10:52] unicodeveloper:
Yeah, they are mostly web applications, so I added a section of interest especially for mobile apps, so I'm hoping to get more mobile apps there also.</p>
<p>[11:04] szabgab:
And are these applications things that you usually download and run by yourself, or are these websites that are live websites that you can...?</p>
<p>[11:19] unicodeveloper:
So, 90% of them are live.
They're live and you can still also download and install on your own local machine.</p>
<p>[11:30] szabgab:
Okay, but they are actual websites doing something already.
So most of the people would only contribute and then hopefully get into the real website?</p>
<p>[11:41] unicodeveloper:
Yes, exactly. So yes, you can actually contribute to get mention to the real web app or websites, and you'll see it start working.</p>
<p>[11:50] szabgab:
Yeah, I did something like this, only for the Perl community.
It was a really, really small list of applications. But I definitely will look at your list and maybe I'll send a couple of pull requests, so you include...</p>
<p>[12:05] unicodeveloper:
That would be totally awesome!
I'm open, I'm very open to these words.</p>
<p>[12:09] szabgab:
Good, but you, if I'm not mistaken, you're mostly a...so you do a lot of PHP, right?</p>
<p>[12:18] unicodeveloper:
Yes, I do a lot of PHP.
Also <a href="https://laravel.com/">Laravel</a>, which is the PHP framework.
If it were more recently, I would do a lot of JavaScript because the way the world is structured now, JavaScript is the most popular language and it's used everywhere.
So you can't run away from it.
So now I'm doing React, I'm doing Angular, I'm doing Angular 2, stuff like that.</p>
<p>[12:44] szabgab:
Okay, but can we talk about Laravel a little bit?
Can you explain what is it? I know the name, mostly..?</p>
<p>[12:52] unicodeveloper:
So Laravel is an open source framework, that's built on PHP, so Laravel currently, quote me anywhere, currently Laravel is the best PHP framework to use to build web applications because a lot of things are taken care of for you.
Like you have built-in authentication system, you have a very bubbly Laravel community, you have a lot of Laravel packages, that you can just plug into your application and within a couple of hours you have a fully-functional web app.
And it's just awesome, the community is great. So that's one thing I love about Laravel.</p>
<p>[13:32] szabgab:
Okay, what kind of applications are being built with Laravel?</p>
<p>[13:39] unicodeveloper:
Well, virtually any type of web application. If you want to build a content-management system, if you want to build a build system.
For example, <a href="https://forge.laravel.com/">Laravel Forge</a> is a system that you can use to deploy applications that were produced by the criteria of Laravel. And you use Laravel to build it.
You can also build <a href="https://laravel.com/docs/envoy">Envoy</a>. Envoy is a system that you can also use for deployments.
Deployments with no downtime. And you can build any type of web application you want to build with Laravel, any type basically.</p>
<p>[14:11] szabgab:
Okay, so how would you get started with Laravel? If someone wants to learn it?</p>
<p>[14:19] unicodeveloper:
Oh, so I got into Laravel in 2014, so I joined just before I started the one-year program that I told you about.
I joined a company called Cart, that was the name of it, I was dealing with market PCs and stores.
So we were meant to rebuild the platform, using Laravel.
And there's not a lot of difference between Ruby and Laravel, so that was the best option.
So we had to start researching about how to build an application in Laravel.
So that's how I came across Laravel and since then, Laravel has got in my heart.
Oh my god, I just love Laravel.</p>
<p>[14:59] szabgab:
Okay, that's great.
Actually there is a dog behind you somewhere, we can hear it.</p>
<p>Anyway, what I actually wanted to ask you, is how do people get into Laravel today?
So if someone wants to start using it, what would you suggest to do?</p>
<p>[15:22] unicodeveloper: What would I suggest for...?
I didn't get that.</p>
<p>[15:24] szabgab:
If I wanted to start to use Laravel, to build a web application, where would you suggest me to go?</p>
<p>[15:35] unicodeveloper:
I would suggest you to go to <a href="https://laracasts.com/">Laracasts</a>.
Laracasts is the website that is build by <a href="https://twitter.com/jeffrey_way">Jeffrey Way</a>, Jeffrey Way is one of the very popular PHP guys, he did a lot at Tuts+.
He also has written a lot of articles in different publications in the world and is the best teacher I've ever come across.
So if you want to do stuff in Laravel, make sure you create an account on Laracasts.com.</p>
<p>[16:01] szabgab:
I guess there are screencasts, right?</p>
<p>[16:04] unicodeveloper:<br />
Exactly, there's a screencast.
I don't know if you know of <a href="http://railscasts.com/">Railscasts</a>, so it's something similar to Railscasts but this one is for Laravel and it's awesome.
Very awesome!</p>
<p>[16:13] szabgab:
Okay, that's great.
You have a couple of Laravel related, I don't know if these are extensions, plug-ins, on <a href="https://github.com/unicodeveloper">your GitHub</a>?</p>
<p>[16:23] unicodeveloper:
Yes, I have a couple of Laravel packages that I built, at least 11 or 12 of them, at least.</p>
<p>[16:32] szabgab: Give me the highlights?</p>
<p>[16:36] unicodeveloper:
Okay, so I have one I built for a payment company in Niger, <a href="https://github.com/unicodeveloper/laravel-paystack">Paystack</a>.
So I did Laravel-Paystack, so if you're trying to integrate a pay-system into your application, you can use it.</p>
<p>Then I also did <a href="https://github.com/unicodeveloper/laravel-emoji">Laravel-Emojis</a>, Laravel-Emojis is just a Laravel package that can help you with using different types of emojis in your applications, so you want to build an application that has emojis, you can use Laravel-Emojis because it has the expressive methods, like I used to call emojis.<br />
You can also dump an emoji down with another name, and all of that.</p>
<p>And you also have <a href="https://github.com/unicodeveloper/laravel-mentions">Laravel-Mentions</a>, so Laravel-Mentions is a package that helps you to be able to do the type of mentioning you do on Facebook.
So on Facebook you do <q>@Prosper,</q> it brings the dropdown, I mean once you are on @, it brings the dropdown of the potential people you are trying to mention.
So with that package, it's a good application, a Laravel application, that package was done in PHP and JavaScript.
So once you do the @ and connect it to your database, it brings suggestions once you put the first character, it will bring suggestions of the person you're trying to mention easily.
So you don't have to swear at it.
And this is the package for that.</p>
<p>Then, I think one of the most popular ones I did, was the <a href="https://github.com/unicodeveloper/laravel-hackathon-starter">Laravel-Hackathon-Starter</a>, so I don't know if I should call that one a package or a build app.
It's more of a boiler-plate tool.
So for people who want to build web applications, very fast, you don't want to think about it, think about adding emojis or use this API, it just gets the boilerplates.
So the boilerplate has integration with several internet providers, it has integration with about 80 APIs from Slack, API from Clockwork, to LinkedIN, different levels of API that you need. Message API, all of that.
All of that, in just one piece.
So what I was really thinking about is really people who want to be MVPs. And people that find themselves in hackathons. In hackathons you don't have time, you just want to build your products.
So if you want to build in Laravel, you can just use my boilerplates, everything is set up for you from the authentication to the social media login to all the APIs you need to use, at least 18 of them.
So you can choose from, you can just filter them out and before you know it, your hackathon app is ready.
So and I also thought, <q>Oh, this can just work for every piece, not just hackathons.</q>
And it's funny how I put it out there and within a week, it became very popular, got a lot of stars, the PHP editor of Sitepoint got to know about it.
Got it evangelized, people found it very useful.</p>
<p>[19:21] szabgab:
Okay, do you still work on these projects?
Or are they finished?</p>
<p>[19:28] unicodeveloper:
So, I've not touched it in awhile.
The last time I touched it was about five months ago, so I'm planning on doing a re-fashion on two of the projects.
Also, upgrade to Laravel 5.3 and also add, I have some ideas of some awesome stuff I want to add to the projects, so I'm just thinking around it and I'm going to start on the re-fashion very soon.
It's going to be great, it's going to be awesome.</p>
<p>[19:49] szabgab:
Okay, looking forward to it.
Maybe I'll learn a little about Laravel and see, it's interesting actually to build these case-studies, so when you have a...you learn a new framework and then you need to try it out, then usually it's better to do something, I think, that you already know the business behind, so you already understand that part and you don't have to figure out that part as well.</p>
<p>[20:18] unicodeveloper:
Exactly, exactly, totally makes sense.</p>
<p>[20:21] szabgab:
Okay, so as an ending of this podcast, what are your plans, open-sourcewise or workwise?</p>
<p>[20:35] unicodeveloper:
Okay, so I...oh my God, I have a lot of plans!
I am very much a community person so I...it's a passion for me to see upcoming developers grow from this stage where they knew nothing, where they are looking like Jon Snow, to this stage where they become Jon Skeet.
Like they become a programming badass.
So I'm always thinking about projects, open source projects, and also articles on software that I can write.</p>
<p>That can make people easily understand some concepts so there are some concepts in programming that people just have few ideas about, normally indexed, so right now I'm trying to work on a series called <q>For Babies.</q>
So I want to do <q>Laravel for Babies,</q>
I want to do <q>SQL for Babies,</q> <a href="https://github.com/unicodeveloper/jwt-for-babies">JWT-for-Babies</a>, nobody knows about that yet. I just put, okay I told one person.
So if you go to my GitHub, you'll see I created some repos, <a href="https://github.com/unicodeveloper/es6-for-babies">es6-for-babies</a>, I'm trying to work on that series.
And I want to...it's going to be like an open source book.
In a way, if you really don't understand this concept, you can just jump in and to give you a very bare, basic explanation of what you need to know. That's within five minutes or ten minutes of getting on, you'll be understanding the concepts that are really very difficult, for a long time.</p>
<p>So that is my plan right now, and I would like to write more articles, write more tutorials, I'm also working on building an application platform right now, where I can do a lot of screencasts for people to learn how to build popular clones, using Laravel to build those clones.
So you can build a clone of AirBnB, build a clone of Facebook, a lot of that.
And I'll go through the process from scratch to finish.</p>
<p>So those are the ideas I have around in my head right now.
Also, for example, I work on <a href="https://auth0.com/">Auth0</a>, we just released a handbook called the JWT Handbook, where you can learn all about JWT web cookies, it's good that I was also part of the people, I did code-samples for the book and did some edits and the book is out there now, so anybody that wants to know about JWT, you can go to <a href="https://auth0.com/docs/jwt">Auth0 website</a> and also just download the book.</p>
<p>So those are the things I've been working on and thinking about right now concerning the open source community.
Recently also, my friend and I, Kristen, she is from an Angular community here in Nigeria, so we plan to do talks around Angular 2, and all of that. So those are my ideas.</p>
<p>[23:33] szabgab:
Interesting, most of your open source projects are generic, can be used by anyone, anywhere in the world.
But the community part, I guess, it's more focused on Nigerians or Africans in general?
When you are thinking about things that you are planning to do, or anything, what kind of people do you have in your mind?</p>
<p>[23:59] unicodeveloper:
So first of all I have Nigerians in my mind, because I'm a Nigerian.
I was born here and I schooled here, I was brought up here. So no foreign education of any type, everything was in Nigeria here and I still stay in Nigeria, too.
Any time I'm trying to build something, any time I'm trying to organize an event or meet-up, the first things I think about is Nigeria.
I cannot think about other parts of the world.</p>
<p>So for example, just two weeks ago, I was in Kenya for the <a href="http://dev-craft.co.ke/">DevCraft Conference</a>, I talked about it so a lot of people know about it.
A lot of people came for the session I presented, so I also travel frequently to other African countries to speak.
But that just started, I haven't come very far with that, but I know very soon I'm going to be doing a lot of that, more often.</p>
<p>[24:55] szabgab:
Okay, good. I think I ran out of these questions now, even though I think I have quite a few more.
But I guess I'll keep them for a follow-up session. Hopefully in a couple of weeks from now, or months.
What do you say?</p>
<p>[25:13] unicodeveloper:
Okay, yeah, that would be great.</p>
<p>[25:17] szabgab:
Okay, so thank you very much for coming on the show, do you have anything additional that you wanted to say or ..?</p>
<p>[25:29] unicodeveloper:
Well, I think everything I need to say is just for developers out there.
I just like to tell developers that you can be a better developer if you start thinking about building tools for other developers.
It has a way of expanding your way of thinking.
That it's a different ball game when you're building applications for clients or for the general populace and it's a different way of building for other developers.
Now building for developers, now it's for people who are very smart, smart people like you, so when you're building things for them, you think about a lot of things.
Okay, what about this situation, what about this situation, what if the developer decides to do something like this?</p>
<p>It has a way of expanding your horizon and you learn a lot, you get to learn very fast.
So people constantly ask me how I've been able to learn a lot within the few years I've been developing, or how I became a Google Developer Expert, or how I have done all these open source projects. It's because I decided to start building tools for all of us.
So it's helped me, it opened my horizon.
I saw very popular developers, I started looking at their code, I looked at how they...actually I was stalking these guys, stalking them, to understand their thought process. To understand how they do things, I look at their code.
I try to duplicate it, I try to see.
So every time I go somewhere, every time I'm eating, anything I'm doing, I'm always thinking about how I can put it to an open source project.
If I'm drinking beer today, I'm thinking of how I can turn that beer into an open source project.
So it has affected my thinking, it also helps me grow as a developer. So I guess that's my advice, that is what I have to say right now.</p>
<p>[27:15] szabgab:
That's excellent advice, excellent advice, thank you. And thank you again for coming on the show and I hope to see you, and I hope to have a video next time.</p>
<p>[27:26] unicodeveloper:
Yeah, that would be great, me too, I really want to have a video, it would be awesome to see my face and know my lips are moving.</p>
<p>[27:34] szabgab:
Okay, bye bye.</p>
<p>[27:37] unicodeveloper:
All right, thank you, bye.</p>
<p>[/transcript]</p>
<!--

## Technical info

Recorded on 7 October 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed

Recoding Option:
  Record Video: Audio only
</pre>

-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #14: Johnny Ray Austin - Mo - Django - VueJS</title>
    <summary type="html"><![CDATA[Interview with Johnny Ray Austin about the Mo project for creating Django based projects and VueJS for front-end development.]]></summary>
    <updated>2016-10-06T19:01:01Z</updated>
    <pubDate>2016-10-06T19:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-14-johnny-ray-austin" />
    <id>https://code-maven.com/cmos-14-johnny-ray-austin</id>
    <content type="html"><![CDATA[<p>Interview with <a href="https://johnnyray.me/">Johnny Ray Austin</a> about how he changed his major from aerospace engineering to computer science and found the field he loves! He's now the Director of Technology at <b>ISL</b> (formerly called iStrategy Labs), which does a lot of social media AOR (agency of record), website design/development, applications, and content work. The ISL Mo project, available on their <a href="https://github.com/istrategylabs">GitHub</a>, includes skeletons for static, Django, and Node.js website deployments, to allow developers to get up and running in minutes, with a framework that complies with current best standards.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/6j4tUUwOU3w" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Johnny Ray Austin</h2>
<ul>
<li><a href="https://johnnyray.me/">Johnny Ray Austin</a></li>
<li><a href="https://twitter.com/recursivefunk">Twitter: @recursivefunk</a></li>
<li>Director of Technology at <a href="https://isl.co/">ISL</a> <a href="https://twitter.com/istrategylabs">@istrategylabs</a></li>
<li><a href="https://medium.com/@recursivefunk">Blog</a></li>
<li><a href="https://github.com/recursivefunk">GitHub</a></li>
<li><a href="http://technical.ly/dc/2016/08/08/johnny-ray-austin/">iStrategyLabs’ Johnny Ray Austin almost became an aerospace engineer</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="https://github.com/istrategylabs">ISL GitHub repo</a></p>
</li>
<li>
<p><a href="https://github.com/istrategylabs/mo-static">mo-static</a></p>
</li>
<li>
<p><a href="https://github.com/istrategylabs/mo-django">mo-django</a></p>
</li>
<li>
<p><a href="https://github.com/istrategylabs/mo-node">mo-node</a></p>
</li>
<li>
<p><a href="https://vuejs.org/">Vue.js</a></p>
</li>
<li>
<p><a href="http://emberjs.com/">ember.js</a></p>
</li>
<li>
<p><a href="https://www.djangoproject.com/">Django</a></p>
</li>
<li>
<p><a href="https://github.com/audreyr/cookiecutter">cookiecutter</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[jra guest1 Johnny Ray Austin]</p>
<p>[00:02] szabgab:
Hello there,  you're listening to the CMOS, to the Code Maven open source podcast and video interview series, I'm your host, Gabor Szabo, and with me is <a href="https://johnnyray.me/">Johnny Ray Austin</a>.
Hi Johnny!</p>
<p>[00:13] jra:
Hey, how's it going?</p>
<p>[00:14] szabgab:
I'm really fine and really happy to have you finally on the show.</p>
<p>[00:21] jra:
Well, I went on vacation, so...</p>
<p>[00:22] szabgab:
Oh, that's good, I hope you enjoyed it.
I see you are at work, right now?</p>
<p>[00:27] jra:
Yeah, I'm in the office today, I know we initially talked about me being at home but I decided to come into the office today, so that's why the interesting background is there, with the ceiling and stuff.</p>
<p>[00:37] szabgab:
Yeah, well I think it's much better than my usual storage room and whatever background I have, wherever I find some space to record these shows.
So anyway, tell me a little bit about your background, how did you get into computing and what kind of stuff you do?</p>
<p>[00:57] jra:
Sure, so I work at <a href="https://isl.co/">ISL</a>, which is a digital agency in Washington, D.C.
I work there as the Director of Technology.
As far as how I got into tech, I guess it goes back to high school, a bit.
I mean, this was late 90s sort of timeframe, and so Internet was around but it wasn't as prevalent in people's homes and whatnot.
So it was really just starting to take off and that kind of brought me into college, where, you know, the exposure was a lot more prevalent at that point.
Actually I started off majoring in aerospace engineering, didn't really like it as much as I thought I would.</p>
<p>And it was completely random, it was towards the end of the second semester, and I knew I had to change my major, and I didn't know what.
And one of my roommate's friends was in there, and I was like, <q>So, what are you majoring in?</q>
And he was like, <q>Oh, computer science.</q>
And I was just like, <q>Well, how do you like it?</q>
And he was like, <q>It's cool.</q>
And so I changed my major to computer science, turns out I loved it. So yeah, I've been doing that ever since.
Wrote my first program at 19 years old, got my first job at Lockheed Martin here in D.C.
Did the contracting stuff for a little while, then I went to the start-up side of the house, <a href="http://everfi.com/">EverFi</a> here in D.C. and after I left there, came on here to <a href="https://isl.co/">ISL</a>, and been doing that ever since.</p>
<p>[02:21] szabgab:
Nice, so are you a programmer at ISL, or project manager, or Director, I think you wrote?</p>
<p>[02:28] jra:
Yes, as Technology Director, I'm both at this point.
There's still a significant part of my day, I do spend writing code.
It's more and more internal tooling, a lot of my efforts are geared towards making other developers, who are working on client projects, more productive.
So, and we'll talk about this in a second, but you know a <a href="https://github.com/istrategylabs">bunch of our open source stuff</a> that I contribute to, and also some of the infrastructure stuff.
But when I'm not doing that stuff, then it is more the technical project management, making sure that developers have everything they need in order to be productive.
Dealing with client requirements, working closely with our strategy team, which is sort of our version of project managers, to make sure that everyone involved, all the stakeholders, have a good understanding of the technical requirements and any challenges that we may face.
Things like that.</p>
<p>[03:24] szabgab:
So this ISL, I looked at the website, and it has all kinds of really nice pictures.
But really, different things, very different things.</p>
<p>[03:33] jra:
Yeah, right, right.
Yeah, so I mean, I guess the way we used to describe ourselves is an agency that sort of tries to bridge the gap between the physical and the digital world.<br />
So if you look through the website, you'll see things like, we call them experiments, or stunts, where we will basically take a concept that involves a physical aspect, like for instance the <a href="https://isl.co/case-studies/spongebob-skill-crane/">Nickelodeon SpongeBob project</a>, which basically involved a physical skill crane device that we built up, that was Internet connected, this was a couple of years ago.
And basically that tied into a game on Facebook which people can login to and play.
And it was a competition to see, I think it was who can burst the most bubbles or something crazy like that.
And then whoever would win a round of the game, would actually win control of the skill crane, and you would be able to control it via the web browser, using a virtual representation of the skill crane.
So kind of move it around, left and right, up and down, or whatnot.
But it would actually control the physical crane that was situated in a warehouse or something like that.
And then whatever you were able to pull out, I think you actually won that prize or something.</p>
<p>So that's like the sort of thing we're famous for, but other than those type of things, we do traditional web application development, websites, we do a lot of social AOR (social media agency of record) work and things like that, content production.</p>
<p>[05:05] szabgab:
So this project you mentioned, the Mo project?</p>
<p>[05:11] jra:
Yes, so Mo is essentially a family of projects, so working at an agency is a bit different than a product company, so we're fortunate in that we get to try things over and over and over again.
We launch a project and then it goes away.
So then we get to start over.
And then we immediately get to take all of the lessons learned from the previous project and immediately apply it to the next thing.
And so the Mo projects are basically the living manifestation of all those lessons that we've learned.
We're primarily a <a href="https://www.djangoproject.com/">Django</a> shop and so all the projects that we built in Django and whatnot have a lot of common aspects to them, as you would expect, with models and stuff like that.</p>
<p>So <a href="https://github.com/istrategylabs/mo-django">Mo-Django</a> has all of that starter-code in there.
But it's open source, anyone can clone the repo and start your own project, there's nothing, there's not much that's very specific to ISL.</p>
<p>There's very little code that would actually identify it as an ISL project, so the same goes for <a href="https://github.com/istrategylabs/mo-static">Mo-Static</a>, which is a project that helps you build static sites really quickly and supports all of the latest and greatest fancy stuff, you know, <a href="https://es6.io/">ES6</a> modules and all of the syntax associated with that.</p>
<p>I'm using <a href="http://browserify.org/">Browserify</a> for bundling, I'm thinking about switching that to <a href="https://webpack.github.io/">Webpack</a> at some point in the future.
And there's a flag on there to enable the use of <a href="https://vuejs.org/">Vue.js</a>, that's our official front-end framework that we utilize here.</p>
<p>And also, finally there's <a href="https://github.com/istrategylabs/mo-node">Mo-Node</a>, which we don't use as much these days, but from time to time we do utilize <a href="https://nodejs.org/">Node.js</a> as a platform as well.
And when we do, we'll go to Mo-Node to start those projects.</p>
<p>[07:06] szabgab:
So if I understand correctly, then Mo is a project starter?
So if you want a Django project, which in case someone does not know, Django is a development framework in Python, then you can either use the native tools of Django to start it, and then you would get some kind of a skeleton.</p>
<p>[07:29] jra:
Right, so this is all using a project, I don't know if you've ever heard of <a href="https://github.com/audreyr/cookiecutter">Cookiecutter</a>?
Very similar to <a href="http://yeoman.io/">Yeoman</a> but Cookiecutter basically allows you to templatize the creation of files and directories and stuff like that, so under the covers, it's using Cookiecutter to generate a Django-ready project for you.
So all of your initial files for models and the project name and domains, it's tied to <a href="https://www.heroku.com/">Heroku</a> as well.
Heroku configurations and stuff like that is instantly generated for you, and the idea is you can get started quickly.
I mean, from clone to running on port 8000, depending on your Internet connection, probably only takes about two to three minutes.
It's basically, like I said, it's the accumulations of all the solutions to problems we've faced in the past, particularly with getting started and having flexibility to do stuff.</p>
<p>[08:26] szabgab:
Okay, and the other two.
The one that is generating static, that doesn't generate any Django thing, right?
It's just the static?</p>
<p>[08:35] jra:
Right, yeah, it's just focused on static websites, essentially everything so the build step basically just pre-processes all your source files and then dumps it in your public directory.
And you can go in there and start a static webserver and then it will just serve all the files as-is.</p>
<p>[08:56] szabgab:
And then the third one, without Django, it would just create a Node.js-based one?</p>
<p>[09:03] jra:
Yeah, it's just a Node app.</p>
<p>[09:04] szabgab:
So, even with Django, but even with smaller frameworks, I have a feeling that you have a long learning curve?
So it might create a lot of really nice things, this skeleton, or whatever you call it, but then, I mean at least personally, I feel lost.
So where do you get started there?
How do you deal with that?</p>
<p>[09:33] jra:
Yeah, so, I think if you'd look at it you'd find that there isn't as much in there as you think.
So it's a skeleton as the starter, it's not about giving you a whole lot of stuff.
It's about giving you the right stuff to get started.
We've actually gone through several iterations, long before it was called the Mo projects, they were called the Scale projects, that's sort of the precursor, and it was closed source.
So what the Mo projects are, and the problems we faced with the Scale projects, was just as you said, there was a lot of stuff in there and it was really hard for someone to just walk into those projects and be able to know where everything was and what was going on.</p>
<p>The idea is, if you're already a Django developer, even a fairly new Django developer, you can generate a Mo-Django project and just know where everything is.
We don't deviate, really at all, from industry best practices.
That was a really big thing as well, we didn't want to have all this custom directory structure stuff going on, we really tried to keep in middle-of-the-road so that anyone, who has done any Django development in the past, can come onboard and get started.
And that was really important because of onboarding, typically our onboarding process would involve, when we did the Scale stuff, basically going through all of these Scale projects, and walking people through them, what was in there, and what wasn't, and how you configure them and all this other stuff, which just, essentially wasted a lot of people's time.
People who are JavaScript developers and do front-end should be able to come into Mo-Static and just get started.
People who are Django developers should be able to come into Mo-Django and just get started.
So that's kind of what we kept in mind.</p>
<p>[11:18] szabgab:
So how many people, do you think, are using these tools?
Do you have any information about that?</p>
<p>[11:25] jra:
Don't have a whole lot of information about that.
I did use Mo-Static, so from time to time, I do teach a JavaScript course for <a href="https://generalassemb.ly/">General Assembly</a> here in D.C. and for a bunch of the students in there, I was actively using Mo-Static as a tool for them.
So I know a bunch of people there were and still are using it.
But honestly we don't have any really hard numbers.
The projects are fairly new.
They've only been open for a few months now so you're still going to see a whole lot of activity, particularly around the Mo-Django stuff, as we mature these projects.
But they're, we use them for client-facing projects all the time.
And so, they're definitely production-ready, but I don't have any real hard numbers for you right now.</p>
<p>[12:08] szabgab:
Okay, and do you have contributors, outside contributors, not from ISL?</p>
<p>[12:15] jra:
I think there have been like just a handful of contributors, particularly around the Django stuff, not so much the Node stuff, we use that less and less, so it has the least bit of activity of all the projects.
But I think the Django stuff has the most contributors outside of ISL, but I think it's only actually a handful of people at this point, so shameless plug, looking for contributors.
So head to the <a href="https://github.com/istrategylabs">iStrategyLabs</a>, that's our old name, GitHub and just look at <a href="https://github.com/istrategylabs/mo-django">Mo-Django</a> and <a href="https://github.com/istrategylabs/mo-static">Mo-Static</a>, and you'll find the projects there.</p>
<p>[12:47] szabgab:
So...okay, now you're looking for people to help you, but why have you open sourced it, in the first place?
Is this the first open source project from ISL?</p>
<p>[12:59] jra:
No, it's not the first.
It's sort of the first suite of projects that we're actively pushing.
They're open because they can be open.
Like I said, this isn't a bunch of ISL secret sauce stuff in here, these are tools that allow us to be productive and do our jobs well.
And if we're finding good ways to create tools to allow ourselves to be productive, we want to make sure we give that back to the community as well, depending on, you know, regardless of how many people actually use them, we consume open source projects all the time.
And so we felt that it was right, that if we have anything that we can contribute back to the community, then we feel like we have a duty to do so.
So just the fact that they can be open source is reason enough for us to just open source them.</p>
<p>[13:58] szabgab:
Okay, so Django and then Vue.js, right?
That's...</p>
<p>[14:05] jra:
Yeah, so Vue.js is not ours, obviously.
It's a framework that is comparable to <a href="https://en.wikipedia.org/wiki/React_(JavaScript_library)">React</a>, which is a lot more popular.
So traditionally, we've been an <a href="https://angularjs.org/">AngularJS</a> shop, Angular 1.x, and as of a couple of months ago, we've officially made the switch from AnglularJS to Vue.js, as our go-to framework for our front-end development.
And there are a lot of reasons for that.</p>
<p>If you look on the <a href="https://isl.co/blog/">ISL blog</a>, I wrote a post about some of the reasons we switched over.
But essentially, anyone who's ever done any AngularJS development, I personally like the framework, but there's a lot there.
You know, it's an all or nothing sort of thing.
Once you bring in AngularJS, then it's an AngularJS application, no matter what, there's no getting around the framework.
And the more you fight it, the more difficult it becomes.
There are a lot of concepts and a lot of baggage and a lot of learning, a big learning curve that has to be overcome, in order to become really productive in AngularJS outside the context of just the basics.
All these things about services and factories and constants and then directives are themselves, you know, a bunch of concepts.
And so particularly when we talk about bringing on junior developers, and getting them up to speed, it was quite a lift.</p>
<p>Vue.js, on the other hand, focuses on just the view layer of building user-interfaces, which is what we really needed.
And there are very few concepts, and new concepts, to actually learn.
It's dealing mainly with components and state data in your application.
And that's really it, everything else is just an outcry from that.
The documentation is really stellar, so it makes it really easy for fairly inexperienced people to come up to speed on how to use the framework and also we have people on our team who, their previous job, were designers.
So they haven't been developers for very long, so a lot of those concepts aren't as firm with them as they may be with some of the more seasoned developers.
So the fact that they're able to come onboard, go to the documentation, take about 30 minutes, and walk away and say, <q>Hey, I think I have a really good handle on this stuff,</q> is really important for us as a company in terms of productivity.</p>
<p>[16:41] szabgab:
So do you...have you looked at Angular 2 since then?</p>
<p>[16:47] jra:
I've looked at it.
I haven't done anything with it.
It does seem interesting, so before we switched to Vue.js, we did some investigation.
This was back when Angular 2 was sort of still in active development.
So we looked at Angular 2 briefly, we looked at React as well, we actually did a project with React, to try it out.
We looked at <a href="http://emberjs.com/">Ember.js</a>, and a couple of other frameworks that escape my mind so far.
And there were pros and cons to everything.
Ember was really structured in how it approached web development, very opinionated, it's a framework like Angular 1.x, but it had a little bit more maturity to it.
And the fact that it was compatible with the <a href="http://jsonapi.org/">JSON API spec</a>, out of the box, was really, really great because that's a spec that we've adopted for all of our APIs.
So that was a big benefit there.
React was very, very, very close to Vue.js, in its view of the world, and its approach to components.
And even as we talk, there converging in terms of functionality and whatnot with their release of Vue.js 2.0.
And honestly, the only thing that kept us from moving towards React was <a href="https://jsx.github.io/">JSX</a> is sort of a hot topic in that world, and a couple people, including myself, weren't really crazy about having the mark-up that closely tied to the JavaScript.
I know there are advantages to it and people have written some really good arguments for it, but you know, it just didn't seem conducive of the type of software we were trying to build.
And so we ultimately decided to go with Vue.js, for that reason, and also the documentation is really, really great.
And coming from AngularJS 1.x where the documentation was...</p>
<p>[18:41] szabgab:
Yeah, we got disconnected.
Sorry, we got for a couple of seconds, disconnected.
So you said about AngularJS where the documentation is...?
Was good or bad?
That's where we got disconnected.</p>
<p>[18:59] jra:
Yeah, so I was just contrasting the Vue.js documentation with the Angular 1.x documentation.
And one of the reasons why I love the documentation with Vue.js so much is because it's so much better than Angular 1.x documentation.
I don't know, it's clearly generated from the code-base and whatnot, but that doesn't always translate well to communicating with humans, I guess.</p>
<p>[19:32] szabgab:
Great, I think we are just running out of time, so that's great, I mean, I personally learned quite a few things here and I'm really glad that you talked about them.
So let's wrap this up now, and there were a couple of other subjects that you mentioned that we might talk about later, and I definitely want to see, a couple of months from now, if you're still using Vue.js or if you've changed to something else.
And see the reason, because that kind of change is really interesting and see the reasoning behind that.
So do you have anything else that you wanted to mention maybe, and to have a shoutout to some people or projects?</p>
<p>[20:19] jra:
Yeah, so I'll just say, first of all, thanks for having me on.
As far as a shoutout, I'll should out ISL.
Go to <a href="https://isl.co/">ISL.co</a>, check us out.
We have some really cool work, we have a couple positions open, so check us out there.
Follow me on Twitter, <a href="https://twitter.com/recursivefunk">@recursivefunk</a>, that's funk with a k, not a c.
Yeah, that's it.</p>
<p>[20:42] szabgab:
So thank you very much for coming on the show and see you later!
Bye bye.</p>
<p>[20:47] jra:
Thank you, bye.</p>
<p>[/transcript]</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Dependency Injection in AngularJS - with and without introspection</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-10-05T20:30:01Z</updated>
    <pubDate>2016-10-05T20:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/dependency-injection-in-angularjs" />
    <id>https://code-maven.com/dependency-injection-in-angularjs</id>
    <content type="html"><![CDATA[<p><a href="https://en.wikipedia.org/wiki/Dependency_injection">Dependency Injection</a> has a nice and
complex explanation on Wikipedia and elsewhere. In AngularJS however it is somewhat different and I think
I need a simple explanation.</p>
<p>Normally you define a function that expects certain parameters and the responsibility of the
user of that function to pass in the correct parameters in the correct order.</p>
<p>The user will know what parameters and in what order to pass by reading the documentation of your code,
or if there is not enough documentation by reading the source code.</p>
<p>E.g. if you define a function</p>
<pre><code class="language-javascript">function store_user (name, password, email) {
}
</code></pre>
<p>Then the user will have to call the function passing values that will be assigned to the respective
variables:</p>
<pre><code class="language-javascript">store_user('Foo Bar', 'secret', 'foo@bar.com');
</code></pre>
<h2 class="title is-4">Tell Angular what are your parameters</h2>
<p>When you create a <code>controller</code>, a <code>service</code>, or some other part of the AngularJS
ecosystem, you need to declare an anonymous function that actually implements
that AngularJS element.</p>
<p>You can write something like this:</p>
<pre><code class="language-javascript">   angular.module('DemoApp', [])
   .controller('DemoController', ['$scope', '$log', function($scope, $log) {
       $scope.message = &quot;Hello World&quot;;
       $log.debug('logging hello');
   }]);
</code></pre>
<p>Here the <code>controller</code> method receives two parameters. The first is the name
of the controller ('DemoController'), the second is an array. In the array
the last element is the anonymous function while all the elements before are
the names of the objects Angular needs to pass to the function in the order it
needs to pass them. Inside the function declaration we have the same names in the
same order. Note however that outside the function declaration those are strings
holding the names while inside they are the real variable name.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/dependency_injection_full.html">examples/angular/dependency_injection_full.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js&quot;&gt;&lt;/script&gt;
 
  &lt;script&gt;
   angular.module('DemoApp', [])
   .controller('DemoController', ['$scope', '$log', function($scope, $log) {
       $scope.message = &quot;Hello World&quot;;
       $log.debug('logging hello');
   }]);
  
  &lt;/script&gt;
 
&lt;/head&gt;
&lt;body ng-app=&quot;DemoApp&quot; ng-controller=&quot;DemoController&quot;&gt;
 
&lt;h1&gt;Main Title&lt;/h1&gt;
 
&lt;/body&gt;
&lt;/html&gt;


</code></pre>
<p><a href="examples/angular/dependency_injection_full.html">view</a></p>
<p><a href="https://docs.angularjs.org/guide/scope">$scope</a> and
<a href="https://docs.angularjs.org/api/ng/service/$log">$log</a>
are two objects provided by AngularJS.</p>
<p>This is called <b>Dependency Injection</b>. That based on the values in the array
Angular will know what object to &quot;inject&quot; into the function.</p>
<h2 class="title is-4">Why the duplication?</h2>
<p>You might wonder why do we need that duplication of the names. Why do we need
both the string <code>'$scope'</code> and then the parameter <code>$scope</code>.</p>
<p>Actually we don't need that, but without that our code will break when we minify it.</p>
<h2 class="title is-4">Introspection</h2>
<p>There are many AngularJS examples where the above code looks like this:</p>
<pre><code class="language-javascript">   angular.module('DemoApp', [])
   .controller('DemoController', function($scope, $log) {
       $scope.message = &quot;Hello World&quot;;
       $log.debug('logging hello');
   });
</code></pre>
<p>The difference is that in this case the second parameter the <code>controller</code> function receives
is the function implementing it. There is no array wrapping it. The function has the parameters
it is expecting, but they are not listed earlier.</p>
<p>So the duplication of names is gone, but you might be wondering how does Angular know which objects
to pass to this function and in which order?</p>
<p>The explanation is in &quot;introspection&quot;. While the JavaScript code runs, it can look at its own source code,
inspect it and know what variable names a given function is expecting. Then it can call that function
passing in the correct objects in the expected order.</p>
<p>The problem with this approach is that if we minify our JavaScript code the parameter names of our script
will be also shortened and Angular won't know what objects to pass to the function call. The previous version,
the one with the duplication, solves this problem as the strings in the array declaring the values that
are expected won't change even during minification. That way Angular will know what objects to pass to
the function call.</p>
<h2 class="title is-4">Comments</h2>
<p>Simple, short, and great explanation. When i saw in tutorials both ways you mention i couldn't understand when to use one or the other, and now i do thanks to you.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #13: Trung Đinh Quang on GitHub Explorer - a progressive web app</title>
    <summary type="html"><![CDATA[About GitHub Explorer and build a web site that looks like a Windows 7 desktop.]]></summary>
    <updated>2016-10-03T22:01:01Z</updated>
    <pubDate>2016-10-03T22:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-13-trung-dinh-quang" />
    <id>https://code-maven.com/cmos-13-trung-dinh-quang</id>
    <content type="html"><![CDATA[<p>Interview with <a href="http://dinhquangtrung.net/">Trung Đinh Quang</a> from Vietnam
is talking about <a href="https://github-e.com/">GitHub Explorer</a> his showcase for progressive
web app and the <a href="http://dinhquangtrung.net/">Windows 7 clone</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/HzF_BZeo-cg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Trung Đinh Quang</h2>
<ul>
<li><a href="http://dinhquangtrung.net/">Trung Đinh Quang</a></li>
<li><a href="https://github.com/trungdq88">GitHub</a></li>
<li><a href="https://twitter.com/trungdq88">Twitter</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="https://en.wikipedia.org/wiki/Single-page_application">Single-page applications</a></p>
</li>
<li>
<p><a href="https://github.com/trungdq88/github-explorer">GitHub Explorer</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/Progressive_web_app">Progressive Web Apps</a></p>
</li>
<li>
<p><a href="https://github.com/trungdq88/dinhquangtrung.net">Website code on GitHub</a></p>
</li>
<li>
<p><a href="https://github.com/trungdq88/public-speaks">Public Talks - GitHub</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[trung guest1 Trung Đinh Quang]</p>
<p>[00:02] szabgab:
Hello there, this is the CMOS, the Code Maven Open Source podcast and video interview series, I'm your host, Gabor Szabo, and with me is <a href="http://dinhquangtrung.net/">Trung Đinh Quang</a>.
Hello there!</p>
<p>[00:15] trung:
Hi.</p>
<p>[00:17] szabgab:
Have I pronounced your name properly or could you...?</p>
<p>[00:20] trung:
Yeah, it's correct, Trung Đinh Quang, yeah.</p>
<p>[00:23] szabgab:
Okay, great.</p>
<p>[00:24] trung:
You can call me Trung for short.</p>
<p>[00:25] szabgab:
Okay, great, thank you.
So, it's really nice to meet you, I understand that you're in some kind of a coffee shop right now, or...?
Place where you work...?</p>
<p>[00:36] trung:
Yeah, I'm in a coffee shop.</p>
<p>[00:39] szabgab:
Okay, good.
Is that a place where you work at?</p>
<p>[00:45] trung:
This is actually my company because the company has the coffee shop for the employee to work, if they want to, or sit in the coffee shop if they want to, instead of in the office.
Yeah, so I kind of spend eight hours a day, in this place.
And the condition is quite good here, so it's no problem.</p>
<p>[01:04] szabgab:
Oh, so you prefer to sit there instead of in the office, right?</p>
<p>[01:08] trung:
Yeah, the company is quite open on the place to work, I can even work at home, but I think it's better to come to work at the coffee shop and meet people and have a better condition, yeah.</p>
<p>[01:23] szabgab:
Okay, so what kinds of things do you do, at this company?</p>
<p>[01:28] trung:
Let's see, at the company, I do web engineering, so a lot of stuff about development and web technologies, <a href="https://en.wikipedia.org/wiki/Single-page_application">single-page applications</a>, those things.
I also do lots of R&amp;D development, which is, I find new technologies, new stuff, to bring in, and then sharing the knowledge back to the company.
That's what I do in my company.</p>
<p>[01:57] szabgab:
Oh, that's interesting.
So do you give presentations or how do you do this sharing?</p>
<p>[02:03] trung:
We have internal sharing systems and the external as well.
So I will find new technologies to learn about and then we do a small session, in total a one hour session, and all the employees get in and share and stuff.
But the last session, I was talking about web artistry.
So the next thing will be, I don't know, maybe <a href="http://angularjs.blogspot.com/2016/09/angular2-final.html">Angular 2</a>, you know Anglular 2 just released yesterday, it's interesting.</p>
<p>[02:39] szabgab:
Okay, so you're talking about these subjects within the company, right?</p>
<p>[02:45] trung:
Yeah, new technology.</p>
<p>[02:47] szabgab:
How did you get into programming?
Or high tech or, I don't know how to define this, where you are?</p>
<p>[02:54] trung:
I got a lot of interest going in computers when I was very young.
I started working when I was 15, back then I was using <a href="https://en.wikipedia.org/wiki/Visual_Basic">Visual Basic</a> to write Window applications, so some fun projects.
And then I got into the <a href="https://en.wikipedia.org/wiki/.NET_Framework">.NET framework</a>, the Microsoft technologies and just three years ago, I started to work on web development heavily, with <a href="http://www.restivejs.com/">Restive</a> single-page web applications, and web technology with a lot of cool stuff on the Google technologies, and simple <a href="https://facebook.github.io/react/">React from Facebook</a> and <a href="https://angular.io/">Angular</a>, and a lot of framework and libraries in the web development.</p>
<p>[03:46] szabgab:
So you mostly do front-end development, right?
Do you also do back-end?</p>
<p>[03:50] trung:
Yeah, I used to, when I was still doing back-end, I used a <a href="https://en.wikipedia.org/wiki/Personal_software_process">PSP</a> developer, but mostly I am more interested in front-end development.</p>
<p>[04:02] szabgab:
Okay, I see.
So I saw, at least one project on <a href="https://github.com/trungdq88">your GitHub</a>, the <a href="https://github.com/trungdq88/github-explorer">GitHub Explorer</a>, that's how I found you, I think.</p>
<p>[04:15] trung:
Yeah, you found me with <a href="https://github.com/trungdq88/github-explorer">GitHub Explorer</a>?</p>
<p>[04:20] szabgab:
I don't remember.</p>
<p>[04:21] trung:
Okay.</p>
<p>[04:22] szabgab:
Maybe I was just browsing GitHub itself, and then I somehow bumped into your name and the project?
Interesting, tell me about it?</p>
<p>[04:33] trung:
The project was an experiment on the <a href="https://en.wikipedia.org/wiki/Progressive_web_app">progressive web app</a> technologies, have you ever heard about that?</p>
<p>[04:41] szabgab:
Well not really, I heard about progressive web app, but I don't really know what that means.</p>
<p>[04:47] trung:
Yeah, so the progressive web apps is a new kind of the way to build applications.
You don't have to build native application for every kind of applications.
So now, progressive web app is a way to build app, to have native experience in it, it performs very fast, it can send you push notifications, it can work offline, and a lot of cool stuff, you'll look at that later.
And <a href="https://github-e.com/">GitHub Explorer</a> is one of the experiments that I have built and that one is particularly took a lot of invention from the community, which is why you found it on GitHub, right?
So the main reason, the purpose of the project is, I want to demonstrate how a web application can perform as well as a native application.
So if you go to the <a href="https://github-e.com">GitHub-e.com</a>, on your mobile browser, and you start to touch anywhere, you can see the animation and the transition of the pages, as very, very well.
I have started it on my three-years old phone, which is a kind of low-budget phone, and I think that phone is not compatible to the native applications, so that's what's the purpose of the project.</p>
<p>[06:23] szabgab:
So that you say that it's mostly interesting to view using a phone?
Or some kind of a mobile device?
Not so much a desktop.</p>
<p>[06:33] trung:
Yeah, on this stuff, I haven't built a lay-out for that stuff yet, so if you go with a desktop, the layout will kind of look weird.
But yeah, you can try to simulate the phone on your browser, to see how it works, or you can use a phone, physical phone, as well.</p>
<p>[06:55] szabgab: Okay.</p>
<p>[06:56] trung:
The progressive web app now is working very well on Android and you can use some advanced features like, at your home screen, working offline.
You can open the app without connection.
So, that's a lot of conditions I have put in.</p>
<p>[07:17] szabgab:
I see, so is this still under development?
Or do you add more features?</p>
<p>[07:24] trung:
Right now, it's not actively developed any more, because I got interested in some other projects, and I think I finished the purpose of the project, which is I wanted to demonstate how the web app can animate very fast and perform very well on mobile devices.
So I think I have finished that.
And the next one, I want to build something else, to use more features in the progressive web app.
The GitHub however, they don't have features like push notification, so maybe I'm trying to build something else with the progressive web app.</p>
<p>[08:17] szabgab:
Do you have a specific idea, what you're going to build?</p>
<p>[08:22] trung:
Well, yes, several but I'm still choosing for, but one thing it has to demonstate all the stuff from the progressive web app and it has to be useful as well.
The GitHub Explorer, it can demonstrate something, but if you look at my app, you can see that it's not very useful, because the GitHub as well, they have their mobile layout for the mobile devices.
So yeah, it's kind of more a demonstration, and I want to build something more useful.
So it's going to take time for that.</p>
<p>[09:10] szabgab:
You might build something and then sell it to the company?
For whose web site you build it, right?</p>
<p>[09:22] trung:
You mean the new company, for the website, for the idea?</p>
<p>[09:25] szabgab:
Yeah, so if GitHub didn't have its own UI for mobile, then they would want to take yours, right?</p>
<p>[09:38] trung:
I think that would be the case, too, but right now they do have mobile layouts for mobile devices but it's not progressive.
It cannot work offline or cannot send main notification when I have a new pull-request, it's very simple.
So yeah, maybe I don't know, maybe they will contact me for, or some other guy, to make a progressive web app version of their mobile layout, I don't know.
But that could be the case.</p>
<p>[10:09] szabgab:
That would be interesting, I think so.
Okay, so I also saw your <a href="http://dinhquangtrung.net/">own website</a>, which was really surprising when I visited it, because it has Windows.
It basically looks like a Windows desktop was running in my browser.
So what's that about?</p>
<p>[10:33] trung:
Yeah, that was my very old project, from two or three years ago, when I got bored.
In the time, I was learning CSS and trying to emulate some fancy design from a famous designer.
And nothing, whenever I make a version of my Windows 7, that was the system I was using at the time, and I was trying to build that with pure CSS and JavaScript, and when I got the interface done, I thought maybe we could try to make that work, as well.
And then, if we can spend more time, we can build that into some kind of cloud-computing, cloud operating system, where everyone can log in and feel like they are using their own PC, on the web.
So that was kind of interesting, but I wasn't have enough time to do all of that, and with the technology, and I think I can't finish that at the time.</p>
<p>So it was stopped at the stage where I passed my interest in stuff on the website and it's become more like my portfolio website, where I put my small contributions, as you see.
If you take a look at the <a href="http://dinhquangtrung.net/game/cstrike/">Counter Strike Game</a> in there, in that Windows, because I tried to build the whole ecosystem for the apps, and yeah, it stopped right there.
Right now, I don't want to actively develop that any more.</p>
<p>[12:23] szabgab:
Okay, and is that open source?
Can we find it on GitHub?</p>
<p>[12:28] trung:
Yeah, it's a <a href="https://github.com/trungdq88/dinhquangtrung.net">project on my GitHub</a>, as well.</p>
<p>[12:32] szabgab:
Okay, that's great.</p>
<p>[12:34] trung:
I can send you a link later.
The problem with this project is I tried not to use any framework or library, everything was written in Vanilla JavaScript, which right now, I wouldn't say that it's a good idea.
Because if I'm going to build that right now, I'm going to use React or other single-page application framework, Angular 2 maybe, but yeah, that website wasn't using any other libraries or...I think that's one reason why it took me so long to finish and the source code is not very well-structured, as well, I was learning JavaScript with OOP from a book, and that's what I was experimenting with it.
It was kind of fun to work on and I was happy when people went into my website and see that and they are suprised, <q>What is this? Is this a real Windows?</q>
Because it's not, you know.</p>
<p>[13:48] szabgab:
Yeah, but it really looks real and...</p>
<p>[13:52] trung:
Yeah, I try my best to make it look very real.</p>
<p>[13:56] szabgab:
You might want to add this <a href="https://en.wikipedia.org/wiki/Blue_Screen_of_Death">Blue Screen of Death</a> once in awhile?</p>
<p>[14:04] trung:
Yeah, maybe.
Instead of throwing out exceptions, you show a Blue Screen, yeah.
Just an idea.</p>
<p>[14:14] szabgab:
Anyway, do you have other projects that you might want to talk about?</p>
<p>[14:20] trung:
Let me see.
Besides of writing code, I'm actively working on, sharing in the community, in Vietnam, I come from Vietnam, we have technology events like <a href="http://www.barcampsaigon.org/">Barcamp</a>, <a href="http://2017.vietnamtechconference.org/">TechCon</a> for our university, and <a href="https://www.freecodecamp.com/">Free Code Camp</a>, which is popular in the world, too.
And I got a lot of sharing in those events, which sharing knowledge about technology is, it's what I do in my company, so yeah, that's an interesting thing I want to do.</p>
<p>[15:06] szabgab:
Do you have a lot of these meet-ups or community things in Vietnam?</p>
<p>[15:14] trung:
I have just graduated one year ago, so I started to join in meet-ups and events from one year ago and from now, let me remember, I gave out about <a href="https://github.com/trungdq88/public-speaks">six or seven talks</a> about web technologies in the community, and doing open source.
That's not very much, but I'm keen to do it more in the future.</p>
<p>[15:49] szabgab:
Well, that's great.
As a closing question, I would want to.. Do you have any suggestions to people who want to get into open source or programming, especially people from Vietnam?</p>
<p>[16:07] trung:
I talk about that a lot at the events, where I got a lot of people who are at the medium level.
So one resource, I went a long ways trying to share with them, is <a href="https://www.freecodecamp.com/">Free Code Camp</a> website.
They have a well-designed, well-structured tutorial in open source, especially for front-end development and I think it's a good resource.
And for open source projects, GitHub is the way to go, and one thing people want to put their foot into the community, is to join the events and meet-ups and do open source a lot, so they can share and learn more about the web development as well.</p>
<p>[17:09] szabgab:
Okay, that was great.
Thank you for coming on the show and sharing with me and the audience, all this.</p>
<p>[17:20] trung:
Yeah, thank you for having me.</p>
<p>[17:22] szabgab:
Thank you and bye bye!</p>
<p>[17:25] trung:
See you, bye!</p>
<p>[/transcript]</p>
<!--
## Technical info

Recorded on 3 September 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>

-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Logging in JavaScript applications</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-10-02T07:30:01Z</updated>
    <pubDate>2016-10-02T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/logging-in-javascript" />
    <id>https://code-maven.com/logging-in-javascript</id>
    <content type="html"><![CDATA[<p>When writing a complex web application one of the important debugging tools is using the logging facility
the environment provides. This can help the developer see what's going in the application without interfering
with the real UI.</p>
<p>The standard way to print a message to the <a href="/open-javascript-console">JavaScript console of the web browser</a>
is using the <code>log</code> method of the <code>console</code> object. It accepts a list of strings and objects and prints them to the console.</p>
<p>Actually, the <code>console</code> object has several additional methods that can be used to fine-tune the logging.
There <code>debug</code>, <code>info</code>, <code>log</code>, <code>warn</code>, <code>error</code>.</p>
<p>In our sample JavaScript code we use all 5 of them:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging.js">examples/javascript/logging/logging.js</a></strong></p>
<pre><code class="language-js">function log_them() {
    console.debug(&quot;Calling console.debug&quot;);
    console.info(&quot;Calling console.info&quot;);
    console.log(&quot;Calling console.log&quot;);
    console.warn(&quot;Calling console.warn&quot;);
    console.error(&quot;Calling console.error&quot;);
}

log_them();

</code></pre>
<p>If you'd like to try the code, here is the HTML file that will load it including a link
to the explanation on <a href="/open-javascript-console">opening the JavaScript console</a>
in your favorite browser.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/javascript/logging/logging.html">examples/javascript/logging/logging.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;script src=&quot;logging.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;a href=&quot;http://code-maven.com/open-javascript-console&quot; target=&quot;_blank&quot;&gt;Open the JavaScript console&lt;/a&gt; in order to see the logging messages.
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/javascript/logging/logging.html">view</a></p>
<p>If you don't want to try it now, you can check out these screenshots of the output:</p>
<p>In Chrome the various methods have different color and accompanying icon:</p>
<img src="/img/javascript_logging_in_chrome.png" alt="console logging in Chrome" />
<p>In FireFox they are all the same color, but you still get a few icons:</p>
<img src="/img/javascript_logging_in_firefox.png" alt="console logging in FireFox" />
<p>In both case, the right-hand side of the log-line displays the line number in the original file which makes it
easier to understand which part of the code emitted the log message.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #12: Randal Schwartz the host of FLOSS Weekly</title>
    <summary type="html"><![CDATA[Randal Schwartz the host of FLOSS Weekly, the largest Open Source podcast and the most prolific author of Perl books.]]></summary>
    <updated>2016-09-28T22:01:01Z</updated>
    <pubDate>2016-09-28T22:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-12-randal-schwartz" />
    <id>https://code-maven.com/cmos-12-randal-schwartz</id>
    <content type="html"><![CDATA[<p>Interview with <a href="https://youtu.be/YU41eecLtNI">Randal Schwartz</a> the host of the <a href="https://twit.tv/shows/floss-weekly">FLOSS weekly netcast</a> and the most prolific author of Perl books.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/YU41eecLtNI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Randal L. Schwartz</h2>
<ul>
<li><a href="http://www.stonehenge.com/">Stonehenge consulting</a> the company of Randal</li>
<li><a href="https://github.com/RandalSchwartz">GitHub</a></li>
<li><a href="https://twitter.com/merlyn">Twitter: @merlyn</a></li>
<li><a href="https://plus.google.com/+RandalLSchwartz">Google+</a></li>
<li><a href="https://en.wikipedia.org/wiki/Randal_L._Schwartz">Randal L. Schwartz</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="https://twit.tv/shows/floss-weekly">Floss weekly</a></p>
</li>
<li>
<p><a href="http://www.leoville.com/">Leo Laporte</a></p>
</li>
<li>
<p><a href="https://www.docker.com/">Docker</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/ECMAScript">ECMA 5</a></p>
</li>
<li>
<p><a href="https://www.dartlang.org/">Dart</a></p>
</li>
<li>
<p><a href="https://www.lua.org/">Lua</a></p>
</li>
<li>
<p><a href="http://fisl.softwarelivre.org/">FISL</a></p>
</li>
<li>
<p><a href="http://www.insightcruises.com/">Insight Cruises</a></p>
</li>
<li>
<p><a href="http://www.insightcruises.com/standard_interface/about_neil.htm">Neil Bauman</a></p>
</li>
<li>
<p><a href="http://perl6.org/">Perl 6</a></p>
</li>
<li>
<p><a href="http://act.yapc.eu/">YAPC::EU</a></p>
</li>
<li>
<p><a href="https://www.redhat.com/">Red Hat</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[randal guest1 Randal Schwartz]</p>
<p>[00:01] szabgab:
Hello there, this is the CMOS, the Code Maven Open Source podcast and video interview series and this is your host, Gabor Szabo.
And with me is Randal Schwartz.
Hi Randal!</p>
<p>[00:12] randal:
Hey, hi, welcome to me!
Thank you, from across the pond here, I'm in lovely Lacey, Washington, just a little bit north of Olympia, in my brother's house.
You might see some album record covers, if you're watching the video, behind me.
I don't know how the lighting is going to work out, we'll give it a shot.
The sun's starting to come up so that might effect my lighting, but we'll give it a shot.</p>
<p>[00:36] szabgab:
Yeah, that's great.
Actually it's funny, that you are now the person who is being interviewed, not the usual setup that you're interviewing all kinds of people at <a href="https://twit.tv/shows/floss-weekly">FLOSS Weekly</a>.
So just a little bit, the standard questions, there are probably many people know you, but introduce yourself, please?
Let us know, how did you get into programming, and how did you get into open source?</p>
<p>[01:04] randal:
Wow, well those could be an hour already, by themselves.
But let me give you sort of the high-level view of those.
My Dad was very career-oriented, and so I picked programming at a fairly young age.
By the time I was nine, I was actually writing computer programming.
And we're talking almost 50 years ago, so this was basically reading computer manuals about the <a href="https://en.wikipedia.org/wiki/PDP-8">PDP-8</a> and the <a href="https://en.wikipedia.org/wiki/PDP-11">PDP-11</a>, back in the early days.
And writing programs just on paper.
I eventually got to code on an <a href="https://en.wikipedia.org/wiki/Teletype_Model_33">ASR 33</a> teletype, time-shared Basic, all upper-case, all very noisy.
And did that for five or six years, built an <a href="https://en.wikipedia.org/wiki/IMSAI_8080">IMSAI 8080</a> and then went out in the real world, programming that type of computer more often.</p>
<p>But by the time I was 16, I was gainfully employed, writing text actually, I was being trained as a technical writer, which made me double-useful, both as a writer and as a programmer.
And that led me to various other careers, as well as being a trainer and eventually owning a company, that sent trainers all over the world, during the Perl heyday.
And so that, I enjoyed programming, it seemed to work well, I seemed to be able to do abstract reasoning very well, and I've picked up over the years, probably, I think at one point I listed 45 languages on my resume.
A lot of those were &quot;can read&quot; and I could probably parse my way through a piece of code in a certain language.</p>
<p>Right now, I'm probably fluent only in about a half-dozen languages and, of course, the number one of those would be Perl.
Shell-scripting probably a close second, C being probably third.
Oh, and <a href="https://en.wikipedia.org/wiki/Smalltalk">Smalltalk</a>'s in there somewhere, probably Smalltalk is second or third as well.
I think that's sort of the beginning of an answer that you wanted, how did that work?</p>
<p>[03:02] szabgab:
Yeah, you're doing quite well.
It seems that you're not the first time on a podcast or a video interview, right?</p>
<p>[03:11] randal:
No, clearly not.
I mean, FLOSS Weekly has been running on for ten years now, and I've been doing a lot of those.
And prior to that, I was doing the <a href="http://insightcruises.com/top/ll4_top.htm">Geek Cruises News</a>, which were interviews with people that were on the cruises that I get to do frequently, including one coming up in a few weeks, and also actual sections of seminars on those cruises.
And so I was doing that even before I was doing FLOSS Weekly, sort of tutored by the king himself, <a href="http://www.leoville.com/">Leo Laporte</a>, actually helped me get started in podcasting, and I really appreciate his early guidance.
Then him inviting me to take over FLOSS Weekly was a real coup, because we're getting somewhere between 30,000 and 50,000 downloads a week on that thing.
And it's the number one open source podcast.</p>
<p>[04:02] szabgab:
Well, you know, I'm building an open source podcast, so we will see.
It will take a couple of years, I guess.</p>
<p>[04:09] randal:
Good challenge, then.</p>
<p>[04:10] szabgab:
Yeah, it's a challenge.
So, tell me your secrets, with the podcast?</p>
<p>[04:17] randal:
Well, one of the things is that I crowd-source everything.
As I kept looking at what I needed to do to produce a particular show, it was like well, I've got to have a guest, and when I got through the short-list of all my friends, that would be good guests, I started asking the audience, <q>What do you want to see?</q>
And then they would throw project names at me, and then I was like, <q>Okay, now I've got to go look up the contact name for that, and I've got to convince him that this little, dinky podcast, which wasn't very well-known in the early days, is something they want to do.</q>
And I got smarter about it after awhile, just being practical about it, I said, <q>Okay, I don't want to contact these people, I want the audience member to contact these people.</q>
So I started saying, <q>Here's how you get on the podcast, here's how you get somebody on the podcast. You contact them.</q>
The project leader, community coordinator, somebody that would be a good representative, and tell them how much you enjoy FLOSS Weekly, and have them contact me, my email address is on the website, <a href="mailto:merlyn@stonehenge.com">merlyn@stonehenge.com</a>.
And that's how 95% of our guests over the last nine years have been brought in.
By crowd-sourcing it that way, I only had to close the deal, I had to set up the public spreadsheet of all the upcoming open to-be-scheduled shows.
Also on that same spreadsheet, I list the people I'm already in process of talking to, so I don't get redundant attempts, so that works out really well.
That was kind of the secret of that, once I figured that out, that was really nice.</p>
<p>And now I just see that the sun is now hitting me in the face, really brightly!
Sorry, let me turn the gain down little bit here, I know this is still being recorded.
Anyway, so does that answer your question or do you need more on that?</p>
<p>[06:07] szabgab:
Yeah,  yeah, that's cool.
I'm sure that I'm going to have a lot of other questions but maybe it's going to be off this interview.</p>
<p>So, open source...?</p>
<p>So actually, the podcast and open source contribution, or things that you learn, how much do you feel that the podcast that you're doing, the interviews that you're doing, impact the stuff that you get interested in and start learning?</p>
<p>[06:41] randal:
Well, one of the things that I've discovered over the years, is that I'm genuinely curious about things.
And so, one of the things I'm very careful about, is not over-research a particular topic, when I go on.</p>
<p>I basically, well part of that's practical, I've got maybe an hour I can devote to going over whatever URLs they gave me.
But part of it is also being a proper proxy for my audience.
If I know too much, I might not ask a question.
Whereas, if I just remain genuinely curious about how this fits in here and how that fits in there, and is there anything else like this, that sort of thing, then I'm acting as a proxy for the audience, who are probably having the same questions that I have.
I'm a little bit of a generalist, so it's kind of nice to be able to look at all things, and try to figure out what's going on.</p>
<p>The other thing I've been observing is, in the early days, I was always curious about, <q>How do you make money? If you give away your stuff for free?</q>
And over the years, we've seen probably a dozen different models of how people have done this.
All the way from, <q>Well, it's just a labor of love, so we really don't care about making money</q> all the way up to, <q>Well we set it on top an entire business, around the idea that we could give away our core product, and leverage the resources of the community, to help us figure out directions to go, to actually get programming resources, people adding features that are appropriate to them, maybe even things like internationalization, which is always a tough issue, if you don't hire 50 different people to translate your stuff for you, but maybe somebody in Brazil wants to tranlate it into Brazilian Portuguese for you.</q></p>
<p>That sort of thing, it's been really remarkable, seeing people at both ends of the spectrum.
We've also seen people sort of in the middle, where they say, <q>Well, we'll open source our core product but we'll keep some of it held back and ...</q></p>
<p>Eventually even some of those go to open source from top to bottom, so we're really happy with that.
We also encourage people who are sort of in the middle there, to create some sort of governance board, that's outside of them, so that the project really does have an independence, and it can be more trustworthy that it will remain even if the company decides, <q>Oh, we're not going to do that any more. We're going to do something in Fortran or something.</q></p>
<p>[09:07] szabgab:
So, what are the, I guess you see all kinds of trends, based on your interviews or, can you pick something out from there and point out what kinds of trends you might see?</p>
<p>[09:24] randal:
Yeah, I think a few years ago, it was all about cloud stuff.
So it was all about running your application in cloud.
Starting probably a couple years ago, with the <a href="https://www.docker.com/">Docker</a> revolution, it's all about containers now.</p>
<p>But we're also seeing a revolution in smart, JavaScript-based ultimately, front-ends, that are doing things like <a href="https://en.wikipedia.org/wiki/Single-page_application">single-page applications</a> and stuff, and I'm really pretty excited about that.
Not that I ever really wanted to spend a lot of time playing with JavaScript, but unfortunately I guess that that's a requirement, so I'm continuing to hone my JavaScript skills.</p>
<p>I'm also honing my <a href="https://www.dartlang.org/">Dart</a> skills, because that language out of Google, is really gaining some traction, in terms of being able to do server-side stuff, essentially replacing <a href="https://nodejs.org/en/">Node.JS</a> with a reasonable language.
And also client-side stuff for all the modern browsers, and it translating down into JavaScript, so as long as there's a reasonable <a href="https://en.wikipedia.org/wiki/ECMAScript">ECMA 5</a> or something available in the browser, Dart works really nicely.
But Dart looks closer, as a language, to something like Java, with optional typing, so if you add types to variables, you can actually get hints from your development environment and that's pretty slick.
So I'm learning Dart in the background, I actually have a couple applications for it already, that as I learn more, I'll be able to deploy.
I'm also learning things like <a href="https://angularjs.org/">Angular</a>, so I can have reactive front-ends, and again, it's like there's not enough hours in the day for me to learn everything I want to learn.</p>
<p>I'm keeping up with Perl, but not really, I still see a feature, like in Perl 5.16, and I go, <q>Oh, that's in relatively modern Perl, no wonder I don't know about it.</q>
I think of Perl as whatever was back in 5.10 and 5.12, that's the latest that I was writing my books for, my trainings for.
So the stuff that's coming out in 5.18 and 5.20 and 5.22 now, is sort of beyond me, I just can't keep up with Perl-delta, and that's a scary thing for the number one prolific author about Perl, to not be able to keep up with what's happening in the Perl community, this is clearly an indication that Perl is alive and well, and I've kind of missed the boat, now.</p>
<p>[11:52] szabgab:
Yeah, well, I guess there are not that many trainings anyway, these days, so maybe that's not such a big issue now.
But there's another, I'm wondering about another trend, of countries?
Of the country of origin or the country of location of the current location of the people who are writing open source code?
Have you seen any changes, any major changes?
I understand that you travel quite a lot, so I don't know if it's during your, so whatever you see?
That's the question.</p>
<p>[12:28] randal:
Yeah, that's a great question.
I think that we're seeing probably about, well there's a bias in that it's an English-language podcast, although English is sort of the lingua franca of technology for most of the world.
So we tend to get a bias on who's nominating people.
But I think probably, if I think about it for a second, I think probably maybe one-fifth or so of the podcasts are interviews with people who are not in the U.S. and the project was originated internationally.
I'm thinking things like <a href="https://www.lua.org/">Lua</a>, and there was something recently, some sort of a web framework.
So that's starting to happen there.
A lot of them probably stay regional, and still the U.S. and English-speaking countries are pounding out most of the code that I'm able to read.
I do see a bit of a trend towards people solving their own problems, that happen to be problems that other people in other countries also have, so why not share it across borders?</p>
<p>[13:40] szabgab:
I understand that you travel quite a lot.
I think that I saw that you had a competition between your age and the number of countries you visited?</p>
<p>[13:50] randal:
Oh, yeah, yeah.
That was really amazing!</p>
<p>Back about early last year, I finally had visited 54 countries and I was 53 at the time, so that was the first time that I'd been in more countries, no excuse me, the second time I'd been in more countries than my age.
The first time, was when I was a baby and not quite one, I was in one country, the U.S.
So we finally went full-circle, so now at this point I've been to 57 countries, so I'm set for another couple years, but it's now going to be my goal, throughout the rest of my life to have been in more countries than my current age in years.</p>
<p>So I think it's a valid challenge, and it's not too difficult, there's a lot of, well, for one thing, I've never been to the Far East.
In all my travels, I've never been to Japan, I've never been to China, I've never been to any part of Indonesia.
I have been to Asia, technically, because I've been to the western end of Asia, I've been to, half of Turkey is in Asia, and I've also been up to the Black Sea, so the area up in there, so yes, I have been to Asia for those points, but I have not been to the Far East.
So that gives me at least half a dozen easy countries to add, once I get to 57, so we'll look forward to that.</p>
<p>[15:10] szabgab:
So when you travel, what do you do?
Do you meet open source people?
Do you talk to programmers?
Or is it only for hiking or sightseeing?</p>
<p>[15:25] randal:
No, no, sadly I've maneuvered my work environment to always be fun.
So yes, I can technically say that pretty much, I travel for work.</p>
<p>There's two purposes, two major ways that I end up in a different country.
One is every year, except this year, I've been going down to Porto Alegre, Brazil, to speak at their open source conference, called <a href="http://fisl.softwarelivre.org/">FISL</a>, and there they have about 4,000 attendees, and again, thanks to the fact that English is sort of the lingua franca, I'm able to speak to most of them, except I can't understand what they're saying to each other, when they're not actually talking to me.</p>
<p>I do know sort of a basic knowledge of Spanish, and a lot of the Portuguese words and the Spanish words are overlapping, so to that degree I can pick up what they're talking about, and maybe read some signs.
But I've also been to Mexico, I've, about ten years ago, I was invited by the government to go to Venezuela, so I spoke there at an open source conference.
I've been to Australia a few times for open source conferences, so that's sort of the open source side of things.</p>
<p>But my primary access for countries around the world has been my oldest client now, 15-16 years, <a href="http://www.insightcruises.com/">Insight Cruises</a>, where my buddy <a href="http://www.insightcruises.com/standard_interface/about_neil.htm">Neil Bauman</a> puts on a conference onboard the cruise ship, and I get to go along, either to speak, in the early days, when it was about open source a lot, or to assist, or now I just go along to go to these various places all over the world and see the program that they're presenting, either from their partners, in the early days MacWorld Magazine, so I learned more about the Mac and Apple and iPhones.</p>
<p>And later now, we've partnered with <a href="http://www.scientificamerican.com/store/archive/?magazineFilterID=Scientific%20American%20Magazine">Scientific American Magazine</a> and <a href="http://www.skyandtelescope.com/">Sky and Telescope</a> for interesting observations made from cruise ships.
So yeah, that's been the primary source of being able to check off countries, that's been a lot of fun.</p>
<p>[17:53] szabgab:
Yeah, so as a closing question, I would like to go back a little bit to the languages and the things you do with open source, and ask you, where are you heading?
Are you going to go back to Perl and learn what the new things in Perl are, or are you more interested in other languages, and which ones?</p>
<p>[18:16] randal:
Well, I download and compile <a href="http://perl6.org/">Perl 6</a> every day.
And every time I go to <a href="http://www.yapc.org/">YAPC</a> or some other place where they're talking about Perl 6, I get excited about it, for all of a month, and then I come back and then I go, <q>How am I going to use this practically? None of my current clients are demanding that.</q></p>
<p>Clearly if I were to write training materials for that, I'd have to present it at least to 200 people, whether that's 10 classes of 20, or a giant 200 person week-end event, that's sort of the minimum for amortizing the inception cost for any class that I've ever written.
So I use the 200 number as kind of a rule of thumb.</p>
<p>And I just don't see that happening, I don't see getting enough people together in the right places, to be able to do that.
So I continue to watch what people are doing with Perl 6, I continue compiling it every day, and I'd love for it to become extremely popular so I could go back to that, and say I could continue my Perl heritage.</p>
<p>But, as I mentioned earlier, I think Dart has legs.
Given that Google's behind it, given that Google and a number of other companies are already deploying public-facing projects in it.
Given that it does compile down and work in all modern browsers, I easily see the need for like <q>rent a hotel room for a weekend</q> and have 20, 50, 100 people show up to learn about it, because single-page applications are all the rage right now, and Dart is a really solid language for that, and Google is betting on that.</p>
<p>You may say, <q>Where is Go in that equation?</q>
Go is great for server-side stuff, and great for the kind of things they're doing on back-ends, and although Dart can also do back-end stuff, essentially replacing Node.JS for that sort of thing, and have a single language for both back-end and front-end.
Dart's real win is in the front-end, being able to be transpiled over to JavaScript and being able to scale to hundreds of thousands of lines of code for some of their larger applications.
I think that's got legs, I'm in on the groundfloor, like I was on Perl, I'm already recognized among the Dart people as being someone who can put things together.
I did a one-hour long intro to Dart talk that was reviewed by some of the key people in the Dart community, and they really like what I did with it, so I seem to have, again, that knack for finding something complex and finding the simplest ends of it, and I'm already there with Dart.</p>
<p>And also, the whole <a href="https://en.wikipedia.org/wiki/Google_Fuchsia">Fuchsia</a> announcement a few weeks ago, where Google's coming out with this language for real-time operating systems, and it has a strong Dart component in it.
I think that's another thing that says, say if they start putting that in <a href="https://en.wikipedia.org/wiki/Google_Glass">Google Glass</a>, or if they even put that as a replacement for the Android operating system, or for Google Chrome, which some people are suspecting that this is all amalgamation of it.</p>
<p>Especially when somebody's looking at the source code the other day, and it has a lot of files, not only from Android, but also from the old <a href="https://en.wikipedia.org/wiki/BeOS">Be OS</a>, which was sort of the predecessor of what eventually became OS X, kind of interesting that that's part of that project as well.</p>
<p>So with Fuchsia on the horizon, with Dart already being deployed by numbers of people, with me having a knack for understanding how Dart actually works, given that it was also built by some of the key players in Smalltalk, which I go back 16 years with, I think this is probably the right place for me to look at my future.</p>
<p>[22:02] szabgab:
And I guess, FLOSS Weekly?</p>
<p>[22:05] randal:<br />
FLOSS Weekly will continue.</p>
<p>In fact I just had a converstaion recently with Leo, we're one of the smaller shows on the network, but he's absolutely committed to this show.
He likes what I'm doing with it, he likes the directions I'm taking it, he likes the team I've put together, who were able to pick up the show, even when I was absent for six weeks, in the hospital recently, without notice unfortunately, I guess that's always the way you end up in the hospital.</p>
<p>So my team picked up, and Aaron Newcomb did a great job of hosting while I was gone, but Leo likes the team I've built and Leo likes the kinds of guests I'm getting on, the variety especially.
I've had a lot of people write in and say, <q>I don't always want or understand the thing you're talking about, but I listen to the way you interview them, and I listen to the things you're able to pull out, like what's the governance model, how are you making money with this, what got you started?</q>
These sorts of things are really sort of cross-project.
You know, you can learn that sort of stuff about anything you want to start, and like I said, I learned a lot already by doing this show and so a lot of the audience is picking that up.
And we have a fun time.</p>
<p>I tell jokes sometimes and I have a bad way of making really bad puns.
And that's kind of the way it works but I really enjoy the show, I'm going to keep doing it.
And I told Leo I would just keep doing this as long as he let's me, and he goes, <q>Well then, that makes two of us. So we'll still be doing this in 20 years, if they let us.</q>
And I said, <q>That sounds like a great promise, Leo, thank you.</q>
So yeah, I'll be doing FLOSS Weekly for at least awhile longer.</p>
<p>[23:45] szabgab:
I'm happy to hear that and I hope to see a lot more of that.
And I hope to see you somewhere, I don't know, maybe at a Dart conference?</p>
<p>[23:56] randal:
Yeah, that'd be awesome!</p>
<p>And I think you come to <a href="http://conferences.oreilly.com/oscon">OSCon</a>, occasionally, or maybe, well I've got to get out to a <a href="http://act.yapc.eu/">YAPC::Europe</a> or a YAPC::Israel or something at some point, but just haven't made those yet.
I think it's partially because I need to figure out what to pitch to the Perl conference.</p>
<p>Oh wait, I could just be press again!
That's the other thing, is that FLOSS Weekly has allowed me to apply as press for OSCon for the last few years, even though I don't have an actual talk to give.
And <a href="https://www.redhat.com/">Red Hat</a> actually invited me to their conference, as press.
And I thought, <q>Well, that's the first time that's happened. That really says I've made it. That really says that FLOSS Weekly is recognized as legitimate press.</q>
So I'm wearing a whole 'nother hat, so my hat tree of all my hats, hanging up in the corner, has gotten a whole 'nother rung.</p>
<p>[24:52] szabgab:
Thank you very much.</p>
<p>[24:54] randal:
Thank you, thank you for inviting me on the show.
I look forward to seeing this when it gets published.</p>
<p>[24:59] szabgab:
Bye bye.</p>
<p>[24:59] randal:
Bye.</p>
<p>[/transcript]</p>
<!--

## Technical info

Recorded on 3 September 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>

-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #11: Mohammad S. Anwar - Contributing to CPAN every single day</title>
    <summary type="html"><![CDATA[The leader of the daily CPAN contribution quest by far on inspiration and enjoying the contribution.]]></summary>
    <updated>2016-09-26T08:01:01Z</updated>
    <pubDate>2016-09-26T08:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-11-mohammad-s-anwar" />
    <id>https://code-maven.com/cmos-11-mohammad-s-anwar</id>
    <content type="html"><![CDATA[<p>Interview with <a href="http://www.manwar.org/">Mohammad Anwar</a> on his contribution
to CPAN. Mohammad has released a Perl module to CPAN every single day in the last 699 day
and he still going strong.</p>
<p>Hear him talk about the inspiration.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/hS0LRP3uwW4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Mohammad Anwar</h2>
<ul>
<li><a href="http://www.manwar.org/">Mohammad Anwar</a></li>
<li><a href="https://github.com/Manwar">GitHub</a></li>
<li><a href="http://www.cpan.org/authors/id/M/MA/MANWAR/">CPAN</a></li>
<li><a href="https://twitter.com/cpan_author">Twitter: @cpan_author</a></li>
<li><a href="https://uk.linkedin.com/in/mohammadanwar">LinkedIn</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="https://www.perl.org/">Perl</a></p>
</li>
<li>
<p><a href="http://neilb.org/">Neil Bowers</a></p>
</li>
<li>
<p><a href="http://www.cpan.org/">CPAN</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Map::Tube::London">Map::Tube::London</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Games::Domino">Games::Domino</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Calendar::Bahai">Calendar::Bahai</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Calendar::Hijri">Calendar::Hijri</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[manwar guest1 Mohammad S. Anwar]</p>
<p>[00:02] szabgab:
Hi there, this is the CMOS, the Code Maven Open Source podcast and video interview series and this is your host, Gabor Szabo, and with me is <a href="http://www.manwar.org">Mohammad Anwar</a>.
Hi Mohammad!</p>
<p>[00:16] manwar:
Hi Gabor, how are you?</p>
<p>[00:17] szabgab:
Fine, really fine, how are you?</p>
<p>[00:19] manwar:
I'm not too bad, thank you very much for giving me this opportunity.</p>
<p>[00:23] szabgab:
It's great to have you.
I passed quite a few Perl modules to you, you took over maintenance of them, so I'm very happy because I didn't really have a lot of time to maintain those.</p>
<p>[00:40] manwar:
It was my pleasure to be part of this big Perl community.</p>
<p>[00:46] szabgab:
That's great.
Let's talk a little bit about your background, your story, how did you get into programming and Perl?</p>
<p>[00:58] manwar:
Yeah, my background is actually, I'm a science graduate with honors in mathematics, so I wasn't into computer science or anything like that, it was pure science, mathematics with honors.
I did my graduation in India and then I started playing with <a href="https://en.wikipedia.org/wiki/COBOL">COBOL</a> language.</p>
<p>[01:22] szabgab:
COBOL?</p>
<p>[01:24] manwar:
COBOL,  yes, I started with the COBOL and then moved on to <a href="https://en.wikipedia.org/wiki/Pascal_(programming_language)">Pascal</a>, played with Pascal for a couple of months, and then I got attracted toward the <a href="https://en.wikipedia.org/wiki/Visual_Basic">Visual Basic</a> method, Visual Basic programming with an Oracle database, started with this.
Then after a couple of years, I moved to Mumbai, where I got the first possibility to work with <a href="https://www.perl.org/">Perl</a>, this was in 98, 99.
So those days, <a href="https://en.wikipedia.org/wiki/Common_Gateway_Interface">CGI</a> was in demand, but everybody was using CGI for all the web thing, so yeah, that was my first introduction with Perl.
And since then, I've been using Perl, so that's how I started with Perl.
Then I got an offer in London, as a consultant, and I moved from Mumbai to London, and since then I've been here, working for various companies in London, in and around.
That's how I built the career.</p>
<p>[02:30] szabgab:
So how is this move from India to London?</p>
<p>[02:35] manwar:
Honestly speaking, Gabor, it was a big cultural shock and the working culture is so different from India.
In India, usually people work six days a week, and you start 9:00 in the morning and there's no closing time there, sometimes you work until late, sometimes midnight.
So when I moved here, it was more organized, I found it and it was a big cultural...first thing I noticed was you only work five days a week here in London!
So you get more off than in India.
Also there's no, or you don't need to work more than eight hours a day, so, unless you really wanted yourself, otherwise no one is going to force you, <q>Mohammad, can you stay until 8:00 or 9:00?</q>
Nobody going to tell you.
So you come in at 9:00, leave at 5:30, nobody asks any questions. So, yeah.</p>
<p>And also, for me, English was not my first language, so coming to London was another language barrier for me.<br />
I had to start from scratch, so to be able to communicate and to be able to understand, what is asked to do.
I had to understand the language, I had to understand the accent, English accent, is completely new to me.
And luckily I had a very good people, who I worked under, they were very friendly, very cooperative, and very communicative, so yeah, I was very lucky.</p>
<p>[04:19] szabgab:
Yeah, I can't say anything about accents, having myself, I guess a really strong one.
But you definitely don't have the regular Indian accent in English, probably because, I don't know...</p>
<p>[04:35] manwar:
I've been here for 16 years, nearly, so probably I must have picked up it all here, without realizing it.</p>
<p>[04:43] szabgab:
Right, okay, so you enjoy being there?</p>
<p>[04:47] manwar:
I do, honestly speaking, yes, I've had the opportunity to work with very big name, so yeah, very happy, so far.</p>
<p>[04:57] szabgab:
Great, so how did you get to start to contribute to open source?</p>
<p>[05:05] manwar:
I remember, in the past, I joined a company called the SpinVox.
It was a start-up company and their I met <a href="http://neilb.org/">Neil Bowers</a>, you know, Dr. Neil Bowers, and I didn't know him before.
So when I joined him, I found out about him, that he's a very big name in the Perl community and I had the possibility to work under him.
I learned a lot from Neil, and I started working, I tried to copy everything that he used to do.
For example, writing blogs, or writing modules, or contributing to <a href="http://www.cpan.org/">CPAN</a>, or writing helpful things.
That's where I started, so I wanted to do what he does, on a daily basis.
But I never got the opportunity, everytime I say, <q>Okay, let's do something and let's add something to CPAN.</q>
I had absolutely no clue what to do.
I mean, anything that comes to my mind, I see someone's already done it.
I don't know where to start and I keep thinking about it.</p>
<p>And one day I was just looking at the London Tube map, and I think I remember that day, there was some strike, some Tube strike, and I said, <q>Oh my God, how am I going to go back home?</q>
So I started looking around the map, and I said, <q>Let me find the shortest route, or try to avoid the route that's not working, or there's some trouble in that route.</q>
And that's where I started, I said, <q>Okay, I'm going to write a Perl program, just write a script to see if I can find the shortest route, avoid a particular line, or do something.</q>
So that's how I started, it came to my mind, I said, <q>Okay, I don't think anybody has done this!</q>
But there were already a few algorithms and I thought I'd use one of those sesarching algorithms and try to find the shortest route, using those algorithms.
Not having the computer science background, I had to try a little bit harder to understand all those algorithms, search algorithms.
So I started looking around the Google, to see if I can find any paper where it explained to a non-computer science background, how it actually works.
I came across one, a case-study by some Australian university student and he explained, in very simple language, so I could understand.
And from there I got the idea how it actually works, and I started using, implemented it and tried to solve my shortest route problem through London Tube map and that was my first contribution.
So I started with it and <a href="http://www.cpan.org/authors/id/M/MA/MANWAR/">pushed it to CPAN</a>.
I got a couple of positive feedback from different people, and they came up with a few additions, and that's how I started.
And a few people also came along and joined me and started working together.
So that was my first thing.</p>
<p>[08:28] szabgab:
So is this the module called <a href="https://metacpan.org/pod/Map::Tube::London">Map::Tube</a>?</p>
<p>[08:30] manwar:
Yeah, that's called Map::Tube.</p>
<p>[08:32] szabgab:
And do you know if it's in...so do you use it now, these days?</p>
<p>[08:35] manwar:
I do use it, yeah, I'm thinking of creating a <a href="https://en.wikipedia.org/wiki/Representational_state_transfer">REST</a> API for it, and put it on my website, so I can use it online from then on.</p>
<p>[08:47] szabgab:
Do you know if other people use it?</p>
<p>[08:49] manwar:
I know a couple of guys who use it, and they have developed their own Map for their different cities and all over the world, so I got a few, I think four or five cities, myself.
There is another guy, who's got about ten or fifteen different cities, he created a Map, using my framework.
And there's a guy from Germany, he created a few.
There are three or four guys, who made different mapping for different cities, using my framework.</p>
<p>[09:30] szabgab:
So when was this, when did you create this?</p>
<p>[09:34] manwar:
I think five or six years ago.</p>
<p>[09:38] szabgab:
Yeah, so back then I don't know how Google Maps worked and how these other various, I guess really there weren't really any of these GPS mapping softwares on the mobile phones, we hardly had any smartphones back then.
So how, I think you can do something similar with Google Maps today, right?</p>
<p>[10:08] manwar:
Yeah, you could do that.
It's not real-time mapping, as I understand, it just gives you the shortest route, it doesn't give you the real-time, if there is any station that is closed in real-time, it doesn't tell you if it's closed or not.
But it can be implemented, there are various sources where you can get those real-time data, and it can be implemented, so you can get the real-time and change the route, depending whether or not any station is closed on your route, shortest route, or give you another route where everything is clear.</p>
<p>[10:50] szabgab:
Sounds like you're doing nice and you could build a service around it.
Either an API or with an interface.</p>
<p>[11:01] manwar:
I'm thinking of converting it to REST API, so other people can use it.
So that's very close to me, that one.</p>
<p>[11:15] szabgab:
That's great.
So what other modules, you mentioned various calendar and games modules?</p>
<p>[11:24] manwar:
Yeah, there's one more, I would like to share this with you.
I remember five or six years ago, I was looking for a new opportunity in London, so I applied for a Perl developer position in one of the big Perl houses in London, and so their selection procedure was, they would send you a Perl task, so you had to produce the task in maybe two hours time and you had to send them back the code.
So they sent me a Perl task, saying, <q>Okay, write a program to play a game of Domino.</q>
So for me, that was the first time I had ever heard of the game of Domino.
So for me, before even I can think of designing this module, I had to understand how the game works, how you play the game.
As I said, I had to start from scratch and I couldn't finish it in time.
So whatever I did, I sent it as it is, to them.
And as I expected, I didn't hear from them, so probably they didn't like it.
Once I got a feeling that my answer was not accepted, I said, <q>Okay, I'm going to spend more time now because now I've got a pleasure to go back to the design board, I understand how you play the game of Domino, now I went back and re-did everything from scratch.</q>
I said, <q>I'm going to share it to my Perl community on CPAN, so other people can have a look,</q> that's how I started.
So I pushed it to CPAN and said, <q>Here's my game of <a href="https://metacpan.org/pod/Games::Domino">Domino</a>.</q>
So I'll remember, even when I get old, that was the first game I did using Perl.</p>
<p>[13:34] szabgab:
That's interesting.
So basically, what you're saying is, when you have to do something because of the job, it's not less fun.
But when you do it for yourself...?</p>
<p>[13:45] manwar:
Yeah, yeah, so it was fun.
Then I did a few other games as well as doing this, also just for fun.</p>
<p>[14:00] szabgab:
And in the Calendar namespace?</p>
<p>[14:03] manwar:
Yeah, Calendar one was something, I remember, I came across a JavaScript code, I was looking at it, someone used JavaScript to deal with various types of calendars.
And this guy just put in online as open, so anybody can use it and do whatever they want to do with the JavaScript code.
And I look around the calendar thing that's available on the CPAN and I said, <q>Okay, I want to use this JavaScript thing and convert it into Perl.</q>
But then I said, <q>I need to do something different that's not there on the CPAN already.</q>
Then I said, <q>Okay, I'm going to do something like on a console, I'm going to display a colorful calendar, where you can have a colorful text and dates announcing, nice and fancy, color-coded calendar.</q>
So I used the JavaScript code, converted it into Perl, and then started with varous different calendars.
For example, <a href="https://metacpan.org/pod/Calendar::Bahai">Bahai calendar</a>, or <a href="https://metacpan.org/pod/Calendar::Hijri">Islamic calendar, Hijri calendar</a>, or different type of calendar, using this JavaScript code, and I converted it to a color-coder so you get a nice colorful calendar on your terminal.
So that's how I started that Calendar thing.</p>
<p>[15:30] szabgab:
So these are terminal-based calendars, right?</p>
<p>[15:32] manwar:
Terminal-based, yeah, so there's an app as well, so it just say <b>calendr</b>, with a missing a at the end, so it's a command-line tool, you just say calendr.</p>
<p>[15:55] szabgab:
Okay, so this is the calendar, this is the game that you mentioned, the Domino, is that also command-line?
So you can play it command-line?</p>
<p>[16:06] manwar:
Yeah, it's a command-line.
When you install this module, it comes with a script to install in your bin part, so you just play the game.
I think it plays as domino or something like that, that's how it installs, so you can play on the command-line.</p>
<p>[16:24] szabgab:
So what I noticed was, besides doing these command-line things, you also, I looked at your website and it has quite a few interesting things there, like a dashboard for your CPAN modules, I think, can you tell me a little bit about that?</p>
<p>[16:41] manwar:
Yeah, I'm glad you asked me this question.
Because as I said, I try to follow Neil Bowers as closely as possible, so when I came across his personal website, which is <a href="http://neilb.org/">neilb.org</a>, so first thing I did was, <q>Okay, I'm going to reserve my own webname,</q> so I came over to <a href="http://www.manwar.org">manwar.org</a>, just to follow him, the way he did neilb.org, so I said mine was going to be manwar.org.
So I decided first thing, was my domain.
And then I thought, <q>What am I going to do?</q>
So let's see what Neil Bower is doing.
On his website, one of the sections is where he mentioned his various stats, like how many people uploaded to CPAN on a daily basis or weekly basis or yearly basis, kind of data, I said, <q>Yeah, very nice.</q>
But I said, <q>I'm not going to copy what he did, I'm going to convert that into a different format.</q>
Exactly the same data, but in a different format.
I'm going to convert it into some kind of a graph, using HighCharts Free Graph JavaScript thing, using JSON data, converted that into a friendly chart, so that's how that all started.</p>
<p>So I try to keep that and that's how I also got into, I came across that Neil Bowers had started this other trend, where he used to push one change to CPAN on a daily basis and he did that for 101 consecutive days and after that he stopped it.
I think he had some kind of challenge among his friends and some other people in his group started doing that, and he was like a leading and then he stopped after awhile.
And I said, <q>Oh wow, I wish I could do that 101 consecutive days.</q>
And that's how I started and since then I've been doing it 692 days, today's the 692 consecutive day I've been pushing one change every day to CPAN.</p>
<p>And then I came across <a href="http://metacpan.org/author/BARBIE">Barbie</a> who did, I think, 370-some odd days, consecutive days.
I thought whether I'm going to beat Barbie or not but I'll try and Barbie even mentioned in one of his <a href="http://blogs.perl.org/users/barbie/2015/03/a-year-of-cpan-uploads.html">blogs</a>, saying, <q>I'm going to stop it after one year, I'm not going to carry on, it's too much.
But I think Mohammad is going to carry farther from me.</q>
He said, good luck to me.
I'm carrying on, I don't know how long I'm going to carry on.</p>
<p>[19:32] szabgab:
So that's why you needed the modules that I ...?</p>
<p>[19:37] manwar:
Yeah, after a point, I said <q>I have nothing more to do.</q>
So I need to go and see if I can adopt some of the most popular modules so I can do some kind of contributions, so I'll have something to push on a daily basis.
So that's why, yeah.</p>
<p>[19:51] szabgab:
There are a couple of more modules under my name, so you can take them!</p>
<p>[19:58] manwar:
I would love to!</p>
<p>[19:59] szabgab:
Okay, we'll talk about it, off the video.</p>
<p>[20:03] manwar:
Yeah, of course, yeah, yeah.</p>
<p>[20:08] szabgab:
That's great.
Okay, so we have quite a few other things that we wanted to talk about but the time is, we have already talked for 20 minutes.
So I would like to finish this conversation this time and we'll go on later on, and talk about the other stuff.</p>
<p>[20:28] manwar:
Sure, why not.</p>
<p>[20:32] szabgab:
So really thank you very much for coming on the show.
Would you like to say anything else just for this episode and then...?</p>
<p>[20:42] manwar:
Yeah, one thing I want to say, the reason I get so much excited towards this contribution part of it is I've seen people who contribute in a big way to Perl, in general.
My ambition, like every time I do something and contribute in whatever small way I do, I said, <q>I wish I could do a bigger project in Perl,</q> for example, there's a Dancer project going on and for example, <a href="https://metacpan.org/">MetaCPAN</a>, the group of people who are working on that.
Those are big projects.
My ambition is, my next target is one day, I would like to be part of the core team for those so I can do something very interesting.
Whatever I do so far, I don't think is anywhere near them, so I wish one day, I can go and join that core team of Perl developers and contribute in a big way.</p>
<p>[21:50] szabgab:
I don't know, it's interesting, as far as I understand most of the time you work alone and with some contributors helping you, and these are definitely a different kind of contribution, when  you work in a team, there's a couple of other people.
Yeah, that's interesting.</p>
<p>[22:13] manwar:
So yeah, I hope to experience that as well, if possible.</p>
<p>[22:19] szabgab:
Yeah, I remembered one more question that I wanted to ask about your website.
Is that open source?</p>
<p>[22:26] manwar:
Yeah, it is.</p>
<p>[22:27] szabgab:
So other people can copy, take the code for their own modules...?</p>
<p>[22:33] manwar:
It's available on my <a href="https://github.com/Manwar">GitHub</a> so anybody can branch, fork it, whatever they want, absolutely free.</p>
<p>[22:44] szabgab:
Let's direct people there and see if other people will use it, and maybe they will start to try to follow you, and catch up with the daily part.</p>
<p>[22:56] manwar: Maybe.
Of course, it's absolutely free, yeah.</p>
<p>[22:58] szabgab:
Okay, so really thank you again, for coming on the show and I really hope that we can continue this conversation because there are quite a few more things that I wanted to hear from you.</p>
<p>[23:08] manwar:
Absolutely, any time, my friend, any time you want me, I'll be there.
Thank you very much for the time. Thanks a lot.</p>
<p>[23:15] szabgab:<br />
Bye Bye.</p>
<p>[23:15] manwar:
Bye.</p>
<p>[/transcript]</p>
<!--
## Technical info

Recorded on 3 September 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>

-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #10: Michael Kennedy - Talk Python To Me</title>
    <summary type="html"><![CDATA[Interview with Michael Kennedy about several Python project that were discussed on his podcast: Talk Python To Me]]></summary>
    <updated>2016-09-23T20:01:01Z</updated>
    <pubDate>2016-09-23T20:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-10-michael-kennedy" />
    <id>https://code-maven.com/cmos-10-michael-kennedy</id>
    <content type="html"><![CDATA[<p>Interview with <a href="https://blog.michaelckennedy.net/">Michael Kennedy</a>, the host of the
<a href="https://talkpython.fm/">Talk Python To Me</a> podcast and the author of several
<a href="https://training.talkpython.fm/">Talk Python Training courses</a>.</p>
<p>We talked about a number of project that were discussed on his show: Scrapy, passlib, hypothesis, Pyjithon, and sqlalchemy.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/6cmmK7Gsr7A" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Michael Kennedy</h2>
<ul>
<li><a href="https://blog.michaelckennedy.net/">Michael Kennedy</a></li>
<li><a href="https://github.com/mikeckennedy">GitHub</a></li>
<li><a href="https://twitter.com/mkennedy">Twitter: @mkennedy</a></li>
<li><a href="https://talkpython.fm/">Talk Python To Me</a></li>
<li><a href="https://github.com/mikeckennedy/talk-python-transcripts">transcripts</a></li>
<li><a href="https://training.talkpython.fm/">Talk Python Training courses</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<p>Three courses, via kickstarter:</p>
<ul>
<li><a href="https://talkpython.fm/course">Python Jumpstart by Building 10 Apps</a></li>
<li><a href="https://talkpython.fm/pythonic">Write Pythonic Code Like a Seasoned Developer</a></li>
<li><a href="https://talkpython.fm/launch">Python for Entrepreneurs</a></li>
</ul>
<p>The projects mentioned on he podcast</p>
<ul>
<li>
<p><a href="https://github.com/scrapy/scrapy">Scrapy</a></p>
</li>
<li>
<p><a href="https://bitbucket.org/ecollins/passlib/wiki/Home">passlib</a></p>
</li>
<li>
<p><a href="https://hypothesis.readthedocs.io/en/latest/">HypothesisWorks / hypothesis-python</a></p>
</li>
<li>
<p><a href="https://talkpython.fm/episodes/show/67/property-based-testing-with-hypothesis">Episode #67 on hypothesis</a></p>
</li>
<li>
<p><a href="https://github.com/Microsoft/Pyjion">Microsoft / pyjion</a></p>
</li>
<li>
<p><a href="https://talkpython.fm/episodes/show/49/microsoft-s-jit-based-python-project-pyjion">Episode #49 on Pyjiton</a></p>
</li>
<li>
<p><a href="http://www.sqlalchemy.org/">sqlalchemy</a></p>
</li>
<li>
<p><a href="https://talkpython.fm/episodes/show/5/sqlalchemy-and-data-access-in-python">Episode #5 on sqlalchemy</a></p>
</li>
</ul>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[michael guest1 Michael Kennedy]</p>
<p>[00:03] szabgab:
Hi there, you are welcome to the CMOS, the Code Maven Open Source interview series and podcast.
I'm your host, Gabor Szabo, and with me is <a href="https://blog.michaelckennedy.net/">Michael Kennedy</a>.
Hi Michael!</p>
<p>[00:18] michael:
Hey, guys!
Hey Gabor, thank you so much for having me, it's great to be here.</p>
<p>[00:21] szabgab:
It's great to have you!
You have a great podcast, and you have all sorts of open source experience, and I really would like to hear about all of these, but let's start with introducing you?</p>
<p>[00:36] michael:
Yeah, I'd be happy to.
So, those of you who don't know me, my name is Michael Kennedy, like you said.
Probably the biggest thing I'm doing out in the community, is running the <a href="https://talkpython.fm/">Talk Python To Me</a> podcast, which is the number one Python podcast, most popular podcast, covering all sorts of stuff that somehow intersects with Python.
So sometimes it's looking inside, like the <a href="http://flask.pocoo.org/">Flask</a> web app framework, but other times, it's talking to people at <a href="https://home.cern/">CERN</a>, about how they're using Python to find the Higgs boson and stuff like that.</p>
<p>[01:07] szabgab:
That's great but let's go further to your history.
So how did you get into Python?</p>
<p>[01:14] michael:
Yeah, absolutely.
So I consider myself an accidental programmer.
I know lots of people like me.
So I was working on my PhD in math, working on Silicon Graphics supercomputers, trying to solve math simulations.
And I ended up getting into C++, and OpenGL, and 3D work around there, and I realized, after about a year of that, <q>Hey, this programming stuff is way more fun than math!</q>
So I sort of, after a little while, stopped pursuing math and just went into programming, and I've been doing programming for about 20 years.
And just everyday, I think, I wake up and, <q>Wow, today is even more amazing than the world was yesterday!</q>
It's just so exciting to be in this industry and I've done a ton of different types of programming, and like I said, Silicon Graphics, C++, C#, JavaScript, and really Python, the last four or five years.</p>
<p>[02:10] szabgab:
Okay, so four or five years Python.
That's actually not a lot?</p>
<p>[02:14] michael:<br />
Yeah, no it's not that much.
It's odd that I would be one of the more-visible voices in the community, given that I've only been doing it for that long.
But when I created my podcast, there were zero Python podcasts.
There had been some good ones, but they all stopped for whatever reason, and there's a year and a half with no Python podcasts.
And I thought, <q>Well, if I can't listen to one, that's cool, I want these stories to exist, maybe I'll just have to make it myself.</q>
So I did and the community has been so supportive, and they really seem to appreciate the conversations and the people I have on the show.
I mean, my show is all about the guests, I try to not make it about me.
So it's just finding interesting people and projects, and talk about it.</p>
<p>[02:55] szabgab:
Yeah, so if I recall, somewhere I heard that you are actually turning it into a real business?</p>
<p>[03:03] michael:
Oh, yeah, so that's an interesting aspect, and I think that that touches on why some of the other podcasts failed.
As you know, it is a tremendous amount of work to continuously schedule, and produce, and research, the shows, and I had the chance, at the beginning of this year, back in February, a little bit before then, I had more and more ad sponsorships coming on my show.
I had sold out the ads for all of 2016 and it was, it turned out to be enough revenue that I could use it as a base, to sort of build other projects and what-not.
And I decided, <q>Go do something amazing, and try to make this my full-time job.</q>
So in February, I made my podcast my full-time job, and I've been building online courses that go deeper into some of the topics we cover on the podcast, for people.
And I've done that mostly through Kickstarter, but also through my online <a href="https://blog.michaelckennedy.net/">website</a>.</p>
<p>[04:03] szabgab:
Okay, so do people buy these podcasts?
Because I understand some people pre-paid, basically, through Kickstarter, and then other people can just go and buy later on?</p>
<p>[04:17] michael:
Yeah, exactly, you can go buy everything that was on Kickstarter, it just costs more because I have a pre-paid discount, if you were on Kickstarter.
To be clear, the podcast is totally free.
But the courses, the courses that I, you know each course that I produce, I spend probably two full months, full-time, producing it.
It's a production to put it together.
I try to create really nice things that don't waste people's time, that are fun, that people can learn from.
So far the feedback's been really amazing.</p>
<p>[04:46] szabgab:
Yeah, I know, creating a training course is pretty difficult.
I do classroom trainings in a couple of subjects, and it's a lot of time to prepare a training.
A lot longer than giving the training.</p>
<p>[05:01] michael:
That's for sure.
But it's super-rewarding, I'm really enjoying it, and my plan for the next few years at least, is to keep doing the podcasts, keep building these online courses, and just try to grow this whole community around Python.</p>
<p>[05:15] szabgab:
Okay, so let's start and talk a little bit about the open source projects.
Either those that you're involved in and/or those that you talk about on your shows.
So there are a couple of interesting ones, and I would really like to hear about them.</p>
<p>[05:32] michael:
Yeah, absolutely.
So, on the podcast, almost every week I talk to somebody that is doing something cool with open source.
It may be half the time, they're consuming open source, so I might talk to somebody at Netflix about how they're using existing open source libraries, to manage the cloud-computing infrastructure that they have.
But other times, it's about people who are doing amazing stuff.</p>
<p>So it's really cool to see both sides and another component that I'd like to throw in there, I think that fascinates me the most, because it really bodes well for open source, is talking to the people who have companies, that are built upon open source projects.
And just the amazing stuff that they're doing.</p>
<p>So an example that really surprised me, was this open source library called <a href="https://github.com/scrapy/scrapy">Scrapy</a>.
So Scrapy is a screen-scraping library for Python, and you can go in and say, suppose you want to go to some kind of website, they don't have an API but the data is clearly accessible with a CSS selector, as most data is.
You can go in and basically turn that webpage into an API with the Scrapy library.
I thought, <q>Okay, that's cool,</q> and I talked to probably the guy who created it, and he said, <q>Now what we're doing is, we create a business around this open source library.</q>
Now if I had to ask you, how would you create a business around an open source library that does web-scraping?
It's great that it's popular, maybe consulting, maybe training, but it's not really too much of that.
What they're doing is they created web-scraping as a service.
So they have all this infrastructure and the re-tryability, and the bandwidth, and the parallelism, to massively scrape the web with their API that you already know, and they sell basically, like AWS sells infrastructure and so on, they sell the ability to do web-scraping.</p>
<p>And I think those combinations of open source projects are the most amazing, because you know that open source project is going to be really vibrant, and really well-maintained, because there's a whole business around it.
They have 130 people work in their company, that does that.</p>
<p>[07:52] szabgab:
Wow, that's great.</p>
<p>[07:53] michael:
That really surprised me, when I heard that, but I'm really happy for them, and that's great and so, I picked out a couple that people talk about on my show, that I thought were really cool.
My favorite one to talk about is this one called <a href="https://bitbucket.org/ecollins/passlib/wiki/Home">Passlib</a>, because day after day we hear about all of these companies that make major security mistakes around their web apps.
If you have a web app either for your own company, your side project, or for the business that you work for, and it gets hacked, like these things do where the database gets leaked.
Not even necessarily through your app, like the <a href="https://www.patreon.com/">Patreon</a> guys got <q>hacked,</q> their site got hacked because somebody left a development server up and running, and the server itself was not properly secured.
It was not that there was any vulnerability in the code, it's just woops, the testing server was improperly secured.
And so if somebody gets hold of your code, that's not good.
Right, it's not good if they get hold of your data, but Passlib, what it does, is it employs all the best practices to automatically use the right hashing for one-way encryption on your code.
It uses folding and salt, so it doesn't just hash your password once with some salt, it actually will do that 50,000 times, so it's computationally expensive to guess it, and then store that result.
And it does all that stuff automatically.
So it makes treating user accounts really safely, drop-dead easy, like one or two lines of code.
So Passlib, I really like that.</p>
<p>[09:27] szabgab:
So, as I understand, instead of me trying to figure out how to encrypt the passwords that my users, how to hash them, before storing them, and pick the right encryption, and then maybe tomorrow, update them.
I just use passlib and then I can hopefully rely on that, that it's using the latest recommended number of encryptions.</p>
<p>[09:55] michael:
No, number of iterations, absolutely.
Then how do you store the salt, how do you communicate if over time you want to upgrade passwords so they're harder to compute, how do you do...all that stuff is super...it's just not about your business.
You want to build an app where people can share pictures or whatever, and you're down in the guts of encryption, and you just shouldn't care about that.
And so Passlib, if you're doing something in Python with accounts, Passlib, it's amazing.</p>
<p>Another one that I think is really cool, that I actually did a whole show about, is this thing called <a href="https://hypothesis.readthedocs.io/en/latest/">Hypothesis</a>.
So, have you heard of property-based testing?</p>
<p>[10:29] szabgab:
A little bit, I think from you, from another podcast perhaps.</p>
<p>[10:33] michael:
Yeah, perhaps.
So the idea is, with a traditional unit test, we had to come up with a nomenclature around this, words, and so we called that example-based testing.
The way people normally write tests, is they say, <q>Here's a test, and if I have this user, and they have this ID, or maybe they're this age, and they try to create an account with this email, something will happen.</q>
Or, if you tried to purchase this thing for this price, something would happen.
And you actually set up those numbers and details.
With Hypothesis, you express things like, <q>I would like to test, with one of the existing users, buying this product, with some number between 0 and 100.</q>
And it will try all the permutations and variations, and it will seek out and find those little edge cases, where you're off by one or, if you don't say anything, it'll try to buy it for a negative price, and your system should catch that, but if it doesn't...
There's all sorts of interesting things, so instead of writing these examples, and having one by one cases, you give it the relationships of the data, and it automatically tries a bunch of variations.
So Hypothesis is amazing for unit testing, really, really nice.</p>
<p>[11:44] szabgab:
Actually, I remember now, I heard about it in one of the recent meet-ups, in our <a href="http://www.meetup.com/PyWeb-IL/">local Python meet-up group</a>.
And the funny thing is that, the same idea, or more or less the same idea, I have been...was part of my training course for a long time.
As an idea, without an actual implementation.</p>
<p>[12:05] michael:
Right, not necessarily a framework.</p>
<p>[12:06] szabgab:
No, no.</p>
<p>[12:09] michael:
This is what you should try, eh?</p>
<p>[12:09]  szabgab:
So the way I explained, was in order to create these example-based tests that you would normally, you need the domain expert there, not just the programmer.
And maybe the domain expert is not available or too expensive, so you can create an additional set of, I called it &quot;random tests.&quot; and then you can, to a certain level, to a certain extent, you can actually test whether your code works.
You might not be able to test whether it's properly works, but you can check that it doesn't crash, or doesn't do something like this.
So I don't know actually if this Hypothesis is, whether it goes further than that, or can it check actually..?
It can't give you the expected value, right?</p>
<p>[13:01] michael:
Yes, I think there are ways to check the expected value, but you have to basically compute the expected value or something like that.
So it's not automatic.
It will do interesting things, like if you've got to go through a series of steps, it will try the steps in a bunch of different orders, and if it finds an error, it will say, <q>Well, I tried to create an account and then buy something, and that worked and it should have failed because you didn't enter your billing information</q> or whatever.
It'll go through some pretty advanced stuff, but it's not magic.
Most of the time, it's just, instead of writing one example test, you might one property-based test and it's really like 100 example tests.
Yeah, so Hypothesis, that's definitely one of the cool projects that's out there.</p>
<p>Another one that I'd like to point out, because it's probably the stand-out project in this area, but this area is very interesting right now, is this thing called <a href="https://github.com/Microsoft/Pyjion">Pyjion</a>, from Microsoft of all places, for Python.
And what it is, it is an extension to the main, primary Python runtime or implementation on the <a href="http://cython.org/">CPython</a> implementation, that adds <a href="https://en.wikipedia.org/wiki/Just-in-time_compilation">JIT</a> capability, as a general concept.
So right now Python is an interpretative language, unless you use other implementations, or runtimes like <a href="http://pypy.org/">PyPy</a>, <a href="http://ironpython.net/">IronPython</a>, <a href="http://www.jython.org/">Jython</a>.
But those all come with drawbacks, <q>Oh you can get this really great performance, like Pypy's five times faster, but you can't use a bunch of the libraries you know.</q>
Similarly, for IronPython, and so on.
But this Pyjion thing is basically, instead of forking the implementation and rewriting it, it's trying to create a framework for people to plugin different JIT implementations into the existing one.
So as a community, everybody can come together and work on making the language faster, without forking it with these trade-offs.</p>
<p>[15:00] szabgab:
That's interesting, seems like far, far away from the others, that are more like Python-user modules or libraries and this is really for hard-core, right?</p>
<p>[15:12] michael:
Well, yes, right, you would not be using this.
But hopefully this is a foundation of things to come, that makes all of the libraries faster.
But I think it's really interesting because they're saying, <q>We're building this JIT framework and this library to help you implement JITs in C++,</q> and they actually have two implementations of their JIT.
One is the .NET core framework, which is cross-platform, this new thing from Microsoft, and it has a JIT in it.
But they're also using the V8 JavaScript compiler as one of the JIT implementations for Python, which is just, they're trying some funky stuff.
That's a cool project.
But I bring it up because there's all of this, there's lots of work around JIT, and experimentation on how the internals of Python run, right now.
And this is just one of them, that highlights it.</p>
<p>[16:01] szabgab:
That's good.</p>
<p>Anything else?</p>
<p>[16:06] michael:
Yeah, I've one more that I think everybody should know about, and probably many people do, but if  you're doing anything with relational databases, <a href="http://www.sqlalchemy.org/">SQLAlchemy</a>, is a really great ORM, or object-relational mapper.
Write a few classes, input your relationships in there, you can put your constraints, like, <q>Here's an email address, I want this indexed, so I can search quickly and I want it to be unique, so I don't get duplicate registrations, if I have to reset by email.</q>
Things like that.
So SQLAlchemy, it's great.</p>
<p>[16:34] szabgab:
So these four projects, basically you mentioned four projects, did you have individual episodes for each project that you discussed?
Or how...?</p>
<p>[16:44] michael:
Let's see... no, yes, yes, yes.
The Passlib, no I have not had those guys on there yet.
It might be fun to talk to them, I'm not sure that project is big enough to do a whole episode, but to be honest, it probably is.
But I've had the guys from Hypothesis project on there, I've had Brett Cannon from Microsoft, who's one of the two folks maintaining/working on Pyjion.
And I had Mike Bayer on for SQLAlchemy.
SQLAlchemy was <a href="https://talkpython.fm/episodes/show/5/sqlalchemy-and-data-access-in-python">episode 5</A>, so it was an original one.
Hypothesis, was <a href="https://talkpython.fm/episodes/show/67/property-based-testing-with-hypothesis">episode 67</a>.
Pyjion was <a href="https://talkpython.fm/episodes/show/49/microsoft-s-jit-based-python-project-pyjion">episode 49</a>.</p>
<p>[17:21] szabgab:
Well, we'll find it out and we'll put it in the show notes.</p>
<p>[17:23] michael:
Yeah, yeah, we'll put it in the show notes, absolutely.</p>
<p>[17:24] szabgab:
So people will have a good reason to go there, right?</p>
<p>[17:28] michael:
Yeah, very good.
All those guys have amazing stories and insights, and it's worth checking out.
And it's nice to talk to them about how they're growing their open source projects and what's working, and so on.</p>
<p>[17:39] szabgab:
Okay, that's really great and thank you for introducing us to these projects.</p>
<p>[17:45] michael:
Right, welcome.</p>
<p>[17:46] szabgab:
Before wrapping this up, do you have anything you would like to tell to the listeners of my small podcast, maybe they would like to be interested in yours?</p>
<p>[17:59] michael:
Yeah, sure, so I guess the main thing is, if you're interested in these ideas that we're talking about, every week I spend an hour with one of these folks doing amazing stuff, come check it out at <a href="https://talkpython.fm/">talkpython.fm</a>, that's where the podcast is, and you can subscribe or just browse through the episodes, there's a bunch of really interesting and inspiring stuff there, so check it out.</p>
<p>[18:23] szabgab:
Hopefully many people will.
Thank you very much for coming on the show.
And bye bye.</p>
<p>[18:33] michael:
Gabor, thank you so much.
Bye everyone.</p>
<p>[/transcript]</p>
<!--
## Technical info

Recorded on 3 September 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #9: Ire Aderinokun - Khaled Bot, Can I Use Embed, Formhack</title>
    <summary type="html"><![CDATA[Interview with Ire Aderinokun about Khaled Bot, the Can I Use Embed, and Forhack a configurable form reset.]]></summary>
    <updated>2016-09-21T08:01:01Z</updated>
    <pubDate>2016-09-21T08:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-9-ire-aderinokun" />
    <id>https://code-maven.com/cmos-9-ire-aderinokun</id>
    <content type="html"><![CDATA[<p>Interview with <a href="http://ireaderinokun.com/">Ire Aderinokun</a> about
<a href="http://khaledbot.com/">Khaled Bot</a> a Slack-bot,
<a href="http://caniuse.bitsofco.de/">The (Unofficial) CanIUse Embed</a>,
and <a href="http://formhack.io/">Formhack</a> a configurable form reset.</p>
<p>In which I've also learned what are CSS resets and heared about progressive web apps.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/W5gy7EMe7LM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Ire Aderinokun</h2>
<ul>
<li><a href="http://ireaderinokun.com/">Ire Aderinokun</a></li>
<li><a href="https://github.com/ireade">GitHub</a></li>
<li><a href="https://twitter.com/ireaderinokun">Twitter: @ireaderinokun</a></li>
<li><a href="https://bitsofco.de/">Blog: bits of code</a></li>
<li><a href="https://medium.com/@ireade">Medium @ireade</a></li>
<li><a href="https://www.linkedin.com/in/iaderinokun">LinkedIN</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="http://www.neopets.com/">NeoPets</a></p>
</li>
<li>
<p><a href="http://www.bigcabal.com/">Big Cabal Media</a></p>
</li>
<li>
<p><a href="http://techcabal.com/">Tech Cabal</a></p>
</li>
<li>
<p><a href="http://zikoko.com/">Zikoko</a></p>
</li>
<li>
<p><a href="https://www.buzzfeed.com/">BuzzFeed</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/West_African_Pidgin_English">Pidgin</a></p>
</li>
<li>
<p><a href="https://slack.com/">Slack</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/DJ_Khaled">DJ Khaled</a></p>
</li>
<li>
<p><a href="http://khaledipsum.com/">Lorem Khaled Ipsum</a></p>
</li>
<li>
<p><a href="http://khaledbot.com/">Khaled Bot</a></p>
</li>
<li>
<p><a href="https://github.com/ireade/khaledbot">KhaledBot at GitHub</a></p>
</li>
<li>
<p><a href="http://getbootstrap.com/">Bootstrap</a></p>
</li>
<li>
<p><a href="http://caniuse.bitsofco.de/">The (Unofficial) CanIUse Embed</a></p>
</li>
<li>
<p><a href="http://caniuse.com/">Can I use</a></p>
</li>
<li>
<p><a href="https://github.com/ireade/caniuse-embed">Can I Use embed at GitHub</a></p>
</li>
<li>
<p><a href="http://formhack.io/">Formhack</a></p>
</li>
<li>
<p><a href="https://github.com/ireade/formhack">Formhack at GiHub</a></p>
</li>
<li>
<p><a href="https://github.com/ireade/OfflineFX-Codelab">Offline FX at GitHub</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[ireade guest1 Ire Aderinokun]</p>
<p>[00:03] szabgab: Hello there, this is CMOS, the Code Maven Open Source podcast and interview series.
I'm your host, Gabor Szabo, and with me is <a href="http://ireaderinokun.com/">Ire Aderinokun</a>, have I pronounced it correctly?</p>
<p>[00:19] ireade: Yes, that's quite good.
So my name is Ire Aderinokun.</p>
<p>[00:24] szabgab: Okay, so it's really nice to have you on the show, on the podcast, and to see you in the video.
How's everything over there?</p>
<p>[00:34] ireade: Thank you, thanks for having me.
So I'm in Nigeria at the moment, in Lagos, so it's morning and I'm just starting my day.</p>
<p>[00:43] szabgab: That's great.
I understand that you are a front-end developer and a designer, mainly. Can you tell me a little bit about how you got involved in this, how you got started?</p>
<p>[00:57] ireade: Yes, so my coming in to this kind of line of work is probably a bit different to how other people did it, because I actually studied psychology for my undergraduate degree, and then law for my masters, so I did something completely different to programming.</p>
<p>But I got interested in this when I was a lot younger, so maybe when I was about 13, 14. I used to play this online game which is called <a href="http://www.neopets.com/">NeoPets</a>, I think a lot of people use to play it as well, so I'm not the only one.
But it was just kind of like an online role-playing game in a way, and as part of the game you could do little bits of HTML and you could create these pages, so you could style them a bit differently.
So that's kind of how I got started with it, that's how I was introduced to the concept of making websites or doing things like that.
So that's how I got started and then, over time, I found that I was really interested in doing this, so on and off, I would make websites for my friends and family.
And then more recently, after I graduated from my masters, I decided this was actually something that I want to do, not just as a hobby but as a career.</p>
<p>So I decided that I would just go for it and see how it worked out.
Luckily it worked out well because I'm still doing it and I don't have to go back to law school.</p>
<p>[02:29] szabgab: So have you graduated law school or ..?</p>
<p>[02:33] ireade: Yes, I graduated almost two years ago now.</p>
<p>[02:37] szabgab: So does either of these, law school or learning psychology, any of these have an impact on your work or ..?</p>
<p>[02:48] ireade: I don't think it has an impact very directly but it's helped me in the soft-skills aspects, I think.
So for example, for law, I learned how to write well and articulate what I'm trying to explain, how I'm trying to explain things to people, so whenever I write things, like articles for my blog, I think that my background in law really helps me try to develop my writing skills.
And psychology, I think it helps in user-experience design a lot, because it really allows me to have a high level of empathy for people and think about how they're experiencing something.
So I think it helps in that aspect.
But generally, it's more impacted my soft skills in this job rather than actually learning how to code.</p>
<p>[03:46] szabgab: Yeah, well I guess the actual code is not, there is the psychology of the computer, of course, but it's more of understanding how people might use your website, of course, so there might be a connection between <a href="https://en.wikipedia.org/wiki/User_experience_design">UI</a> and psychology?</p>
<p>[04:10] ireade: Yeah, I think so, because it's all about trying to understand other people, and psychology is also about trying to understand other people, so they really merge in that aspect, yes.</p>
<p>[04:23] szabgab: So, these days when you work, do you work for a company or are you freelancer or what kind..?</p>
<p>[04:30] ireade: Yeah, so I work for a company based here in Nigeria, they're called <a href="http://www.bigcabal.com/">Big Cabal</a> and it's a media company.
So at the moment, they have two publications, one is called <a href="http://techcabal.com/">Tech Cabal</a>, which is the biggest news tech site in Nigeria.
And the second one is called <a href="http://zikoko.com/">Zikoko</a>, and it's kind of more entertainment.
It's like <a href="https://www.buzzfeed.com/">BuzzFeed</a>, but for Nigerian or African audiences in general.</p>
<p>[04:59] szabgab: And are these websites in English?</p>
<p>[05:03] ireade: Yes, it's in English.</p>
<p>[05:05] szabgab: Okay, so there is a large, I think I understand that in Nigeria the common language is English, but there are lots of other languages?
And do most of the people speak English?</p>
<p>[05:19] ireade: Yes, you find that a lot of people speak English because there are many, many different tribes in Nigeria and each of these tribes, they have their own language.
So the common language that you would probably expect that most people would be able to speak is English or some variation of English.
It's called <a href="https://en.wikipedia.org/wiki/West_African_Pidgin_English">Pidgin</a>, which is a little bit more low level, I guess, version of English.
So you could probably at least expect that people would be able to speak that in addition to their own native language.</p>
<p>[05:51] szabgab: I understand.
Any other countries, you said it's not only for Nigeria, these websites, or at least one of them, but for more of African countries, so they all too have relatively good English?</p>
<p>[06:07] ireade: We're trying to break out into other African countries as well, but obviously because we're based here, then Nigeria is our first audience.
But we're also trying to break out into neighboring countries like Ghana, also places like Kenya, and just trying to break out as much as possible into markets where people are more online, so soon we'll hopefully be across the whole of Africa.</p>
<p>[06:32] szabgab: Yeah, that's definitely interesting.
So you explained a little bit about how you got into computers and design and building websites, but how did you get from there to building stuff which is open source?</p>
<p>[06:51] ireade: I think it's kind of to do with the way I got into this field to begin with.
So because it was a hobby for myself rather than a job, I've always been working on side-projects and things, all of this time, so it just seemed like something natural to develop into making things open source.
So whenever I would work on something that I just thought was fun or interesting, I always find it really helpful to make it open source and see what other people think.</p>
<p>Because that's kind of how I learned myself, by looking at what other people had done, people putting their code online and making things open source so other people can learn from it.
So as much as possible, whenever I do something, I always try to give back in that way because it was so important, it was such an important part to me learning, that I try to contribute as well.
And sometimes it's just a silly project that I work on, so it's not even something that I would make money off of, so it's just kind of fun to show people, <q>Oh, this is how I made this funny Slack bots or something like that.</q></p>
<p>[08:03] szabgab: Okay, so what would be the most interesting project that you, I don't know, that made you the happiest to work on, these open source..?</p>
<p>[08:12] ireade: Made me the happiest?</p>
<p>Well, that's a difficult question! I worked on a bunch of different things, so different things kind of hit different things for me as well, but I think one of the most fun things that I worked on was the Slack bot, which is called <a href="http://khaledbot.com/">Khaled Bot</a>.
So I think awhile ago, there was kind of a <a href="https://en.wikipedia.org/wiki/DJ_Khaled">DJ Khaled</a> phase, when people were making things to do with DJ Khaled, and I think I saw someone had made sort of a <a href="http://khaledipsum.com/">Lorem Ipsum version of DJ Khaled</a>.
It just kind of brought the idea to me because I was also playing around with Slack bots, to make a <a href="http://khaledbot.com/">DJ Khaled Slack bot</a>, so that was really funny for me to do.</p>
<p>I was personally cracking up to myself while I was making  it, while I was testing it, and seeing how it works, that was really fun to make.<br />
So I just made this bot that pretends to be DJ Khaled, so you can talk to it and then it will say things like <q>Major Key</q> and all of that.
So that was really fun and I think a lot of people enjoyed it as well, so that was fun for me, probably one of the most fun things.</p>
<p>Because a lot of my other projects, not all of them are just random, fun things.
Some of them are actual utility, so they're less funny but probably more useful, because I don't think this Khaled bot is very useful!</p>
<p>[09:41] szabgab: So how can people meet this Khaled bot?
Is it running somewhere now, or is it something that you download and start running for yourself, or how does it work?</p>
<p>[09:51] ireade: Yeah,  you can go to <a href="http://khaledbot.com/">Khaledbot.com</a>, so that's another one of my obsessions, buying domain names for a lot of these silly projects.
So if you go to khaledbot.com, you'll see instructions for how to install it, also you can have it hosted, I use this hosting provider which is called Deep Blue and it's free so you can use by yourself.
Or you can also just download the source and then you can run it locally yourself, and maybe make some changes if you want to add things, so you can do that.
So you can just add it to your Slack team and whenever you're having conversations, you can just involve DJ Khaled into it.</p>
<p>[10:32] szabgab: Okay, especially I guess when there's some tense situations maybe, then you can just ask Khaled bot to lighten up?</p>
<p>[10:42] ireade: Yeah, one of my favorite features that I added, kind of for this purpose, was if you are just in a private conversation with the Khaled bot, you can just say, <q>Okay, just go and send something, go and talk to this person.</q>
So maybe if someone is having an argument, you can privately just say, <q>Okay, go and just send a key to this person.</q>
And then in the middle of maybe a heated argument, DJ Khaled would just pop up and just say something, so I guess that's a good utility for the bots.</p>
<p>[11:10] szabgab: Okay, so we made it useful now!
Good.</p>
<p>[11:13] ireade: Yeah, exactly.</p>
<p>[11:15] szabgab: Okay, so what other projects?
There's this <a href="http://caniuse.com/"><q>Can I use?</q></a> project, something like that, right?
That's on your website?</p>
<p>[11:25] ireade: Yeah, so this is probably one of the biggest things I've worked on, because it did take a long time for me to do.
But because I write a blog, it's called <a href="https://bitsofco.de/">Bits of Code</a>, and I write weekly articles about, for example, development.</p>
<p>So obviously, when I'm writing about things like CSS features or JavaScript features you come across, you always want to know whether there's support for these features across all the various browsers.
So probably the most popular website for this is this website, called <a href="http://caniuse.com/"><q>Can I Use?</q></a> and they actually have their data open source, so they have an API where you can just connect to and just get all the data.</p>
<p>So I had the idea of creating an embeddable widget of the information, so whenever I'm writing a blog post, if I'm talking about Viewport units or CSS variables, I could just drop in the embed, so people could, while they're reading, just see what the support is for this feature at the moment.
So I created that, it's probably one of the biggest things that I've created by myself because I learned a lot, I learned a lot about it because I don't think I'm that amazing at JavaScript but it's through working on things like this that you develop your skills, so it taught me a lot.</p>
<p>And so I put it up, I think you can go to <a href="http://caniuse.bitsofco.de/">CanIUse.bitsofco.de</a> or if you just Google <q>Can I Use Embed</q> it should show up somewhere.
So you just have this little widget that you can embed in your blog post or wherever, and you can see the support for something like CSS, JavaScript, HTML features.</p>
<p>[13:12] szabgab: So it can actually tell, it can easily tell what kind of, if a certain feature, so which browser supports a certain feature that you're talking about, right?</p>
<p>[13:23] ireade: Yeah, exactly.</p>
<p>It has something that kind of looks like a table, and it has all the major browsers, and then you can just say that you want to see what the feature support is for the current versions of each browser.
Or you can say you want to see what will be in the future or the past.
And then you just drop that there and then it's responsive, so it will look nice on your site.</p>
<p>[13:47] szabgab: Okay, and if it's embedded, then the other blogs that use this, you actually know what blogs are using this, right?
Because you have it in your own log?</p>
<p>[14:00] ireade: Yeah, I haven't done much tracking actually, but occasionally I do see, I think I do have some analytics on it.
Or sometimes I just see, maybe from reading an article and someone has used it, and then it's surprising to me, because I'm reading an article and someone has embedded it there and it's kind of like, <q>Oh, that's cool!</q></p>
<p>[14:21] szabgab: Yeah, I guess it's a really good thing when you do some work and then suddenly you encounter that someone is using it.</p>
<p>[14:30] ireade: Exactly, because it's something that takes so much time and I feel like maybe I might be the only one that uses it.
But for me it was worth it because I knew it was something that I wanted, so even if I would be the only person that uses it, it would still be useful.
But it's also good to know that something that I spent time doing, that other people find it useful.</p>
<p>[14:54] szabgab: Okay, and is there actually any work that needs to be done on any of these projects?
Or are they finished and there's no on-going maintenance?</p>
<p>[15:06] ireade: For the most parts, they are done.
I do have a lot of ideas for how to make it better, and I think, I mean I did this almost six months ago, so I feel like if I went back and looked at the code, I probably could make a lot of improvements on it now.</p>
<p>But for the Embed, in particular, there are some things I want to do.
For example, because it's an iframe, you can't really use it in GitHub READMEs, and that's something that some people have requested, <q>How can we use it for that?</q>
So I had this idea of making it like a canvas thing, so people can just download it as an image as well.
So that's something that's been on my to-do list for awhile, and I hope to have that feature out soon, if I have some time.
But if anyone wants to help me out with it, that'd be great as well, because it's open source, people can contribute as well.
I'll be happy with that.</p>
<p>[16:07] szabgab: Okay, I guess it's in your <a href="https://github.com/ireade">GitHub repository</a>, right?</p>
<p>[16:10] ireade: Yeah, exactly.</p>
<p>[16:11] szabgab: Okay, so there's also a third project, <a href="http://formhack.io/">Formhack</a>, right?
That's its name?</p>
<p>[16:18] ireade: Yes, so Formhack is a hackable sass-based form reset.
So this is probably, it is actually, one of the first things that I created that was open source. So what it is, is a reset for forms.</p>
<p>[16:37] szabgab: Okay, wait a second.
I looked at my website and you probably know that I have no idea about web design and it's hard for me, so what is a form reset?
What is a reset?</p>
<p>[16:48] ireade: Yeah, let me try.
So when you are creating forms in HTML, forms and everything looks different in different browsers.
So if I just put an input element that says <q>Okay, I want the user to be able to input text here.</q>
If I just drop that into the page, it's going to look different between different browsers.</p>
<p>So a reset, a CSS reset, is basically something that you add to try to normalize the way things look across different browsers.
Because by default, different browsers may add specific CSS rules to specific elements on the page, so you want to add something at the very beginning of your CSS to just say <q>Make sure everything is the same.</q></p>
<p>So forms in particular are quite difficult, because the different browsers, they have a lot more heavy influence on the way these things look, so form elements tend to look much more different between different browsers, more than other elements on the page.
I wanted to create a reset for forms that was also configurable, so instead of just saying <q>Make sure everything is this width, or has no margins, or no paddings, or something like that,</q> it's something that you can actually configure.
As you're doing the resets, you're also defining what you want it to look like as well.
So instead of just a basic reset, it's just something that you can, as you're doing the reset, you can style it the way you want it to be.
That's basically what it is.</p>
<p>[18:34] szabgab: So, just to understand, I'm using Bootstrap, is it something that can work with Bootstrap, or these frameworks, or is it something that you would use, if you don't use any of these frameworks?</p>
<p>[18:50] ireade: It's something that you would use if you don't use them.</p>
<p>Because, so for Bootstrap, they've already defined what the styles are going to look like.
So whereas, what this is, is something where you want to define what you want things to look like.
In Bootstrap, you can tell like buttons always have a certain look, or all these elements have a certain look, but with this, it's kind of for you to say what you want it to look like.</p>
<p>So it's more easy to change things using this, rather than using something like Bootstrap, where all the things are already predefined for you.
Whereas, this gives you the opportunity to make changes much more easily without having to write out the CSS for everything always from scratch.</p>
<p>[19:33] szabgab: And do you have any idea how many people use this?
Or how many websites?
Do you have any feedback ..?</p>
<p>[19:40] ireade: I don't know how many people use it, because it's something that you just include in your projects, when you probably minify your CSS.
I'd probably be able to tell.
But it has almost 300 stars on GitHub now, so I guess that's how many people like it, I don't know how many people use it.</p>
<p>[20:05] szabgab: Yeah, I guess it's usually a lot more are using it than people just clicking on that is an effort that not many people make, and there are not that many people on GitHub either, just using stuff from there.
Yeah, that's really nice and do you have more work on that, too?</p>
<p>[20:26] ireade: Not really, I think that has probably cooled down in terms of things that need to be done.
I think, if people want more features, that's something that can be added.
But for the moment, there's not really anything that needs to be fixed, it's more really just kind of enhancements.</p>
<p>[20:46] szabgab: Nice.
What other plans do you have?
Do you have any specific project plans, something else?</p>
<p>[20:53] ireade: That I'm working on right now?</p>
<p>Lately I've been doing a bunch of work with progressive web apps, actually.
So I've been playing around with how to create them and things like that.
And I think about a month ago, I was giving a talk about progressive web apps and I created this project, which is called <a href="https://github.com/ireade/OfflineFX-Codelab">Offline FX</a>, so it's basically an FX exchange-rate app, but it's a progressive web app, obviously.</p>
<p>So I've been working on that and that's been really interesting.
I demoed how I made it into a progressive web app, so I put the source for that on my GitHub as well, so you can see how you can take a web application and convert it to a progressive web application.</p>
<p>[21:42] szabgab: That's cool.</p>
<p>Okay, it was really very nice to talk to you and very educational about all these projects.
Do you think there are any other subjects that we haven't touched, that you would like to talk about?
Or anything you haven't mentioned?</p>
<p>[22:01] ireade: You can check out my websites, or actually if you can check out my blog, it's called <a href="https://bitsofco.de/">Bits of Code</a>, like I mentioned.
I'm sure there's a bunch of stuff I've done, because I sometimes just feel like working on something, and just staying and just build something, and I'll usually write about it on my blog.
So if you are interested in open source, or just learning about front-end development things, you should definitely check it out.
I write an article once a week and sometimes I talk about projects I'm working on, or sometimes I just write articles on particular HTML, CSS, and JavaScript things.
I try to break things down that are probably, seem like they are very complex, but just the process of breaking it down and explaining exactly how things work, so that's what I do with that.
You can check that out.</p>
<p>[22:53] szabgab: That's great, thank you.
Any shout-out to anyone, before we finish the podcast?</p>
<p>[23:06] ireade: Okay, shout-out to everyone who follows me on <a href="https://twitter.com/ireaderinokun">Twitter</a>.
I'm also quite active on Twitter, so you can always ask me questions, and it's a good place to interact with, not just me, but I think a lot of people in this field tend to interact on Twitter.
It's also just a good place to ask questions to people.</p>
<p>[23:28] szabgab: Yeah, I've noticed that.
I follow you and I see you talk about a lot of interesting stuff, yeah.
I really thank you for coming on the show, it was really great, and I hope to have you in a future episode again.</p>
<p>[23:41] ireade: Thank you.</p>
<p>[23:42] szabgab: Okay, bye bye.</p>
<p>[23:44] ireade: Okay, bye!</p>
<p>[/transcript]</p>
<!--
## Technical info

Recorded on 3 September 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #8: Lynn &#39;Cyrin&#39; Conway on Bundler, RubyGems and Ruby Together</title>
    <summary type="html"><![CDATA[Interview with Lynn 'Cyrin' Conway about her work as a project leader at Ruby Together for Bundler and RubyGems.]]></summary>
    <updated>2016-09-19T08:01:01Z</updated>
    <pubDate>2016-09-19T08:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-8-lynn-cyrin-bundler-rubygems" />
    <id>https://code-maven.com/cmos-8-lynn-cyrin-bundler-rubygems</id>
    <content type="html"><![CDATA[<p>Interview with <a href="http://lynncyrin.me/">Lynn <q>Cyrin</q> Conway</a> about being a project
manager at <a href="https://rubytogether.org/">Ruby Together</a> and deal with
<a href="http://bundler.io/">Bundler</a> and <a href="https://rubygems.org/">RubyGems</a>.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/oJVfQFcjTJs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Lynn &quot;Cyrin&quot; Conway</h2>
<ul>
<li>
<p><a href="http://lynncyrin.me/">Lynn Cyrin</a></p>
</li>
<li>
<p><a href="https://twitter.com/lynncyrin">Twitter @lynncyrin</a></p>
</li>
<li>
<p><a href="https://github.com/lynnco">GitHub</a></p>
</li>
<li>
<p><a href="http://peopleofcolorintech.com/interview/episode-60-lynn-cyrin/">Lynn Cyrin on POCIT</a></p>
</li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/Lynn_Conway">The other Lynn Conway</a></li>
<li><a href="https://rubytogether.org/">Ruby Together</a></li>
<li><a href="http://bundler.io/">Bundler</a></li>
<li><a href="https://rubygems.org/">RubyGems</a></li>
<li><a href="http://www.pyladies.com/">Python Ladies</a></li>
<li><a href="https://www.alterconf.com/">AlterConf</a></li>
<li><a href="http://opensourcebridge.org/">Open Source Bridge</a></li>
<li><a href="https://en.wikipedia.org/wiki/Pip_(package_manager)">pip (Python)</a></li>
<li><a href="https://pypi.python.org/">PyPi, the Python Package Index</a></li>
<li><a href="https://virtualenv.pypa.io/en/stable/">virtualenv (Python)</a></li>
<li><a href="https://rubygems.org/pages/download">gem or RubyGems (the tool you can download)</a></li>
<li><a href="http://jruby.org/">JRuby</a></li>
<li><a href="https://slack.com/">Slack</a></li>
<li><a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a></li>
<li><a href="https://www.npmjs.com/">npm</a></li>
<li><a href="https://twitter.com/indirect">André Arko</a></li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[lynn guest1 Lynn Cyrin]</p>
<p>[00:03] szabgab: Hello there, and welcome to CMOS, the Code Maven Open Source podcast and interview series. I'm your host, Gabor Szabo, and with me is <a href="http://lynncyrin.me/">Lynn &quot;Cyrin&quot; Conway</a>. Hello Lynn, how are you? How are you?</p>
<p>[00:21] lynn: Good, good.</p>
<p>[00:21] szabgab: Good. Before we get on, let's start with your name. I saw you call yourself Lynn &quot;Cyrin&quot; Conway on one hand, but in other places just Lynn Cyrin, can you tell me a little bit about this background?</p>
<p>[00:43] lynn: I would call myself Lynn &quot;Cyrin&quot; Conway everywhere but websites like to not have a proper name field so a lot of it's that. So I picked Lynn first, just independently of my last name, and only changed my first name, not changed my last name. So I changed my first name to Lynn and it ended up Lynn Conway, which coincidentally is also the name of another trans-lesbian web developer. So that was nice, I just ran into that, and I was just, &quot;Oh, well should I change it? No, it's kind of cool to have the same name.&quot;</p>
<p>So I started to try to build a web developer program and I realized that you can't Google me and find me through <q>Lynn Conway,</q> I mean maybe in like 20 years from now, but not right now. So I picked <q>Lynn Cyrin,</q> and within two days of using that, I got the whole front page of Google, so now I'm good. I'm safe, you can find me on the internet.</p>
<p>[01:38] szabgab: Good, so do you have contact with her?</p>
<p>[01:42] lynn: Yes, I have. It took, I don't know, two years of having the name, but eventually one of my advisers said, <q>Oh yeah, do you want to meet <a href="https://en.wikipedia.org/wiki/Lynn_Conway">the other Lynn Conway</a>, I know her?</q> I was, <q>Oh it would be very cool to know the other Lynn Conway!</q> I don't have any significant relationship but I said, <q>Oh yeah, cool, we share all these things and have the same name, that's kind of nice, so, yeah.</q></p>
<p>[02:07] szabgab: That's interesting. Okay, and does she do anything with computers?</p>
<p>[02:12] lynn: Yes, she does something...not like Ruby/Python, I don't know, like Cs/Perl, that type.</p>
<p>[02:23] szabgab: Interesting. Okay so tell me a little about your, you do have tons of stuff, I saw Ruby and Python and all these other things, but how did you get started with programming and open source?</p>
<p>[02:40] lynn: Well, my programming start was, I was in college for a bunch of different engineering degrees and I wasn't too excited about any particular engineering degree. Like I would study Mechanical Engineering, and then Chemical Engineering, and Materials Engineering, and eventually I got to Astronautical Engineering, which is rocket science and I was writing the code that helps guide, launch rockets on their way up to outer space. It was just an assignment, right, because Astronautical Engineering? And it occurred to me that the writing code part was actually much more interesting to me, than getting the rockets to outer space part, and that was coincidentally, also when I started getting into queer and trans stuff.</p>
<p>So I was writing code right about the same time I started getting into queerness stuff and I moved to San Francisco because I'm gay, but also San Francisco is where all the tech is. It was just an accident. I just happened to find myself in San Francisco, because I'm gay, and all of a sudden, that's where all of the tech companies are! And I just learned Python because there's a lot of Python in NASA, so I went there and I started doing Python in a lot of these, there's a lot of work and stuff at the intersection of what I did in AE and coding. So I started going to a lot of these <a href="http://www.pyladies.com/">Python Ladies</a> meetings, or queer people writing whatever. And that's how that started.</p>
<p>Open source didn't come up as naturally, I just ran into an open source repository and I liked the idea of open source, it just appealed to me, like innately, at such a level. Since then I've become this huge open source. I would get all of the conferences I've talked at, except <a href="https://www.alterconf.com/">AlterConf</a>, which is a diversity conference, they've all been like <a href="http://opensourcebridge.org/">Open Source Bridge</a> and other alternate conferences. Because I'm just really about open source, I open source all of my stuff, even stuff that people wouldn't ever want to look at, I just put it open source anyway because, <q>Why not?</q> I don't have the <q>Why would I open source this?,</q> for me it's <q>Give me an explicit reason to not open source this,</q> because otherwise I will.</p>
<p>[05:04] szabgab: Yeah, okay, that's nice. So at least on GitHub you mentioned <a href="https://rubytogether.org/">Ruby Together</a> as sort of your employer, but do you also have a...are they really your employer? Do they pay you, do you have a job, or...?</p>
<p>[05:22] lynn: They are my employer in that I get formally, from the government, an employer and they pay me. Everyone at Ruby Together makes $150 an hour. It's really nice that everyone makes all the same wages, we'll hire a designer and they won't suddenly make less than the programmers, so that's nice. But yeah, Ruby Together pays me to work on <a href="http://bundler.io/">Bundler</a> and <a href="https://rubygems.org/">RubyGems</a>. I also have a bunch of other things that also pay me but RubyGems is my only formal employer at the moment, everything else is crowdfunded or I own it, so...</p>
<p>[05:56] szabgab: Okay, but do you usually work at companies as well, in the last couple of years, or have you stopped since, I don't know, since you left rocket science?</p>
<p>[06:03] lynn: Actually, in my tech career I've done tiny contracting work here and there, where I was never an employee, and I think I have two interview chances that I'm working on right now, and those would be my first company jobs, like 40 hours a week things. And it took me three years to get to the point where I wanted or could have a fulltime job, so... The only other fulltime job I ever had, I was a janitor. So yeah, I haven't done the company-thing much.</p>
<p>[06:41] szabgab: Yeah, well, it's great, I'm quite sure that many companies would want your capabilities, I mean, seeing what you do in all this stuff, open source. Maybe except the part, that they don't want to open source everything you write.</p>
<p>[06:56] lynn: Yeah, I say in interviews, <q>How much of my work can be open sourced?</q> That's always in my interview questions, when I talk to a new company. But yeah, you can see all my code. I feel that as an interview, that's the best advantage of working so much in open source, is that you can show employers, <q>This is specifically what I've written.</q> This is  everything I've written, in my entire career, you know?</p>
<p>[07:22] szabgab: Yeah, I know, I teach various programming languages and stuff, usually for people working at companies, and they always, I'm trying to tell them, <q>If you want to show to the next employer, something that you do, then you have to do something in open source.</q> Because you can't usually share what you do at your company.</p>
<p>[07:47] lynn: Yeah.</p>
<p>[07:49] szabgab: That's nice. So let's, among all the things that you do, we thought that we'd talk about, Bundler, and I really have no idea because I'm coming from the Perl background and Python and some front end, even though you can't see it on my website. But I really have no knowledge about Ruby?</p>
<p>[08:14] lynn: So in the Ruby world, there's Bundler, RubyGems, and RubyGems.org, which are three different organizations with different, they used to have different ownership, Ruby's got to resolve that, but I'll get to that in a second. And there used to be three different groups of people with all different admins, working on three different things that <a href="https://en.wikipedia.org/wiki/Pip_(package_manager)">pip</a> all does, so <a href="https://pypi.python.org/">pip's website</a>, the Python packages website, that's RubyGems.org. There's two different parts, pip doesn't really do anything that Bundler does really, some of Bundler stuff is what <a href="https://virtualenv.pypa.io/en/stable/">virtualenv</a> does and it does some stuff that pip would like to have, but really pip is just RubyGems.</p>
<p>[09:03] szabgab: Wait a second. I know pip, a command called pip in Python, do you talk about the same? Or Ruby has the same names for stuff?</p>
<p>[09:15] lynn: No, I mean, RubyGems is essentially pip.</p>
<p>[09:19] szabgab: Okay.</p>
<p>[09:20] lynn: They have basically the same functionality. Then Bundler has some of the functionality of virtualenv, but they're not equivalent. That's where the equivalence starts to get way different, Ruby has a bunch of different environment tools, that one would use. Anyway, what this specifically is, is that there's RubyGems.org, the website. There's RubyGems, the codebase, which that's the thing that downloads and makes RubyGems for you. And then there's Bundler and that handles your environment, and getting your stuff from your package management file, and it stores all the commands of RubyGems, and sends commands to RubyGems.org, and that's how you get the thing.</p>
<p>So there's three different tools, which finally are being merged a bunch. RubyGems, RubyGems.org, and Bundler all have the same managing organization, in Ruby Together. This used to not be the case. There used to be kind of a warring-factions thing going on between Bundler and RubyGems, it was a mess. Anyway, now someone, one person, owns all three of them, and they're trying to make all of this more easy to understand. Sounds nice.</p>
<p>[10:34] szabgab: Okay, so when you're creating a new package in Ruby, do you also use Bundler to bundle together, or is there another thing that you need for packaging? I guess you upload it to RubyGems, right?</p>
<p>[10:51] lynn: Yeah, I'm pretty sure RubyGems handles all of the new package commands, I'm pretty sure, don't quote me on that particular thing. I'm pretty sure that the new package command Gem maps to RubyGems. RubyGems is mostly that, because RubyGems also handles the Gem hosting part in RubyGems.org, and Bundler doesn't do any hosting whatsoever, so...</p>
<p>[11:20] szabgab: Okay, I think I get it. So what kind of things do you do there? What kind of things are there to do now? These days?</p>
<p>[11:29] lynn: So the good thing is that for the average user, there's essentially nothing you still do, with Bundler or RubyGems, it comes installed, well Bundler doesn't come installed by default, you have to install Bundler itself, but we're working on that, we're working on making Bundler be a default thing. But RubyGems comes with the Ruby installation and you use <a href="https://rubygems.org/pages/download">Gem</a> to install it, and it works like you would expect. That's what happens for most people, there's some edge cases, well actually it's all edge cases from there.</p>
<p>So if you're on Linux and you want to install a simple Gem file with no requirements, no optional dependencies, I mean no requirement groups, no optional dependencies, nothing like that, then everything's fine. But when you start getting into, like you want to have something different on development, than on production, then that's, it gets kind of messy, there's still some features to work out there.</p>
<p>If you have optional requirements, there's actually a feature difference that went out on Bundler, about a week ago, where if you had an optional requirement, it would still automatically require them without you having to tell it to do so. And apparently in the past week, invisibly, that broke. Where now in the optional requirements, you have to explicitly require them.</p>
<p>So it's edge-case things. Also, if you're on anything but Linux, things might just break sometimes. Especially if you're on Java, <a href="http://jruby.org/">JRuby</a> is a really big thing and things in JRuby break Bundler all the time. Like every week, there's a new way that JRuby has broken Bundler.</p>
<p>For most people it's fine, but the more edge-cases you stack on, the more stuff there is to do. I don't actually code, I haven't written a single line of Ruby code for Bundler or RubyGems, I'm the project manager, so my main thing is I have a reactive job. I watch all of the <a href="https://slack.com/">Slack</a> channels, I see what's happening, I report to other people what's happening, I label things, I organize things, and make sure people know what's up, I write the RubyGems monthly updates, I watch all of the Slack channels, all of them, all month. So I have enough information to write the monthly update so everyone else can know what happens, without having to watch every Slack channel. So those sorts of things. I'm basically on GitHub all day. I'm never on command-line and I'm always on GitHub, as my work.</p>
<p>[13:54] szabgab: Oh, that's interesting. Okay, so how do you tell the other people, how do you select what to do or what to work on? How do people decide what to work on? Individually, whatever they think about? Or you, how much do you prioritize the jobs? The tasks?</p>
<p>[14:21] lynn: So the majority of the work, this is becoming only mildly less the case over time, as Ruby Together, the organization, gets more money to pay people to work on Bundler and RubyGems, but most of the work on Bundler and RubyGems, open source contributors can just decide if they want to work on it. Which makes project management really important because when you have employees, you make them work because you pay them, but when you have open source contributors, they can just poof!</p>
<p>So I have the great job of making sure the open source contributors have a nice time contributing, because if they don't have a nice time, they can just leave, right? So that's how most of the work happens, I do my best to make sure that all of the issues are well-sorted, I try to respond to the more-irate users or point them to where they need to be, when I can, when I have time and hours in the day. Those are things I do to try to make sure that the non-paid contributors can do their best and they aren't having lots of issues, and they get turned off by the source code, and those sorts of things. So that's my general job as project manager, and that's how I guide people to the work that I want them to do.</p>
<p>[15:40] szabgab: And your main communication channels are GitHub, Slack, anything else?</p>
<p>[15:46] lynn: No, I spend most of my time switching between GitHub and Slack.</p>
<p>[15:54] szabgab: So no <a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a>, for example?</p>
<p>[15:54] lynn: No, there is an IRC channel that nobody uses. I'm not long into because not enough happens on it for me to justify adding it to my list of things to watch, so it's really just Slack at this point. I don't know when it became that, that it's only Slack, but now it is.</p>
<p>[16:13] szabgab: Okay, I see, that's great. Okay, I think I've run out of questions about this. Actually not, there is the Ruby Together, so can you tell a little bit more about the organization, how it works, and how you got together?</p>
<p>[16:36] lynn: So Ruby Together is really, really similar to <a href="https://www.npmjs.com/">npm</a>, another package manager, if anybody knows what npm, Ruby Together is functionally identical. I think their big difference is npm is like a huge start-up, I don't know how much money it makes, I don't know how much it's worth, but compared to Ruby Together, npm is enormous.</p>
<p>Ruby Together is, I think this is actually how it's legally set up, Ruby Together is basically <a href="https://twitter.com/indirect">André</a>, he's the director of Ruby Together and he's a bunch of other things. So André used to be working on Bundler for free, bundler and RubyGems for free, and he was just working on it, right, because it's open source and he had time, so he was just working on Bundler and RubyGems.</p>
<p>And it, this was back in the end of the warring-faction days, RubyGems versus Bundler days. RubyGems seemed to push something that broke Bundler's code, almost on purpose, and they wouldn't ask, they wouldn't tell them first. So suddenly people could use RubyGems but they couldn't use Bundler, and so Bundler would have to catch up, or the Bundler people would make RubyGems, like this kept happening back and forth.</p>
<p>And then André started working on both of them and something happened, where RubyGems was down for three days, and a lot of big companies lost a lot of money, and André was the one who got it back up. About a week after that, people started being, <q>Hey, could we pay you money to make sure you're always around, so when it goes down, it's just down for a few hours, not three days?</q> Three days without being able to install any new packages is huge, <q>What, the package-manager is down?</q> That doesn't even make any sense. That's definitely something people wanted to pay for, so it just started almost by accident, with people going to my boss with, <q>Hey, we'll give you money for this.</q></p>
<p>So he got that enough that he made a non-profit out of it and now there's six of us, we go, we help out, we help out on a few other things like smaller libraries, there's some people working on <a href="https://github.com/vcr/vcr">VCR</a>, and a bunch of little tools. But mostly it was that people got really tired of RubyGems and Bundler going down, so they started paying money to André, and then André made a non-profit, and so now this is Ruby Together.</p>
<p>[19:08] szabgab: Okay. Thank you very much. A lot of things I've learned today. Do you have anything we haven't mentioned that you would like to talk about or would you like to shout-out to some people, or...?</p>
<p>[19:24] lynn: I can't think of anything in particular, I mentioned all of the big stuff. There's my other work but this was just my one of three jobs. I could do a half-hour about my other jobs, but I'm not going to do that. For the scope of this work, this is most of the stuff that people will want to know about.</p>
<p>[19:43] szabgab: Okay, great, thank you again for coming on the show and hopefully see you at another episode!</p>
<p>[19:51] lynn: Yeah, cool, thank you.</p>
<p>[19:52] szabgab: Bye bye.</p>
<p>[19:53] lynn: Bye.</p>
<p>[/transcript]</p>
<!--

## Technical info

Recorded on 3 September 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>

-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #7: Obinwanne Hill on RestiveJS</title>
    <summary type="html"><![CDATA[Interview with Obinwanne Hill about RestiveJS, the JQuery plugin that helps creating responsive web sites without using Media Query.]]></summary>
    <updated>2016-09-17T14:01:01Z</updated>
    <pubDate>2016-09-17T14:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-7-obinwanne-hill-restivejs" />
    <id>https://code-maven.com/cmos-7-obinwanne-hill-restivejs</id>
    <content type="html"><![CDATA[<p>Interview with <a href="http://www.obihill.com/">Obinwanne Hill</a> on
<a href="http://www.restivejs.com/">RestiveJS</a> a JQuery plugin to help create
responsive web sites without having to deal with Media Query.</p>
<p>He also told how he got into web programming in Nigeria in the '90s.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/7JYwWOVeB9w" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Obinwanne Hill</h2>
<ul>
<li><a href="http://www.obihill.com/">Obinwanne Hill</a></li>
<li><a href="https://twitter.com/ObiHill">Twitter @ObiHill</a></li>
<li><a href="https://github.com/obihill">GitHub</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="http://www.restivejs.com/">RestiveJS home page</a></p>
</li>
<li>
<p><a href="https://github.com/obihill/restive.js">RestiveJS on GitHub</a></p>
</li>
<li>
<p><a href="http://www.restive.io/">Restive.io the company</a></p>
</li>
<li>
<p><a href="https://jquery.com/">jQuery</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/Responsive_web_design">Responsive web design</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/Media_queries">Media Query</a></p>
</li>
<li>
<p><a href="http://www.lukew.com/about/">Luke Wroblewski</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS</a></p>
</li>
<li>
<p><a href="https://mobile.twitter.com/lukew/status/507880029737328640">Device lab of Luke Wroblewski</a></p>
</li>
<li>
<p><a href="https://speckyboy.com/">SpeckyBoy</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[obihill guest1 Obinwanne Hill]</p>
<p>[00:02] szabgab: Hello there, and welcome to CMOS, the Code Maven Open Source podcast and interview series, where we are talking about interesting open source projects, with interesting people.
I'm your host, Gabor Szabo, and with me is, and I really hope I pronounce your name correctly and please correct me afterwards, <a href="http://www.obihill.com/">Obinwanne Hill</a>, right?
From <a href="http://www.restivejs.com/">RestiveJS</a>. How are you?</p>
<p>[00:28] obihill: Yes, that's correct, Obinwanne Hill. You almost got it, so that's fine.</p>
<p>[00:34] szabgab: I will practice, hopefully I'll get it improved, by next time we're talking.</p>
<p>[00:40] obihill: Okay, no problem.</p>
<p>[00:41] szabgab: Okay, so please tell me a little bit about yourself</p>
<p>[00:47] obihill: Okay, well I am a web designer/developer. Actually I started out web design before I went into development, with PHP. JavaScript actually came much later.
I started JavaScript about back in 2010, and I started <a href="http://www.restive.io/">Restive</a> back in 2013, and we've just been doing web design, web development, so this is for a diverse set of clients, but what we've also been trying to do is to develop techniques, in web design and development.</p>
<p>Basically just things, I'm trying to develop like different ways of doing things online, doing things on the web, so that's where the idea for <a href="https://github.com/obihill/restive.js">RestiveJS</a>, which was an open source project, it's actually a designer-friendly toolkit for building <a href="https://en.wikipedia.org/wiki/Responsive_web_design">responsive websites</a>, which is based on <a href="https://jquery.com/">jQuery</a>.
So that's where the idea for that came up. So we'll be using that to build websites and we've been happy that thousands of developers around the world and some pretty impressive companies are also using the plugin on their website. So it's been pretty interesting, especially since now we're trying to re-gig the plugin and also launch a couple of new projects later in the year, next year.</p>
<p>So it's been pretty busy and you know, it's been fun, the web is really changing, it's getting a lot more complicated but we're doing our best to try and simplify things.</p>
<p>[02:48] szabgab: You're running a little bit ahead now, of us. I wanted to talk a little bit more about your background and how did you get into programming and ...?</p>
<p>[03:05] obihill: Okay, well actually, if I could go all the way back to my teenage years, I guess I always been fascinated with technology, especially when the internet hit.
I guess my first interaction was probably in the mid-90s, back when I started college.
So the internet was pretty much just breaking there. And growing up in Nigeria, these services weren't exactly very accessible.
I mean, you could only get them in big offices, so it was pretty difficult to get access but I was lucky that the place where I did, through an internship was with one of my Dad's friends at the time, who had a telecommunications consultancy company, so they had an internet connection.</p>
<p>I was really inspired by how the web works and the promise that I guess it could have, the promise that we see today, the web is everywhere.
I was inspired to learn how everything worked, behind the scenes, because you see web pages and you're, <q>How did they build this? How did all this come together?</q>
So I was really interested to know the nuts and bolts of what web pages were made of, so that's what actually sparked my interest in learning HTML.
So I got a couple of books, just started reading, reading up on tags, a few years later getting into CSS, and then a few years after that, getting into PHP.</p>
<p>So it's just been an iterative process of learning technologies that you need to build websites that could do stuff, not just putting up a web page, but functional websites.
Like e-commerce websites, both the front-end and the back. So it's just been a journey of learning and trying to understand all the technologies that make up a functional website.</p>
<p>[05:49] szabgab: So you started with an internship but it wasn't that yet? What kind of things...?</p>
<p>[05:57] obihill: No, it wasn't web yet. It was more like, okay this is the internet, and the internet, there's so many aspects to it.
There's the network aspect, there's tons of stuff that make up the internet. At the time, I was looking more at the network aspect.
You know, Cisco was pretty hot as a company at that time and everybody was trying to get Cisco certifications at the time, so I was looking into that as well.
But then I discovered that the networking wasn't really my thing, I wanted to be more front-facing.
So that's where the whole thing with web pages came into it, and that's where HTML came into it.
So really you could get books, on virtually any aspect you wanted.
If you wanted to go the Cisco route, you could get a Cisco cert book, if you wanted TCP/IP, you could get that, if you wanted HTML, so there were pretty good resources available at the time.
Mostly books, so it just depended on you figuring out what aspect you wanted to be part of.</p>
<p>[07:21] szabgab: And then did you get a job in web programming or this part..?</p>
<p>[07:26] obihill: Actually, what I did was I started a company in 2004, and that was just a way of,
<q>Okay, I'm learning these skills, let me put these skills to use and provide services for small businesses in the area.</q>
So that's actually how that came about, it was me, trying to use the skills I'd learned to provide services for small businesses.
So that's, I was learning at the same time and also providing the service at the same time.</p>
<p>[08:05] szabgab: So you were building websites, I guess?</p>
<p>[08:09] obihill: Yes, I was building websites, small business websites.
I was also, websites weren't always the thing at the time. Sometimes some clients, all they wanted was something as simple as email.
You know, <q>We don't need a website, we just want professional email address, @ourcompany.com kind of thing.</q>
So I just said okay, fine, instead of focussing only on websites, I'll also provide web-hosting as well. So yeah, the company was pretty much a web-hosting/websites company.</p>
<p>[08:47] szabgab: Okay, and so did that grow, do you have employees, or are you self-employed?</p>
<p>[08:54] obihill: Yeah, we've had a couple of employees but that business didn't actually do, it didn't do great, basically because of scalability.
I mean, there wasn't, it was all bootstrapped, there wasn't any external funding or anything to accelerate the business.
So basically everything we were making from revenue, and anyone will tell you that that's not the best way to start a company.
I mean, even now I'm still a lot focussed on the bootstrap nature of starting a business.
Even though a lot of people are, first thing they do, they got the idea, then they run out and go and start to try to get venture capital.</p>
<p>I tried to spend a little bit of time perfecting the product.
Maybe a little too much time. I'm trying to change my attitude towards that now, I'm trying to come earlier and say,
<q>Hey, we're working on this, do you think it's interesting?</q> And trying to see whether there's an opportunity for getting some capital, but I think it's important to focus on the product and try to get some initial customers.
Once you do that, there's some validation that what you're doing actually matters, and is a service, or is a product, that people actually want.
So once you get those first few customers, I think that should be the point where you should accelerate and say, <q>Let's try to get capital.</q></p>
<p>So that business didn't actually scale so well. It's still active but I'm in the process of re-integrating it into the business I'm doing now, because a lot of the things we're doing with that are complementary to Restive. So I'm trying to just re-integrate that into Restive and take it from there.</p>
<p>[11:14] szabgab: So, let's go forward to Restive. You started it a couple of years ago and why did you start it? What kind of problems have you encountered that you wanted to solve?</p>
<p>[11:25] obihill: Actually the reason that I started Restive was, in 2012 I was trying, responsive web design was a growing methodology.
Mobile devices were really growing, really fast. And websites, you know, weren't coping.
Websites were having a hard time, or users were having a hard time using websites, which were not customized for mobile devices.
So around 2011, 2012, I was trying to learn responsive web design and how everything worked and I read a couple of articles and I was trying to get around all the methodologies,
like <a href="https://en.wikipedia.org/wiki/Media_queries">media queries</a> and all that, and I just ended up becoming really frustrated at the workflow, because there was way too much testing, for one, testing that was required to build a responsive website was ridiculous.
I mean, there is <a href="https://mobile.twitter.com/lukew/status/507880029737328640">this Tweet</a> from <a href="http://www.lukew.com/about/">Luke Wroblewski</a>, if I've got his name right, that showed all these devices that you have to test your website on, and there were probably 20 or 30, so that frustrated me and I was trying to find an easier way to build a website, a responsive website. And that's really where the idea for RestiveJS came about.</p>
<p>I just want to say before I forget, this website is going to have to adapt to different devices.
So I gave you a way to keep track of the devices that this website is going to be on.
So if this website is being accessed by a phone, I want to be able to know that instantly.
If it's a tablet, I want to be able to know that instantly. If it's in portrait orientation, I want to be able to know that instantly.
Some of these notifications, or the status of the websites, while they were on these devices, was not commonplace.
I mean, it was, you had to use media queries or nothing, and I just, I was just a bit frustrated with that.
So I just thought I'd build a program, just to help me personally, build a better website, and I did that. And I decided, <q>Hey, if I'm having these problems, some other developers might also be frustrated as well.</q> So I just put the code up on GitHub and reached out to a couple of blogs, <a href="https://speckyboy.com/">SpeckyBoy</a> was one of them, to get started writing a couple of articles, and it just went off from there.</p>
<p>So I got a couple of responses from different people who wanted to build websites and said, <q>I read about this and was thinking if you could help out with the websites.</q>
So that came and that brought another idea. I was like, <q>Hey, if people are having a problem with their responsive website, or with the website that they want to make responsive, I could provide services to help them out.</q>
So I just said, <q>Okay, why not just start a company to do that,</q> so that's pretty much how the idea for <a href="http://www.restive.io/">Restive</a> came about.</p>
<p>It's still bootstrapped, there's no outside capital, it's pretty much just me and a remote team, every now and then, doing things, but we're looking at launching a couple of interesting products this year and very early next year.
So hopefully, once we do that, we'll see if we could get some other outside capital involved, if possible, and try to grow the company from there.</p>
<p>[16:11] szabgab: So there is the RestiveJS, which is the open source, you said plugin? Is it a plugin to jQuery? Or..?</p>
<p>[16:22] obihill: Yeah, it's actually, right now it's a jQuery plugin but we've completely changed, maybe we can talk about that in this time later, but we've rebuilt it from scratch, and we've actually built a second toolkit, which is targeted more at people who want to get more out of <a href="https://en.wikipedia.org/wiki/Cascading_Style_Sheets">CSS</a>. It's a bit difficult to explain, it's always better when you're able to demo, <q>Okay, this is what this toolkit is and this is what it's about.</q></p>
<p>But basically, we're trying to help web designers and developers build better websites, in less time, and with less stress. Because today, building a website is still incredibly complicated.
Even for experienced web designers and experienced web developers, it's still really complicated to build a website that is responsive, and has good performance characteristics.
It's really a tough thing to do, so we want to simplify that process for designers, and also for developers as well.</p>
<p>So these are the two main groups we're trying to target with the plugin.
It's also going to be a free and open source plugin, so anyone can access it for free and use it.
But there's a couple of things we're trying to build around the plugins and around some of the techniques that we've developed thus far, that are also commercial, but open source is important to me, because I personally have used tons of open source technology.
I mean, MySQL, PHP, jQuery, there's tons of open source tech out there, that really has been beneficial and inspirational to me.
So I feel it's important to also contribute as well. If you're building something that helps you and makes your life easier, I think it's only right to have that technology to be accessible to every developer, anywhere they might be. So I think that just makes the ecosystem much better and stronger.</p>
<p>[19:01] szabgab: So do I understand it, that this second plugin is not available on GitHub yet, right?</p>
<p>[19:08] obihill: No, it's not available on GitHub yet but it will be very early next month.
It's actually built, in fact it's actually running on the <a href="http://www.restivejs.com/">RestiveJS website</a> right now, so we're kind of testing it, dogfooding it whether it's ready, we're really happy with it, I'm really impressed with what we've been able to accomplish with it.
But this time, we want to...the last time, with RestiveJS, we didn't do so well on the content side of things, like the documentation wasn't fantastic, you know, there were tons of tutorials that I had plans to do that I didn't get around to doing, so this time I want to make good this time.</p>
<p>I want to make sure that the documentation is really good, that we have tutorials.
We have 200+ tutorials planned for both toolkits combined, so just enough content for developers to really pore over and access and get how to use the toolkit.
So we're just trying to learn from the mistakes we made the last time, that's why it's taking this long. But really, it's built, it's working, we just want to take our time to really test it and just to make sure it works really well, because nobody likes, even if the software is open source, if there's tons of bugs in it.
I want to be able to use it, and know that someone has tested this, and it's working, and it's doing what was intended.</p>
<p>[21:03] szabgab: So just for closing the interview, how can people get started or where can people go to get started with RestiveJS and how can they maybe help you, if there's any way they can help you?</p>
<p>[21:19] obihill: Okay, well, we actually just redesigned the website. It's the same domain we've used before, I mean you can get access to it at <a href="http://www.restivejs.com/">RestiveJS.com</a> and there's a link to the <a href="https://github.com/obihill/restive.js">GitHub repo</a> right on the home page, so they can start playing with that.
Because when the next toolkit comes out, it's going to be much easier to use, if you're familiar with RestiveJS and why it exists.
So that's the website they can get access to the toolkit.
They can also go to <a href="http://www.restive.io/">Restive.io</a>, which is the website for the rest of the company and there's some more information on some of the products we're working on.
So we definitely appreciate the feedback, if there are any ideas for how we can improve or what else developers might have some issues with, we'd definitely like to hear what problems they're having today and see if we could fix that, with the toolkits we already have, or maybe something new.
But we're working on a couple of things, that I think designers and developers would find really useful.</p>
<p>[23:00] szabgab: Well, thank you very much. Do you have any things that we haven't mentioned earlier that you would like to mention? Or shout-outs to some people?</p>
<p>[23:11] obihill: Well, I'd just like to thank the web community, any one working on any open source products or projects, we don't really recognize these people, you know.
They're behind funny advertise, and probably in a place like GitHub that not everybody visits, I think it's only fair to, I'm inspired by a lot of projects that I see everyday and people are just helping out, not asking for anything, and just trying every day, just trying to put something out there to help someone else. So I'm really appreciative, too.</p>
<p>And I also personally, I'm trying to do this to help all other developers, just like I've been helped, so it's just a pay-it-forward kind of thing. So shout-out to the open source community and everyone working on a project in the open source tech.</p>
<p>[24:20] szabgab: Well thank you very much, and thank you for coming on to the interview.</p>
<p>[24:25] obihill: Okay, thank you. Appreciate it.</p>
<p>[24:27] szabgab: Okay, bye bye.</p>
<p>[24:28] obihill: Bye.</p>
<p>[/transcript]</p>
<!--

## Technical info

Recorded on 15 September 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>

-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Flight ticket vendor for low-cost flights</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-09-16T22:30:01Z</updated>
    <pubDate>2016-09-16T22:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/flight-ticket-vendor" />
    <id>https://code-maven.com/flight-ticket-vendor</id>
    <content type="html"><![CDATA[<p>Let's create a Web Application for flight ticket vendor as one of the <a href="/exercises">projects</a>.</p>
<p>As a model we can look at some of the features available at <a href="https://wizzair.com/">WizzAir</a> or
at <a href="http://expedia.com/">Expedia</a>.</p>
<h2 class="title is-4">Database:</h2>
<ol>
<li>Airports: Each airport has a code, a city name, a country name, and a timezone represented as the offset from UTC.</li>
<li>Flights. Each flight has a flight code, a source airport, and a destination airport.  A departure time (at the timezone of the airport) a length of flight, a price in USD and a number of available seats.  This number will be 0 in some of the cases.</li>
</ol>
<p>When the user visits the website she needs to select a &quot;From&quot; airport and a &quot;To&quot; airport.
Once a &quot;From&quot; is selected the choices in the destination should be limited
to the cities to which there is a direct flight in the database.</p>
<p>Once the &quot;From&quot; and &quot;To&quot; are selected, the user needs to select a &quot;Departure date&quot; and optionally a &quot;Return date&quot;.
When the user clicks on &quot;Search&quot;, show the available flights on the given dates.</p>
<p>Provide an option to see the N days. If N=3 show the day before and the day after the selected dates.
If there is a flight but there are no more seats left, show &quot;Sold out&quot;.</p>
<h2 class="title is-4">Views</h2>
<ol>
<li>
<p>Show many dates around the current date, but show only the prices and when the user clicks through,
only then show the details of the flight.</p>
</li>
<li>
<p>Show few dates but also show the details of the flight (departure time, arrival time)</p>
</li>
</ol>
<h2 class="title is-4">Increase complexity:</h2>
<ul>
<li>Allow the user to select the number of passangers and show the information using that number. (For now, don't deal with different ages.)</li>
<li>Each flight has several buckets of seats at different prices.
Every time we show the cheapest available.<br>
So for example we assume that every airplane can hold 180 passangers we might have the following buckets:
60 seats for $80, 50 searts for $140, 40 seats for $200, 20 seats for $300, and 10 seats for $500.<br>
If 168 seats are taken and the user asks for 3 tickets, show 2 tickets for $300 and one ticket for $500.</li>
</ul>
<h2 class="title is-4">Options:</h2>
<ol>
<li>
<p>Show average ticket prices (interesting when not all the tickets are in the same bucket).</p>
</li>
<li>
<p>Show total ticket prices for all the passangers.</p>
</li>
</ol>
<pre><code>From To Date   # Adults # Children (0-17)
Round Trip / One Way / Multiple Destination
(Each flight has a From, To, Date)

Direct flights
Flights with 1  or 2 (or more?) stops.
Data from multiple Airlines
</code></pre>
<h2 class="title is-4">Sample Data</h2>
<p>There are several organizations that provide real flight data via an API. These could be used
for getting real data.</p>
<ul>
<li><a href="https://developers.google.com/qpx-express/">QPX Express API</a></li>
<li><a href="http://business.skyscanner.net/">SkyScanner</a></li>
<li><a href="https://developer.sabre.com/">Sabre</a></li>
</ul>
<p>I've also started to put together some random data that could be loaded in a database and used:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/airports.csv">examples/data/airports.csv</a></strong></p>
<pre><code class="language-csv">code;city;country;timezone
BUD;Budapest;Hungary;+2
LTN;London Luton;UK;0
IBZ;Ibiza;Spain;+1

</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/flights.csv">examples/data/flights.csv</a></strong></p>
<pre><code class="language-csv">code;from;to;departure;length;price,tickets
CM 2201;BUD;LTN;2016-05-29 06:00;2:35;80;20
CM 2203;BUD;LTN;2016-05-29 09:00;2:35;80;17
CM 2205;BUD;LTN;2016-05-29 12:20;2:35;100;0
CM 2201;BUD;LTN;2016-05-30 06:00;2:35;100;3
CM 2203;BUD;LTN;2016-05-30 09:00;2:35;120;5
CM 2205;BUD;LTN;2016-05-30 12:20;2:35;80;5
CM 2201;BUD;LTN;2016-05-31 06:00;2:35;80;5
CM 2203;BUD;LTN;2016-05-31 09:00;2:35;160;5
CM 2205;BUD;LTN;2016-05-31 12:20;2:35;100;5

CM 2202;LTN;BUD;2016-06-10 08:10;2:25;120;5
CM 2204;LTN;BUD;2016-06-10 11:10;2:25;160;5
CM 2206;LTN;BUD;2016-06-10 14:30;2:25;100;5
CM 2202;LTN;BUD;2016-06-11 08:10;2:25;180;5
CM 2204;LTN;BUD;2016-06-11 11:10;2:25;200;0
CM 2206;LTN;BUD;2016-06-11 14:30;2:25;80;5
CM 2202;LTN;BUD;2016-06-12 08:10;2:25;180;5
CM 2204;LTN;BUD;2016-06-12 11:10;2:25;200;5
CM 2206;LTN;BUD;2016-06-12 14:30;2:25;80;5

CM 1101;BUD;IBZ;2016-06-13 21:25;3:50;150;6
CM 1101;BUD;IBZ;2016-06-20 21:25;3:50;150;6
CM 1101;BUD;IBZ;2016-06-27 21:25;3:50;100;6

CM 1101;IBZ;BUD;2016-06-14 00:55;3:40;300;6
CM 1101;IBZ;BUD;2016-06-21 00:55;3:40;220;6
CM 1101;IBZ;BUD;2016-06-28 00:55;3:40;220;6


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>TODO list</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-09-10T17:00:01Z</updated>
    <pubDate>2016-09-10T17:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/todo" />
    <id>https://code-maven.com/todo</id>
    <content type="html"><![CDATA[<p>Creating a TODO list is a fairly standard exercise soon after one have created a <a href="/exercise-web-hello-world">web based Hello World</a>
and an <a href="/exercise-web-echo">web based echo</a>. Let's describe the task here and see how what interesting features we might include.</p>
<p>See other <a href="/exercises">projects and exercises</a>.</p>
<h2 class="title is-4">Simple TODO</h2>
<p>Probably the simplest version of the TODO list has a single string which is the descripton of the task.
In this version we can add a task, remove a task and list all the tasks. We can even add a feature to search among the tasks
to display only the onese that match a certain substring.</p>
<p>We can assume that each task is a single line of text (without newlines in it). This way we can save the tasks in a simple text file
where each row is a task. There is no need for a database.</p>
<p>The problem might arise if we type in the exact same task twice. We might want to make sure this does not happen.</p>
<h2 class="title is-4">Use and ID, make the title changeable</h2>
<p>A slight improvement is to use a unique number as the ID of each task. This usually can be a counter starting from 1.
The advantage is that it is easr to refer to a task by ID which will be fixed during the life of the task while we might
change the title of the task. Having and ID and a title can still easily be stored in a single <a href="/csv">CSV file</a>.
Each row will have two fields, the first one is the id, the second one is the title.</p>
<p>The problem which might, or might not bother you is that we need a way to know what is the next id to allocate.</p>
<p>We could just take the biggest ID available and add one, but if we delete the task that had the highest number and then
we add another task then we'll be using the same id we already used. For some cases this might not be a problem, but
if we have URLs build using the ID, or otherwise there is some place where those ids are remembered, then someone could
try to access an already deleted item. In such case it would probably make more sense to give a &quot;not found&quot; error, than to return
an unrelated task that happened to receive the same id.</p>
<p>So we either need to make the CSV file irregular and reuse one of the rows to store the &quot;largest id ever used&quot;, or
we need to have some other file to store that number.</p>
<p>This already starts to make the &quot;database&quot; a bit too complex.</p>
<p>For such case I'd probably either use some other file format (e.g. <a href="/json">JSON</a>
or <a href="/yaml">YAML</a>), or a real database, such as <a href="https://www.sqlite.org/">SQLite</a>.</p>
<p>For SQLite case here is a sample code for creating the table:</p>
<pre><code>CREATE TABLE tasks (
    id      INTEGER  PRIMARY KEY,
    title   VARCHAR(255)
);
</code></pre>
<p>Using SQLite, the id will be automaticlly incremented every time we add a new entry and we can use the id
to identify the task that need to be updated when editing the title.</p>
<h2 class="title is-4">Details, date, and status</h2>
<p>If we would like to improve the application evan further we might want to add a few more fields.</p>
<p><code>details</code> could be an extensive description of the task.</p>
<p><code>created</code> could hold the date when the task was created. If we use the auto-incrementing id
then we could alread use that to sort the items by creationg time, but we can't tell if an item
is 1 day or 1 year old. So having a creation date can be useful.</p>
<p><code>done</code> Instead of deleting tasks that were finished, you might want to mark
them as &quot;done&quot;. For this we could use a <code>BOOLEAN</code> type (even though types don't really exist in SQLite).</p>
<p><code>status</code> A probably even better solution might be to have a column called <code>status</code> that can have different
value such as &quot;waiting&quot;, &quot;on hold&quot;, &quot;in progress&quot;, or &quot;done&quot; to further fine-tune the status of the tasks.</p>
<p><code>due</code> Even more imprtant than the start date you might want to have a dead-line, or a due-date.</p>
<p><code>priority</code> When deciding which tasks to do you will need to take in account the due date, but even then you might have
a few competing tasks. Setting a prioroty level will make it easier to decide.</p>
<pre><code>CREATE TABLE tasks (
    id       INTEGER  PRIMARY KEY,
    title    VARCHAR(255),
    details  BLOB,
    created  DATE     default date('now'),
    due      DATE,
    status   BOOLEAN  default 'waiting',
    priority INTEGER
);
</code></pre>
<h2 class="title is-4">Remember the Milk</h2>
<p>If you need more ideas what to include in your TODO list, you can always check out
<a href="https://www.rememberthemilk.com/">Remember the Milk</a> which is one of the best TODO applications.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #6: Tally Barak on GraphQL</title>
    <summary type="html"><![CDATA[Interview with Tally Barak about GrahpQL being the next big protocol after SOAP and REST.]]></summary>
    <updated>2016-09-10T11:01:01Z</updated>
    <pubDate>2016-09-10T11:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-6-tally-barak-graphql" />
    <id>https://code-maven.com/cmos-6-tally-barak-graphql</id>
    <content type="html"><![CDATA[<p>Interview with <a href="http://www.morffy.com">Tally Barak</a> on how a 13 year old girl inspired her to get into programming. Getting back to programming after a 15 year long break. The impact of GitHub and Open Source.</p>
<p>Our main subject however is <a href="http://graphql.org/">GraphQL</a> being the next big thing after SOAP and REST.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/Bd6A9TdGhm0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Tally Barak</h2>
<ul>
<li><a href="https://github.com/Tallyb">GitHub</a></li>
<li><a href="https://www.linkedin.com/in/tallybarak">LinkedIN</a></li>
<li><a href="https://twitter.com/tally_b">@tally_b</a></li>
<li><a href="http://www.morffy.com">Tally Barak</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li><a href="http://github.com/">GitHub</a></li>
<li><a href="http://stackoverflow.com/">StackOverflow</a></li>
<li><a href="https://en.wikipedia.org/wiki/Magic_Software_Enterprises">Magic</a></li>
<li><a href="https://en.wikipedia.org/wiki/PowerBuilder">PowerBuilder</a></li>
<li><a href="https://nodejs.org/">Node</a></li>
<li><a href="https://angularjs.org/">Angular</a></li>
<li><a href="https://www.meteor.com/">Meteor</a></li>
<li><a href="http://www.angular-meteor.com/">Angular-Meteor</a></li>
<li><a href="https://github.com/apollostack/apollo-server">Apollo Server</a></li>
<li><a href="http://www.apollostack.com/">Apollo Stack</a></li>
<li><a href="http://graphql.org/">GraphQL</a></li>
<li><a href="https://github.com/chentsulin/awesome-graphql">awesome-graphql</a></li>
<li><a href="https://en.wikipedia.org/wiki/Representational_state_transfer">REST API</a></li>
<li><a href="https://en.wikipedia.org/wiki/Ajax_(programming)">Ajax</a></li>
<li><a href="https://www.meteor.com/company">MDG - Meteor Development Group</a></li>
<li><a href="https://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a></li>
<li><a href="https://en.wikipedia.org/wiki/SOAP">SOAP</a></li>
<li><a href="https://facebook.github.io/relay/">Relay</a></li>
<li><a href="https://www.youtube.com/watch?v=UBGzsb2UkeY">Zero to GraphQL in 30 Minutes – Steven Luscher</a></li>
<li><a href="https://learngraphql.com/">Learn GraphQL</a></li>
<li><a href="https://www.getpostman.com/">Postman</a> in the REST world. <a href="https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en">Chrome extension</a></li>
<li><a href="https://www.dreamfactory.com/">Dream Factory</a></li>
<li><a href="https://lookback.io/">Lookback</a></li>
</ul>
<!--
cuts: 3:21 14:46 18:45 
-->
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[tally guest1 Tally Barak]</p>
<p>[00:02] szabgab: Hi there and welcome to the CMOS, the Code Maven Open Source podcast and interview series, where you can learn about interesting projects in terms of open source projects, from interesting people, who are either using them or contributing to them directly.</p>
<p>I'm your host, Gabor Szabo, and with me is <a href="http://www.morffy.com">Tally Barak</a>. Hi Tally, how are you?</p>
<p>[00:24] tally: Hi, how are you?</p>
<p>[00:25] szabgab:  I'm really happy to have you here, on the show, because we met a couple of times and I've heard a couple of your talks and they were always really interesting. So I'm quite excited to learn a little bit more about you and some projects that you're interested in.</p>
<p>[00:42] tally: Okay, cool.</p>
<p>[00:44] szabgab: Please tell me a little bit of your background, so other people who are either listening or watching this video feed, and don't know about you. How did you get into programming, how did you get to where you are now?</p>
<p>[00:56] tally: Just like those actors and dancers that say, that I didn't pick my profession, the profession picked me, I think I have the same story about programming. I was very young when I was traveling and stopping somewhere, and there was, well I'm not that young, so that was back just when personal computers started, in fact. And I was standing by some girl, girl, important to note, and she wrote two lines of code in Basic, and I still remember this feeling, that I stood there at the age of 13, fascinated by what she did. And that was the moment that I realized, this is what I'm going to do for life.</p>
<p>And it was like that. So it's many, many years now, since I started programming. I did that as a hobby, as a kid, later on as my military service which is compulsory in Israel, later on as my profession. But the interesting twist here is, that along those years, I moved from pure programming into more management, products, other things, consulting for large firms about architecture, all those surrounding areas around programming. For about 15 years, I wasn't really doing pure programming, at the time.</p>
<p>So we are talking about some time back at the end of the millennium, the previous millennium, that I stopped programming. About 2.5 years ago, I got this urge again, to go back to code. A few things have changed, I was doing some other things, and then I realized, <q>Why shouldn't I go back and start doing that?</q></p>
<p>I came back to a totally different world, because it was, and especially the two things that are different from 15 or 17 years ago, we can call them <a href="http://github.com/">GitHub</a> and <a href="http://stackoverflow.com/">StackOverflow</a>. That's the one thing that changed all the  programming experience for everyone, the GitHub with all the open source projects, and StackOverflow with all the questions, that you just post your <q>Guys, guys, I don't know what I'm doing wrong here!</q> and then someone says <q>Oh, no problem,  you are missing a semi-colon</q> or <q>You should just call it A instead of B</q> or something.</p>
<p>For me, that was an amazing experience and one that I said <q>I want to be part of it.</q> And since, which is for some time now, I am asking and answering on StackOverflow and various forums, helping with some open source project, and that sort of things. So yeah, that's how I got here, to be a programmer, female, not so young, which I think is pretty rare. I mean it's not very common for sure, I'm not your typical 25 years old, male.</p>
<p>Yeah, I know you're not 25 as well.</p>
<p>[04:50] szabgab: Yeah, neither I am 25.</p>
<p>[04:51] tally: I just found for the first time.</p>
<p>[04:55] szabgab: Anyway, this is interesting, what you said, because it is a little bit how, on one hand, when someone is growing up, and then the people around that person, see that person always more or less the same, they don't notice how the person changes. Because they are always there, and then someone sees that other person only once a year, or once every 15 years, then you can suddenly change. <q>How did you grow so fast?</q> So you can see the differences, the contrast, in a different way, how the industry has changed, especially open source I guess, but in general, the industry, right?</p>
<p>[05:43] tally: Yeah, when I stopped programming, we barely knew what is web, JavaScript was there to some extent. I think I stopped coding somewhere around 97 or 98, I'm not quite sure about the exact year. So yeah, that's what we're talking about, JavaScript 0.1 or 1 or 2, Windows maybe 95. All the web technologies, everything, that was so uncommon, you would still write in C, C++, I guess, all kind of tools like <a href="https://en.wikipedia.org/wiki/PowerBuilder">PowerBuilder</a>, <a href="https://en.wikipedia.org/wiki/Magic_Software_Enterprises">Magic</a>, you probably know the names, I don't know how many of the people that will listen to this podcast or videocast, will know what we're talking about.</p>
<p>[06:50] szabgab: Yeah. Okay, so what have you been doing in the last 2.5 years, since you came back?</p>
<p>[06:57] tally: Okay, so because I wanted to develop something which is web-based and front end, I started with JavaScript, naturally. So I just worked with it and then a friend of mine told me <q>You should really learn <a href="https://nodejs.org/">Node</a> and <a href="https://angularjs.org/">Angular</a>, they're cool.</q> And a day later or two days later, I called him back and said <q>What were the names of the things you told me I should learn?</q> Because I couldn't even remember, that was how out-of-touch I was at the time.</p>
<p>So I was mainly doing JavaScript, or maybe I should say just JavaScript, and I started with Angular, which I really like. It was almost like the code generators I had before, because it was so, the first time it let you <q>hide</q> a lot of the complexity, you could just go ahead, write something, and later on understand it. But in parallel, I did a lot of reading, and watching of videos, and YouTube, and going to meet-ups, and learning other things.</p>
<p>So I also learned about <a href="https://www.meteor.com/">Meteor</a>, which was <q>Yay, I don't really have to write a back end in PHP or something, I can just do it in JavaScript and quickly and I have almost everything already connected.</q> The whole environment, I did in  Meteor, and recently <a href="http://www.angular-meteor.com/">Angular-Meteor</a> is one of the projects that I'm still quite involved, not so much in the pure development, but a bit of contributing here and there, some documentation, helping people with questions and issues, blogging a bit on it.</p>
<p>Recently, the new thing from Meteor group is <a href="https://github.com/apollostack/apollo-server">Apollo Server</a>, and I got really fascinated, back again. You go to something and you say <q>Wow, that's really nice and cool!,</q> so yeah, GraphQL and Apollo server is my last cool thing and right now I'm doing that as sort of as a hobby, an after hours kind of thing, but I hope it will go to my real-hours thing.</p>
<p>[10:06] szabgab: So when you are in the after hours, do you write open source applications, contribute there, or it's just mostly for your own fun?</p>
<p>[10:15] tally: Right now, it's for fun mainly. I don't think I have had something that I've published, I think that I took some of the things that I did as open source and then used it in a project but it was mainly a high-level. So right now it's still a bit for fun.</p>
<p>[10:43] szabgab: Okay, so we talked about a couple of subjects that we might talk about, because I know that you're quite familiar with quite a few of the subjects that personally at least, I would like to know but I don't. So for example, we talked about <a href="http://graphql.org/">GraphQL</a>, right? And  you said that could be, so what is GraphQL?</p>
<p>[11:06] tally: Okay, what is <a href="http://graphql.org/">GraphQL</a>? That's an excellent question, GraphQL is in fact, a standard. This is not a software, and that's an interesting thing, because when you think about open source, the first thing that pops to mind is code, pure code. In fact, if you go into GitHub, which is now not the only one but GitHub now is definitely the Mecca of open source, you will find other things apart from pure software. One example for that is GraphQL, which is in fact, a standard. So if you go to the Facebook GraphQL repository on GitHub, you will find specs. And then you will find a lot of other implementations, in different languages, in different servers, starting from JavaScript and going to Go, PHP, and you name it. I don't know if there's a Perl one, but it's up to you to check.</p>
<p>So GraphQL is actually a standard, it is, I don't like to say an evolvement, but more like another tier, on top of <a href="https://en.wikipedia.org/wiki/Representational_state_transfer">REST API</a>. I mean, we are all familiar with REST API and <a href="https://en.wikipedia.org/wiki/Ajax_(programming)">Ajax</a>, and how do you send the data back and forth? But it turns out that REST APIs have some great features and great value but some big disadvantages and the main one of them, well, let's say the two main things are performance and documentation.</p>
<p>Performance is because you are sending one request per resource, normally, and you get it back. So that means if you want a few resources and to get some additional information about each resource, that will require you quite a few roundtrips to the server and if you are doing that from your desktop with your 1GB network connection, then I guess that you're okay. Even if it's 50 or 70 or 20MB connection, but the reality is that most of us use something else for a lot of browsing and it's this big device, which is not that powerful on one side, and usually having a worse internet connection.</p>
<p>So the main issue here is to say <q>I want to send one request, and get all the data I need at once, because that will be much, much more efficient, especially when I use mobile devices.</q> And GraphQL describes some sort of a standard, it's a middleware that is standing between your client and the server, receives those requests from your client, mobile, or web, or whatever, and does the multiple requests, and then returns one response with all the data. So it actually takes some of the processing that you used to do in the client, for combining data, merging it, and moves it to sort of a server, or middleware. In fact, it's another server.</p>
<p>And the GraphQL is describing the schema, what you should send. The good thing about it is that, that schema is very well-aligned with what is needed in the client, with how you design the user-experience in the client. Now I know it sounds very fluffy, but once you go and look at it on your screen, how you describe it and how you send a query, how it is well-documented, it is very easy to understand. And most people go <q>Wow, that's really what I need!</q></p>
<p>I don't know if you are doing demos here, or...?</p>
<p>[16:04] szabgab: Well, I don't know what you would need, I've never tried here. Can you show...?</p>
<p>[16:09] tally: Yeah, we don't really have, maybe I will just post a link to an example, it's actually a tool that is called <a href="https://github.com/graphql/graphiql">GraphiQL</a>. GraphQL, by the way, is a standard that was developed in Facebook when they moved from the web to a native code back in 2012, and recently they open sourced it, so then we see some implementation. One implementation is the one that was done by Facebook itself, they also open sourced the implementation, not just the spec.</p>
<p>And the Meteor Group, <a href="https://www.meteor.com/company">MDG</a>, actually used this spec and developed their own version of a server, which is JavaScript-based, because that's their expertise, and is called <a href="http://www.apollostack.com/">Apollo Stack</a>, this is what you will see in GitHub, and it has the server-side and the client.</p>
<p>The main thing about GraphQL is that you describe your schema, you describe how the schema is built, and you use this schema to build all your queries. It's sort of, and I'm very careful here, it's like moving your <a href="https://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a> to half-way through the client. I think that's almost like it, and then you have all your schema defined, but the good thing, this is what as a consultant for large firms, what is really exciting is that you don't have to connect to a single server, you can, in fact, use this middleware to connect to multiple servers if you have in your organization.</p>
<p>Or even if you are a start-up and you say <q>No, I am not this huge enterprise that has ten thousands of servers</q> but even if you are a start-up, you probably connect to Slack and Stripe, for your payment, and some other services that you use, instead of developing them. Maybe you have payment, maybe you have something else for your billing, and the accounts' management, and that sort of thing, so you probably have some integration that you need to take care of.</p>
<p>Go ahead, check it out, because it's really, really interesting and I believe it's going to be extremely popular in the coming years, look at it as sort of some evolution. First we had <a href="https://en.wikipedia.org/wiki/SOAP">SOAP</a>, and most people love SOAP today, just as long as it's in the shower, and not in the code. And then we had REST, which solved some of the problems that SOAP had. And I think the next step is GraphQL.</p>
<p>[19:36] szabgab: Interesting, so if I understand then, basically, wait a second. So the implementation that Facebook provides, it's written in PHP, so it's only the back end part, or...?</p>
<p>[19:51] tally: The implementation that Facebook provides, I think I heard it was in PHP, which makes sense. I wouldn't bet a large sum on that, because I never looked at it. So Facebook provided a PHP implementation for the server and then they provided the client-side as well, that allows you to quickly use the schema and this is called <a href="https://facebook.github.io/relay/">Relay</a>, this is the part that I know better. I think the implementation of the server is just called GraphQL Server but I'm not 100% sure about that.</p>
<p>And another implementation now is the Meteor, which is JavaScript, but a lot of other implementations, and there's actually a really great talk of a Facebook guy, which suddenly I don't remember his name, but he was doing <a href="https://www.youtube.com/watch?v=UBGzsb2UkeY">three implementations of GraphQL in 30 minutes</a> talk and it was 30 minutes, so he did Python, PHP maybe, and JavaScript. I'm sure about the Python and the JavaScript, I'll have to double-check the third one. So it's GraphQL in 30 minutes, something, so check it out in YouTube, it's incredible, especially this tri-lingual guy. Just you know, in 30 minutes, write in three different coding languages, that's impressive.</p>
<p>[21:42] szabgab: Okay, so how do you get started with GraphQL? What is the minimum thing that I need to do, to have something working?</p>
<p>[21:54] tally: Have something working, is probably... well, the first resource that you should go to is something called <a href="https://learngraphql.com/">LearnGraphQL.com</a> and this is JavaScript-based but is, in fact, a great tutorial for seven or eight lessons, with questions and with tests. It's one of the best resources I've seen and it will tell you, through understanding, what is GraphQL to start with. It lets you play with <a href="https://github.com/graphql/graphiql">GraphiQL</a>, which is the user-interface for it. Sort of if you want the <a href="https://www.getpostman.com/">Postman</a> for GraphQL, we'll take the equivalent in the REST world.</p>
<p>And then, to set up a server, it's actually pretty easy. I mean, you can take the Apollo server, which is open sourced, as I said, and implement it, but there is another cool thing which is about two companies, which are providing now GraphQL as a back-end service, similar to <a href="https://lookback.io/">Lookback</a> or <a href="https://www.dreamfactory.com/">Dream Factory</a>, that provides you a full back end without you needing to develop anything. So they did the assembly, they're providing GraphQL with a database. So assuming you go to a database that is local, they have two different approaches. One is giving you all the surrounding services, the other is more focused on database. We'll put them in the notes, one of them is GraphQL and the other is <a href="https://graph.cool/">GraphCool</a>. If you want to find more about that, there's a GitHub repository which is called <a href="https://github.com/chentsulin/awesome-graphql">awesome-graphql</a>, and it has all the resources, just like the Awesome, everything that they are doing there.</p>
<p>We talked about what's in GitHub, apart from just pure code. So that's another example, we have books, I think the second most-popular GitHub repository is in fact, books. And we have all the Awesome-something repository, which gives you the main resources that you can see on different environments, so there's also an awesome-graphql there, so you can go and check it out, and there you will see also the provider, the GraphCool and the other two, that I don't remember.</p>
<p>[24:49] szabgab: Well, that's interesting, certainly</p>
<p>[24:50] tally: That's a start.</p>
<p>[24:52] szabgab: Yes, it's a start, and we are quite getting close to the end of our time for this interview. So I wanted to really thank you for coming on the show and I was wondering if you have anything else you would like to add that I haven't asked you? Or if you have a shout-out to some people, or...?</p>
<p>[25:15] tally: I didn't think about that! No, I mean, GraphQL is really cool, you should go and check it out. That will be my very simple shout-out.</p>
<p>[25:26] szabgab: Okay, all right, again thank you very much for coming on the show.</p>
<p>[25:28] tally: Thank you! It was fun.</p>
<p>[25:30] szabgab: And I really hope that we'll get back to talk about some other subject, because I really enjoy the way you present things.</p>
<p>[25:37] tally: Thank you.</p>
<p>[25:39] szabgab: Thank you very much, bye bye.</p>
<p>[25:39] tally: Bye.</p>
<p>[/transcript]</p>
<!--

## Technical info

Recorded on 9 September 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #5 Lucy Greco - DictationBridge - helping the visually impaired</title>
    <summary type="html"><![CDATA[Interview with Lucy Greco about accessibility in general and about DictationBridge that connects screen readers and speech-input software.]]></summary>
    <updated>2016-09-08T19:01:01Z</updated>
    <pubDate>2016-09-08T19:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-5-lucy-greco-dictationbridge" />
    <id>https://code-maven.com/cmos-5-lucy-greco-dictationbridge</id>
    <content type="html"><![CDATA[<p>Interview with Lucy Greco about <a href="http://dictationbridge.com/">DictationBridge</a>
an Open Source tool to connect screen readers and speech-input software to
help the blind and visually impaired.</p>
<p>We also talked a lot about accesibility in general and accessibility of web sites in specific.</p>
<podcast>
<h2 class="title is-4">Lucy Greco</h2>
<ul>
<li><a href="http://accessaces.com/">Lucy Greco</a></li>
<li><a href="http://dictationbridge.com/author/lucy/">Lucy at DictationBridge</a></li>
<li><a href="https://twitter.com/accessaces">@accessaces</a></li>
<li><a href="https://www.linkedin.com/in/lucy-greco-968b491">LinkedIN</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="http://dictationbridge.com/">DictationBridge</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/Screen_reader">Screen reader</a></p>
</li>
<li>
<p><a href="http://www.nvaccess.org/">NVDA - NonVisual Desktop Access</a></p>
</li>
<li>
<p><a href="https://www.w3.org/standards/webdesign/accessibility">W3C Web accessibility guidelines</a></p>
</li>
<li>
<p><a href="https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb?hl=en">Chrome Accessibility Developer Tools</a></p>
</li>
<li>
<p><a href="http://wave.webaim.org/extension/">WebAIM - WAVE Chrome Extension</a></p>
</li>
<li>
<p><a href="https://tenon.io/">Tenon</a></p>
</li>
<li>
<p><a href="http://www.nuance.com/dragon/accessibility-solutions/index.htm">Dragon Accessibility Solutions</a></p>
</li>
<li>
<p><a href="https://github.com/dictationbridge">DictationBridge on GitHub</a></p>
</li>
<li>
<p><a href="https://webaccess.berkeley.edu/">Berkeley Web Access site</a> maintained by Lucy</p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[lucy guest1 Lucy Greco]
[screenreader guest2 Screen Reader]</p>
<p>[00:02] szabgab: Hello there! You are listening to the CMOS, the Code Maven Open Source podcast,  you're hearing your host, Gabor Szabo, and with me is <a href="http://accessaces.com/">Lucy Greco</a>, and we are going to talk about the DictationBridge project. Hello, Lucy.</p>
<p>[00:21] lucy: Good morning, how are you?</p>
<p>[00:23] szabgab: I'm really great, thank you. How are you?</p>
<p>[00:26] lucy: I'm excellent, thank you. I'm excited to be on the show with you.</p>
<p>[00:32] szabgab: Before we go on, I want to, the first thing I want to is ask about you and how did you get into the project and how did you get into computing, in general, but before that, the people who are listening to this podcast, and maybe watching the video interview, might wonder why this time we don't have a video feed and what's special in this interview, and the main fact is that you don't see, you're blind.</p>
<p>[01:07] lucy: Correct, yes, I'm totally blind, I've been blind since birth, and I use computers with something called a <a href="https://en.wikipedia.org/wiki/Screen_reader">screen reader</a>, which your audience may not be familiar with, so screen reader is the generic term for a piece of software, used by a person who's blind or visually-impaired, to access information on the computer screen.</p>
<p>It doesn't just read text, it reads things like buttons, controls, menus. It gives me the ability to say <q>Bring me to the menubar and read the items on the menu.</q> It gives me the ability to move through a screen and find and discover things like buttons, controls, edit-fields, and hear text as I'm typing it, or be able to navigate an interface on a computer as effectively as a person who can just look at it and point at it with their mouse, I can actually give one of many, many commands to do any of the things I need to do, to be as effective as a sighted person on a computer.</p>
<p>[02:19] szabgab: Right, so as I understand it, the screen reader is only reading the text and you are still typing, and I guess you don't move the mouse, do you?</p>
<p>[02:29] lucy: Correct, no I don't use a mouse and so, but I mean, it reads everything. So if there's a button or a graphic, and the graphic has a proper label, it will tell me what the graphic label is. A button, it will tell me that it is a button and it will let me click the button, if I need to. I'm  talking about an image of a button on a screen. It will let me make selections from lists, there's a lot more to it than text, there is actually software called text readers, that only read the text.</p>
<p>This is a much more powerful thing and the one I'm using is actually an open source screen reader called <a href="http://www.nvaccess.org/">NVDA</a>, which stands for Non-Visual Display Access, and it's been around for about ten years and it's a really fantastic screen reader. I'd say right now it's probably one of the best ones on the market if not the best one on the market.</p>
<p>[03:24] szabgab: Including the commercial, or the paying project, or..?</p>
<p>[03:30] lucy: Exactly, I mean, more and more people are turning to NVDA as their screen reader, when they're having problems on websites, when they're having problems with applications, and NVDA is coded expertly enough and very, very effective, so places where other screen readers have problems, NVDA can actually excel, and that's because it's a very standard-based piece of software, so they work to the standards, they code to recognize the standards and understand content that is created to standards, where the other screen readers take workarounds and basically break the standards, in very many cases, is what they do. But NVDA is, if your code follows standards, NVDA will read it. If your code is bad, NVDA will do its best, but tends to do a better job than most of the other screen readers, at least under my opinion.</p>
<p>[04:35] szabgab: Yeah, actually that's something that I wanted to ask you, much later in the podcast, later in the interview, but if you've already mentioned it, so I have been creating a lot of websites, and there is always this, in the back of my mind, but it's not further, that when I create a website, I should invest in making it screen-reader friendly, is that the right term?</p>
<p>[05:05] lucy: <a href="https://www.w3.org/standards/webdesign/accessibility">Accessible</a> is the term we use.</p>
<p>[05:07] screenreader: 22 minutes remaining, ten, if you need to continue using your computer, either plug in your computer, or shut it down.</p>
<p>[05:16] lucy: Sorry about that.</p>
<p>[05:18] szabgab: So now we are hearing the screen reader, right?</p>
<p>[05:20] lucy: Now we were just hearing the screen reader, correct, and it's because I moved my arm and knocked the plug out of the wall, for my computer.</p>
<p>[05:27] szabgab: Okay.</p>
<p>[05:28] lucy: Okay, we're back to normal, it's all plugged-in again. Okay, so yes, the term is accessible, for what you should be doing with a website, and that's because there are many other disabilities that web-accessible or accessible websites should be working with. So, for example, say a person has limited use of their hands, and they can't move with a mouse, say the only thing they can do it hit the Tab key on the keyboard, or hit one key at a time on the keyboard, with something called a head stick or a mouth stick, and that is literally, a head stick is something that's mounted to their forehead and they literally push buttons on the keyboard by tapping with that stick. A mouth stick is the same thing, except that instead of being mounted on their forehead, it's something that they're holding between their lips, and so by making websites accessible, you're actually allowing them, people who are blind and visually-impaired, people who may have no ability to type, people who are using speech-input only, can actually negotiate your websites and work through your websites, much more effectively.</p>
<p>And the way to do this is by following the <a href="https://www.w3.org/standards/techs/wcag#w3c_all">W3C Standards</a>. W3C web-accessibility guidelines 2.0AA is an international standard that, if you follow the rules within there, and if you follow the guidelines and best practices, your website will be much more effective for everyone. Not only for people with disabilities, but we find that when a website actually is accessible to  persons with disabilities, it's actually more usable for everyone. When you start getting to fancy widgets and fancy divs, that you're using custom code that's not really good, pure HTML5, you end up making something that might be a little hard for the person with the disability and also we find that the average human being has problems with them, as well. That's my push for standards.</p>
<p>[07:50] szabgab: Yeah, yeah, okay. Are there tools, checking for this specific part of the standard?</p>
<p>[07:58] lucy: There's lots of really good tools, lots of really good free tools, Chrome has an <a href="https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb?hl=en">accessibility toolbar</a>, that is really quite good. It's very effective, very thorough toolbar. It has, for example, in it, a really nice color-checker that can do things like check your contrast and make sure your contrast meets minimum standards. It has the ability to check and make sure that your graphics all have labels on them and that your buttons actually all have proper labels on them, your form-fields are labeled properly.</p>
<p>There's one called the <a href="http://wave.webaim.org/extension/">WebAIM toolbar</a> and <a href="http://webaim.org/">WebAIM</a>, which stands for Web Accessibility In Mind, is a fantastic tool. It also runs in Chrome, I think currently the FireFox version is not there yet, I think they have some problems with the FireFox version but it's supposed to be back any day now.</p>
<p>There's just hundreds of tools out there on the internet. All you have to do is look for web accessibility and you will find tons of pages, start with the W3C and work your way through, they have actually a list of tools. A majority of these tools are free, so they're things that you can incorporate into your workflow for free.</p>
<p>One of my favorites is a tool called <a href="https://tenon.io/">Tenon</a>, it's actually a very, very powerful tool and incorporates into many, many, I would almost say all, development environments and it's an API that you can actually push, that will, as you're writing your code and testing your code, it will test your code on the fly. It's probably one of the most-effective ones for checking for accessibility of your code. It's not free, it allows, I think, a certain number of pages per month for free, and then you can subscribe to actually get more.</p>
<p>[10:04] szabgab: Okay, so let's get back to the main topic, or..?</p>
<p>[10:12] lucy: You might end up with more than one bit of content for this.</p>
<p>[10:17] szabgab: It's definitely interesting.</p>
<p>[10:19] lucy: So I'm here today to talk about our project, <a href="http://dictationbridge.com/">DictationBridge</a>. DictationBridge is something that's dear to my heart. Myself and another gentleman, who both have problems typing, because we've both been using computers for far too many years, and as a blind person who uses a computer, all we do is type. We don't do mousing, like we said before, and I've been using computers since 1985, probably upwards of ten to fifteen hours a day.</p>
<p>My hands are getting old and getting sore, and can't take that kind of pressure any more, so I've turned to dictation, probably about 2000, and I've tried various different pieces of software to use dictation, ViaVoice when it was first available, <a href="http://http://www.nuance.com/dragon/index.htm">Dragon NaturallySpeaking</a> in every single one of its versions, I think I've paid for every single version of Dragon since version two.</p>
<p>And the problem is, is speech-dictation software doesn't communicate well with the screen reader. As the dictation software is placing the text on the screen, the screen-reader software isn't seeing it appear on the screen, so I could dictate and the text was there, but I had no way of knowing what the text it was typing, unless I went back and reviewed it, with my keyboard. So a bit of a contradiction, that you dictate to remove, or at least lessen, the amount of keyboarding that you're doing, by having to go back and review it, and go through it word-by-word or character-by-character, I'm actually typing just as much as I would have if I'd typed it to begin with. Now the problem with that is, dictation software's not perfect, I don't know if you've, you've probably had problems using your phone, dictating something and the wrong words come out.</p>
<p>[12:29] szabgab: Yeah, I've never ever tried it, because I was always afraid it won't understand me properly.</p>
<p>[12:35] lucy: It's pretty bad stuff, I mean, I've had some really offensive things come out of dictation myself, which we really worry about. So if I emailed something without confirming that what I had dictated was correct, we would be in serious, serious trouble.</p>
<p>[12:55] szabgab: Right, I can  understand this.</p>
<p>[12:58] lucy: And when it comes to using something like Dragon on the computer, if you don't fix the mistakes it makes, it's a learning algorithm, and the recognition can actually get worse if you don't fix it. So you could dictate something like <q>I live in a house</q> and it would say <q>I live in a mouse.</q> And if you don't fix the word <q>mouse</q> to <q>house,</q> it would actually get worse and worse, and eventually one out of every five words would be recognized instead of four out of every five words being recognized. It degenerates very, very quickly.</p>
<p>When I used to teach people how to use dictation software, I would tell them it takes a long time, up to three to four weeks, to get a really good voice profile. It's better today, dictation software is much better than that. But it can take you as little as an hour to break a voice profile by not correcting it. I mean it just disintegrates very rapidly. It's really a very serious thing, so you can't be dictating unless you can recognize what the problems are and fix them immediately.</p>
<p>[14:16] szabgab: So how does the <a href="http://dictationbridge.com/">DictationBridge</a> solve this problem?</p>
<p>[14:19] lucy: So what DictationBridge is, is at the core is a DLL that one of our engineers has developed that captures the text that's being dictated, before it's actually typed to the screen, and speaks it to us. It does actually let it be typed to the screen immediately, but it speaks the text that is being captured, and echoes it back to me, so that I can hear that a mistake was made, and then I can use the Dragon correction facilities to fix that problem, or the Microsoft Speech correction facilities to fix that problem, and tell it <q>No, I didn't mean a mouse, I meant house</q> and it would go ahead and fix that, and help me at least maintain a good voice profile.</p>
<p>One of the other things that DictationBridge does is, both Dragon and Microsoft Speech, which we're working with both of those, have terrible interfaces. The screen reader can't actually grasp a lot of the information in those interfaces, for example, the Microsoft Speech dictation correction-window is a floating window that the screen reader couldn't actually grasp and figure out where it is on the screen, because it's not really there in a focusable place. And of course, if you try to focus in that window, the window goes away. So we've got some coding that will actually tell the screen reader where that window is, it will read the information in that window, and it will let us control the window and keep it on the screen. So it's not only giving us the echo back but it's giving us the ability to use the tools in an accessible way.</p>
<p>[15:59] szabgab: Yeah, so if I understand then, the speech-recognition software understands more or less what you say, then it goes actually to the DictationBridge, then it echoes back to you?</p>
<p>[16:14] lucy: Exactly.</p>
<p>[16:16] szabgab: And then when once you approve it, right, then it goes to the actual text?</p>
<p>[16:22] lucy: It actually goes to the text immediately, it just captures it on the way. So as it's going across the Bridge, the Bridge will echo it back. And it lets it go back to the screen, because that way, if you want to just make a correction by typing something, you can. And it's just basically providing a Bridge, that traps the information that's going across, speaks it back to you, and then lets it go on its merry path, but lets you fix it very easily, very effectively, from there.</p>
<p>[16:52] szabgab: Okay.</p>
<p>[16:52] lucy: Would you like to have a demo?</p>
<p>[16:55] szabgab: Yeah, let's have a demo.</p>
<p>[16:57] lucy: All right, so I'm going to be using Dragon, so give me one second here.</p>
<p>Wake up.</p>
<p>This is a demonstration.</p>
<p>[17:07] screenreader: This is a demonstration</p>
<p>[17:09] lucy: of how DictationBridge will echo my text.</p>
<p>[17:12] screenreader: of how DictationBridge will echo my text.</p>
<p>[17:15] lucy: If my voice profile is</p>
<p>[17:17] screenreader: If my voice profile is</p>
<p>[17:19] lucy: working well, the words will all appear correctly.</p>
<p>[17:22] screenreader: working well, the words will all appear correctly.</p>
<p>[17:25] lucy: So far, I haven't heard any mistakes</p>
<p>[17:27] screenreader: So far, I haven't heard any mistakes</p>
<p>[17:31] lucy: you will note that</p>
<p>[17:33] screenreader: you will note that</p>
<p>[17:34] lucy: when I use the words <q>wake up</q></p>
<p>[17:36] screenreader: when I use the words <q>wake up</q></p>
<p>[17:38] lucy: the microphone did not actually echo back.</p>
<p>[17:41] screenreader: the microphone did not actually echo back.</p>
<p>[17:44] lucy: That is one of the up-coming features</p>
<p>[17:47] screenreader: That is one of the up-coming features</p>
<p>[17:49] lucy: of our product.</p>
<p>[17:51] screenreader: of our product.</p>
<p>[17:52] lucy: Period. Go to sleep.</p>
<p>So I'm still using the beta version of the software and we haven't actually fully-implemented all the features we want. I turned the microphone off, so we can talk again.</p>
<p>[18:06] szabgab: Okay, it's like having another person listening in to our conversation.</p>
<p>[18:12] lucy: Exactly, it really is, isn't it? So we want things, like a person to be able to know what state that the microphone is in, I've used speech dictation for years and I can't tell you how many times I've had phone calls transcribed, because I forgot to turn the microphone off, when I picked up the phone.</p>
<p>[18:30] szabgab: Oops.</p>
<p>[18:32] lucy: Only my side, luckily.</p>
<p>So the goal of our project was to make a product like this, that has all the features we want, but we're really a grassroots group that believe in free software, so what we want is our product to be fully free for everyone and anyone to use.</p>
<p>And typically, people who are blind and visually-impaired, don't have a lot of money. There's some massive statistics around the world that say things like 70% of the population who are blind and visually-impaired are unemployed. So buying expensive software, which screen readers typically are, they're about $1,100 for the leading screen reader on the market, and buying dictation software, like Dragon NaturallySpeaking, for another, say $200, that's a major investment for someone who might be on Social Security or might have some form of limited income, or no income. They can't be spending that much money to be able to be using a computer and in this day and age, you pretty much need a computer to get a job.</p>
<p>So the goal of our project team was to make sure that a person who is blind or visually-impaired, could have access to dictation with the free screen reader, and using something as basic as Microsoft Speech recognition. So you could go out and buy-</p>
<p>[20:10] szabgab: Which is, if I am, just a second, I understand that it is free?</p>
<p>[20:14] lucy: It is free, it's completely free. It's shipped with every version of Windows since Vista. I wouldn't use it in Vista, I would only use it in Windows 7 and above, but it is completely free.</p>
<p>[20:25] szabgab: As in, free beer?</p>
<p>[20:28] lucy: As in free beer, exactly.</p>
<p>[20:31] szabgab: Once you paid for the Microsoft Windows, okay?</p>
<p>[20:32] lucy: Yeah, exactly, exactly. You have to pay for the glass, but once you get the glass, the beer keeps flowing.</p>
<p>[20:40] szabgab: Okay.</p>
<p>[20:44] lucy: So a person could get a fairly inexpensive laptop, say a $200-$300 netbook, running even something as old as Windows 7, and be able to dictate, using our Bridge and Microsoft Speech recognition and NVDA, the free screen reader. So that's pretty critical, and pretty important, when we think about third-world countries, African countries, where we've got poverty and we've got people with disabilities, those people with disabilities end up being marginalized and side-lined.</p>
<p>So we wanted people who are poor to be able to use a computer, and learn how to use a computer, and access it, and if they didn't have the use of their hands, then they should be able to dictate. And that's the goal of our project.</p>
<p>[21:38] szabgab: Okay, so actually I wanted to ask about all these technologies. How much, how language-dependent are they? Is there any dependency on being in English?</p>
<p>[21:51] lucy: The screen reader has, I believe, 80 languages that are supported and they have a very good localization process so if there's a language that it currently doesn't support, they have a mechanism with which somebody can localize the screen reader very quickly and very effectively. Microsoft Speech recognition, I believe, works in 40 different languages; Dragon NaturallySpeaking has a large list of supported languages.</p>
<p>So, no it's not limited to that. It is limited that you need to have a fairly high-end, well not actually even in this day and age, you could use a netbook. You could use a fairly low-end netbook. Anything over a 1.9 GHz processor, and that's even a single-core, will work. You do need to have about 4 gigs of memory, maybe 8 is better, but I have used this on a fairly low-end netbook and it works for me.</p>
<p>[22:57] szabgab: Okay, tell me a little bit about the project, about the development part, before we finish this conversation.</p>
<p>[23:08] lucy: So the really interesting thing about our team, is that we have only one sighted person on the entire team and she's doing the finances, and that's it.</p>
<p>We have totally blind developers doing some of the coding, our primary lead-developer is low-vision. There's eight of us on the team and we have three developers currently, no sorry, four developers working on the project, out of the eight of us.</p>
<p>And each person has a bit of responsibility for a different part of the code, so we wanted to make sure that we didn't only support the one screen reader, the free screen reader, we wanted to support all screen readers. So each developer has a screen reader that they've been assigned to work with and I'm not a coder myself, but it's really interesting, it has to do with some very low system hooks. Very few coders in the world actually have the skill-set to do system-hooking that will do things like capture the text from dictation, going to, basically they're having to intercept text between three applications and make sure that the right information is captured, doing things like re-mapping keystrokes to voice-commands is also very complex.</p>
<p>So we've got some very good programmers and they are all contributing to this project. We did crowdfunding and the crowdfunding is paying for their time, because we don't believe that blind people should be forced to make things for themselves and do it for free. We wanted to actually pay them for their work. So we used crowdfunding to pay for their work but the product itself will be free. I'm not the best person to talk to about the coding but maybe you could have another episode with one of our developers, once the project is done.</p>
<p>[25:06] szabgab: Yeah, that could be interesting, but I actually wanted to ask you if people can, what kind of help can you get from other people? How can other people help you?</p>
<p>[25:19] lucy: Oh, we have a <a href="https://github.com/dictationbridge">GitHub repository</a>, we are on GitHub, DictationBridge is on GitHub. I'm sorry, I don't have the URL but I can actually give that to you so you can put that in the notes later.</p>
<p>And this is fully, anybody can fork the code, anybody can re-contribute back. This is a full free software but it is also very open to anybody contributing, in fact we are always looking for people who would be interested in helping with it.</p>
<p>The primary code for NVDA, for example, is in Python, but we have some C++ components, we have some system-hooking and DLLs. I've had a couple of people look at the source code and they say it is actually very easy to get in and look at the source code and understand and comprehend it.</p>
<p>One of the things we find critical in the project is that we want anybody to be able to create a patch to this, improve it, and then contribute it back. It could be a person who's blind or vision-impaired, or be it a person who's just a coder who wants to contribute to bettering a product, so that everybody's experience is better.</p>
<p>[26:44] szabgab: Okay, anything else that you would like to say to the listeners of this?</p>
<p>[26:54] lucy: If you are a coder interested in doing something that's unique, we welcome your contributions, we welcome you, keep an eye on our website, keep an eye on our GitHub repository, let us know how you think you could help, and we're open to contributions. We want this project to continue on into the future. We have a specific feature-set that we're looking at for our 1.0, once we're finished 1.0, we're working on the plans for how we're going to do this in the future.</p>
<p>[27:31] szabgab: Do you know the timeline for that? Do you have a schedule for..?</p>
<p>[27:37] lucy: Since we're all working on our own time, even our developers are only spending their weekends, we refuse to release a date for release.</p>
<p>[27:45] szabgab: Yeah, okay, fair enough.</p>
<p>[27:48] lucy: We had a massive block about a month ago actually, we've only been working on the code for about two months, but we had a big block that caused a two to three week delay when we were trying to capture text in browsers. We couldn't get Dragon to echo back the text within browsers, it didn't matter which browser it was.</p>
<p>It turns out that Dragon uses a special plug-in to send text to browsers and we had to figure out how to intercept that plug-in and capture the text from that, and that was a real road-block, it pushed us back quite a few weeks.</p>
<p>So we're not setting any dates for anyone right now. But definitely keep an eye on the <a href="http://dictationbridge.com/">DictationBridge</a> website and who knows, maybe we'll do another funding program in the future, we want this thing to go.</p>
<p>[28:43] szabgab: Yeah, yeah, it was really interesting to hear about this and I hope that we can continue talking as well, so to bring you back later in another episode and see, or hear at least, how the project progressed and what's the status, and how else people can help, not necessarily just with this project, but in general with accessibility.</p>
<p>[29:12] lucy: Thank you, I'd love to talk to you more about that. My profession is an accessability consultant, so that's why I got off on the tangent there, you kind of got me on my favorite topic.</p>
<p>[29:25] szabgab: Okay.</p>
<p>[29:25] lucy: All right.</p>
<p>[29:26] szabgab: So thank you very much, and bye bye.</p>
<p>[29:29] lucy: Thank you, take care, bye bye.</p>
<p>[/transcript]</p>
<!--

## Technical info

Recorded on 3 September 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed

Recoding Option:
  Record Video: None
</pre>

The recording stopped twice due to network failure but my son managed to stich them together.
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #4: Tom Hudson - gron for making JSON greppable</title>
    <summary type="html"><![CDATA[Interview with Tom Hudson about gron, the command line tool that can help you make JSON greppable to learn how an API works.]]></summary>
    <updated>2016-09-06T20:01:01Z</updated>
    <pubDate>2016-09-06T20:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-4-tom-hudson-gron" />
    <id>https://code-maven.com/cmos-4-tom-hudson-gron</id>
    <content type="html"><![CDATA[<p>Interview with Tom Hudson about <a href="https://github.com/tomnomnom/gron">gron</a>,
the command line tool that makes JSON greppable.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/dxmsuFqB1tU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Tom Hudson</h2>
<ul>
<li><a href="https://tomnomnom.com/">Tom Hudson</a></li>
<li><a href="https://twitter.com/TomNomNom">@TomNomNom</a></li>
<li><a href="https://github.com/tomnomnom">GitHub</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="http://php.net/">PHP</a></p>
</li>
<li>
<p><a href="https://golang.org/">Go lang</a></p>
</li>
<li>
<p>The <a href="http://etherpad.org/">Etherpad</a> (was Etherpad light) project.</p>
</li>
<li>
<p>The <a href="https://github.com/tomnomnom/etherpad-lite-client">PHP client for Etherpad</a>.</p>
</li>
<li>
<p><a href="https://nodejs.org/">Node.js</a></p>
</li>
<li>
<p>The window manager Tom mentioned: <a href="https://github.com/seanpringle/goomwwm">goomwm</a> written by <a href="https://github.com/seanpringle">Sean Pringle</a>.</p>
</li>
<li>
<p>Blog post on fixing a segfault in it despite not knowing C:
<a href="https://tomnomnom.com/posts/debugging-a-segfault-in-goomwwm">Debugging a segfault in goomwwm</a></p>
</li>
<li>
<p><a href="https://github.com/tomnomnom/gron">gron</a></p>
</li>
<li>
<p><a href="http://www.json.org/">JSON</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/AWK">AWK</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form">Extended Backus–Naur Form (EBNF)</a></p>
</li>
<li>
<p>The <a href="https://github.com/pkg/errors">errors package</a> written by <a href="https://github.com/davecheney">Dave Cheney</a>.</p>
</li>
<li>
<p>The <a href="https://stedolan.github.io/jq/">jq</a> tool for manipulating JSON.</p>
</li>
<li>
<p>Some <q>advanced</q> examples of <a href="https://github.com/tomnomnom/gron/blob/master/ADVANCED.mkd">gronning and ungronning</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[tom guest1 Tom Hudson]</p>
<p>[00:01] szabgab:
Hello there, this is the CMOS, the Code Maven Open Source podcast and interview series. I'm your host, Gabor Szabo, and with me is Tom Hudson, and we are going to talk about the project called gron.
Hi Tom, how are you?</p>
<p>[00:19] tom:
Hi, I'm fine, thank you, how are you?</p>
<p>[00:21] szabgab:
Ah, I'm fine, thank you. Let's start with introducing you a little bit. Please tell me a little about yourself, your background, how did you get here?</p>
<p>[00:30] tom:
Okay, so I'm Tom Hudson, I'm a software engineer in the UK, I work for a betting and gaming company, have been for about five years now. Started tinkering with a computer when I was a kid, eventually ended up spending some time as a network engineer and then a software engingeer, did a lot of PHP, more recently writ a bit of Go, mostly I like to make tools, try to make things to make other developer's lives easier, basically. Yeah, not a great deal to say about me, to be  honest.</p>
<p>[01:07] szabgab:
All right, it's okay. How long have you been writing open source stuff?</p>
<p>[01:13] tom:
I really started only to get into it serioiusly for the last couple of years or so. I mean, I'd released bits of code that I'd written before that, but they weren't very useful.
So only really in the last couple of years have I started to think about what other people might need and try to make  tools available for them. I mean, I think sharing code is generally a really good idea but I think only recently have I thought perhaps  my code was actually useful enough for people to actually be using.</p>
<p>[01:51] szabgab:
Have you had experience with contributing to other projects?</p>
<p>[01:56] tom:
Yeah, a few, so I have been a maintainer of the PHP client for the Etherpad Light project for awhile now. It's not a very active project but it's used by quite a few people.</p>
<p>[02:12] szabgab:
Sorry again, which project was it?</p>
<p>[02:14] tom:
Etherpad Light, a PHP client for the API. Etherpad Light is a collaberative text editor. I think nowadays, it's just called Etherpad, it is written in Node.JS. It's worth looking up actually, it's great fun to use. It's a great project.</p>
<p>Other than that, I've made some small contributioins here and there. I made a fix to the Window Manager that I use, one called Get Out of My Way Window Manager, written by a guy called Sean Pringle, it's a really great lightweight tiling Window Manager, or rather floating Window Manager, with a great support for tiling. Just small bits here and there, usually when I find something that's broken, and I need it to work, I'll try to fix it.</p>
<p>[03:07] szabgab:
Yeah, that reminds me there's this broken Window theory, so you fix your broken Window with the broken Window Manager. Okay, whatever. Yeah, but this Window Manager, is not in PHP, is it? So it's.</p>
<p>[03:22] tom:
Oh no, the Window Manager is in C. I don't know C but usually, my only real skill is just figuring things out, just figure out the things I need to achieve what I want, basically, so despite not knowing C, a lot of help from Google, couple of tools that let me get a deeper build and let me figure out where the segfault was happening.
I wrote a blog post about it awhile ago, entitled <q>Debugging a segfault in goomwwm.</q> It's on tomnomnom.com. And again, I don't know C so it's probably laughable to anyone who does, but it's mostly an adventure in finding a problem and fixing it for me.</p>
<p>[04:13] szabgab:
And was it accepted in the project?</p>
<p>[04:15] tom:
Yeah, yeah, so I got my pull request merged and I haven't had a problem with it since, so it's a really, really stable project otherwise.</p>
<p>[04:21] szabgab:
That's great, I mean, that's a little bit here and a little bit there and that's how it moves forward, I think.</p>
<p>[04:28] tom:
Yeah, absolutely.</p>
<p>[04:29] szabgab:
So let's get to this project, gron.</p>
<p>[04:33] tom:
Okay.</p>
<p>[04:34] szabgab:
What is it? Why did you build it?</p>
<p>[04:37] tom:
So, professionally I deal with quite a few HTTP APIs that return JSON and some of them are quite badly documented but have very, very large responses so sometimes you know what you're looking for in the response and you can sort of grep for it, and some JSON, and you find that it's four, five, six levels deep.</p>
<p>So you don't get any context to go with that value, it can be really difficult to reason about the structure of that JSON, so originally about, I think it's about three, four years ago, I wrote gron in PHP and the idea was to take a JSON structure and output it as a series of individual assignments but as valid JavaScript, so you would end up with something like JSON.city.name = Leeds, for example.</p>
<p>And that means if you were grepping for that value, Leeds, you can see the whole path, all the way through. And you just get that context that allows you to see, what code do I actually need to write to access this value, what things do I need to traverse over? So mostly I wrote it because I needed it, but it didn't really gain any traction, initially, I think mostly because I'd written it in PHP.</p>
<p>The main feedback I had from people was, well, I'm writing Node.JS, or something like that. Or even, I'm writing C# or Perl. I don't have PHP installed, so I can't use this thing. It wasn't of use to that many people.</p>
<p>[06:31] szabgab:
Okay, and then I noticed that recently, I don't know when actually, you switched it to Go and you rewritten the whole thing.</p>
<p>[06:42] tom:
Yeah, so I did that earlier this year, I've been writing Go on and off for maybe two, two and a half, years now. And if I'm honest, the main reason I rewrote in Go was that I was trying to learn more Go and something where I'd already solved sort of some of the main problems and I could just do a straight port to Go, seemed like a good project to work on but then I realized that this means that other people can use this more easily.</p>
<p>So Go produces statically-linked binaries, by default, which means I can build for different operating systems, and just upload a binary and people can just download it and run it. It just works. So I kind of took it from there, started adding some more features, made it a bit more robust, a bit more user-friendly, and initially it was all just about turning the JSON into these discrete assignments, which at some point became a verb, to gron.</p>
<p>So JSON gets gronned, is the official way of putting it now. I then decided that, for the tool to be really powerful, maybe a little bit more than just exploration, it'd be really great if you could do the other, go in the other direction, which has become ungronning or norging, some people would have it put. There was a bit of debate about that early on.</p>
<p>But that means that you can alter the structure of the data in its intermediate state, when it's a list of assignments, with things like grep and sed and awk, if you like, and then turn the result back in to JSON again. I mean, it's not the kind of thing you should really be relying on in scripts, but when you just need like a quick fix for something, hacking on the command-line, it turns out to be actually pretty powerful.</p>
<p>[08:46] szabgab:
Interesting, I've tried the gron part, I haven't tried the opposite way yet and I like that you basically take a JSON structure, which is. My problem is that, in many cases, the JSON structure comes in as one-line basically.</p>
<p>[09:02] tom:
Yeah, okay.</p>
<p>[09:03] szabgab:
Not even, I mean, you can print out JSON normally, it's a readable format, even then it's hard to grep for something because you get the line but you don't get the context, but usually you just get one line and then you get the whole thing, and it's unusable for that purpose.</p>
<p>[09:21] tom:
Yeah.</p>
<p>[09:23] szabgab:
For reading, so what I really like is that you take that format and show the whole tree, all the levels, that go to the point that I was looking for. The fact that it's actually executable JavaScript, I don't know, is that, where do you feel it's a value?</p>
<p>[09:50] tom:
Largely, it's about predictability, so I mean, when I first wrote the tool, I was trying to think, what format could I use to output this data to make it understandable and I thought I could just write it as if it were filepaths, so with slashes, and then I thought, maybe the obvious thing to do is to write it in JavaScript, so I mean, JSON's a subset of JavaScript, and so I thought maybe having my own subset as well, would make sense, because then, in theory at least, anyone who knows JSON would immediately understand the format and what different things mean, like what the square braces mean, for example.</p>
<p>Someone had already come up with that format for me, I just needed to make it work. The fact that it is executable JavaScript is almost more of a curiosity in some ways but it means that I could get away with not defining the grammar properly initially. I just sort of said, the grammar is anything that's valid JavaScript, which was maybe a bit too vague, I have now started to define the grammar properly, particularly when I've been dealing with some bugs and things on the ungronning phase.</p>
<p>Which is fun, it's a real experience for me learning the EBNF, I think it's Extended  Backus-Naur Form, I think, so I'm self-educated, so I didn't do computer science or compiler theory or anything, so it's all a lot of intensive Googling to figure it out. But yeah, I think there's an example in the README, you can pipe the output into a .js file on console that's got log on the end of it, and it will output the object.</p>
<p>And then before the ungronning mode existed, I suppose that was kind of useful because you could do the things where you would grep -b and remove certain statements or you'd set it to change the paths in things and then you could pipe into a JavaScript file to get it back into JSON. But it was always a bit flakey, because you need every step of the way, so your top-level statement has to sort of say, well, this equals an empty object and only then can you refer to properties of that object.</p>
<p>Whereas, when gron does its own gron process, it can imply all of that stuff from a single statement and you don't need those preceding statements to say how things are set up, if that makes sense.</p>
<p>[12:42] szabgab:
Yeah, yeah, I think so. I'm thinking about the slash thing, that's separating it using slashes like a filepath, right? And yeah, that is an obvious solution but I, that came to my mind now, but it's obviously also broken, because slash can be a value and then you have to escape it and then.</p>
<p>[13:00] tom:
Yeah.</p>
<p>[13:00] szabgab:
Yeah, so it's.</p>
<p>[13:03] tom:
And also that means that I have to document it up front, what does the slash mean? Coming up with my own syntax to represent arrays or objects and things like that. Just seems, the fact that I even thought of it, seems silly in hindsight because there's already something that works really well for that.</p>
<p>[13:26] szabgab:
Yeah, yeah, I think so, yeah. Do you have any plans for gron?</p>
<p>[13:33] tom:
So a couple of things, I think need some attention, the error-handling is not very good at the moment.
So, for example, at the moment, you'll get fairly cryptic errors, things like <q>couldn't parse the input statements.</q>
Which is pretty useless, particularly if you're putting a half a megabyte of input into it.
Somewhere in here is an error.</p>
<p>[13:59] szabgab:
Yeah. No.</p>
<p>[14:03] tom:
Just doesn't work, sorry. So I mean, looking at package errors, which is a Go package written by Dave Cheney, I think it is? Which could help me provide a bit more context about the cause of errors by sort of wrapping them, as they go up the callstack.</p>
<p>But really I think my lexer that does the ungronning needs some attention, in terms of actually giving the user some context in terms of what character was it that caused the lexer to choke or what exactly it was that was unexpected so that people can figure out what their problem is a bit more easily.</p>
<p>So that needs some work, there are a few bits of the code, I think, just needs refactoring, where I've set things globally because it's easy and really it makes it a bit difficult to test because I've got to change global state when I'm in the test to make things work and I'd like to change how the adding close to the gron output works, it's kind of added in-line as the statements are built-up at the moment.</p>
<p>But then I need to do a sort, to make sure things are in the right order and an actual or human sort, as well, not just sort of a standard or less than or greater than, but in order to do that, I have to strip the callers back out of the statements again, which is a bit of a pain.
It's a bit inefficient, I mean performance has never really been a primary goal of the tool but if it's unbearably slow, then people aren't going to use it.</p>
<p>[15:52] szabgab:
Yep.</p>
<p>[15:53] tom:
Other than that, I mean, I'm a big fan of the Unix philosophy of just do one thing and do it well.
There's a bit of debate about what constitutes one thing, so should gronning and ungronning be separate tools? I don't think so, I consider them as close enough to one thing that it's okay.</p>
<p>I'm not too keen on adding many more features to it.
I mean the whole idea was that the tool would let you use things that you already knew, like grep and sed and awk, to get things done.
So, one of the common questions I get is, why didn't I just use jq? So jq is a tool for manipulating JSON and it's an amazing tool, it's really, really powerful, does a lot more things than gron, but it's only really useful if you're already able to understand the structure of the JSON itself.</p>
<p>So if you know the path to the key that you want, there's not much in the way of discovery there.
I mean, it'll do pretty printing and things like that but again, if you've got 0.5 megabytes of JSON and you grep for something and it's eight levels deep, you're doing a lot of scrolling to figure out where that actually is.
So really I see it as a complement to jq, which yeah, I think they can work together.</p>
<p>I think probably not like in a script or something like that but certainly, I find myself using gron to figure out what the structure of the JSON is, and then I'll probably use something like jq to do the actual transformations unless I'm feeling lazy.
And then I'll just use that.</p>
<p>[17:41] szabgab:
Okay, that's great, I think we are getting quite close to the time, we are almost 20 minutes already.</p>
<p>[17:50] tom:
Wow, okay.</p>
<p>[17:53] szabgab:
Talking about it, while we were thinking about that we will only have ten minutes or so, so that is interesting. That is interesting, hearing about it. Do you have any other thing that we haven't talked about that you would like to tell people how to contribute or how to get involved?</p>
<p>[18:17] tom:
So contributions are always welcome.
I actually get quite excited when somebody files an issue cause it means that I've got something to do.
I was a little bit upset that I kind of finished, so to speak, I didn't have anything left to do on it.
So just raising issues is the simplest way to contribute, people who've got pull requests or suggestions for enhancements or things like that, I'll always consider them all.
There's a small contributing doc in the root of the repository, the gist of which is just basically, run the tests, use Go format, run the linters, and then issue a pull request, and I'll have a look at it. And yeah.</p>
<p>[19:05] szabgab:
Okay, so I think that's it. Thank you for coming on the show and I hope many people will start using gron, many more people, and that you have more ideas to have others.</p>
<p>[19:19] tom:
All right, thank you for having me on.</p>
<p>[19:20] szabgab:
Thank you, bye bye.</p>
<p>[19:21] tom:
Sorry for talking too much, bye.</p>
<p>[/transcript]</p>
<!--

## Technical info

Recorded on 3 September 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>

-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #3: Joel Berger on Mojolicious</title>
    <summary type="html"><![CDATA[Interview with Joel Berger one of the core developers of Mojolicious, the Perl-base web framework with rainbows and unicorns.]]></summary>
    <updated>2016-09-01T14:08:03Z</updated>
    <pubDate>2016-09-01T14:08:03Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-3-joel-berger-mojolicious" />
    <id>https://code-maven.com/cmos-3-joel-berger-mojolicious</id>
    <content type="html"><![CDATA[<p>Mojolicious is a modern, non-blocking Web framework in Perl.
Joel Berger member of the development team talks about the project
and on how to get started with it.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/O7JGQqCUOJM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Joel Berger</h2>
<ul>
<li><a href="http://blogs.perl.org/users/joel_berger/">Joel Berger</a></li>
<li><a href="https://metacpan.org/author/JBERGER">PAUSE</a></li>
<li><a href="https://twitter.com/joelaberger">@joelaberger</a></li>
<li><a href="https://github.com/jberger">GitHub</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li>
<p><a href="http://mojolicious.org/">Mojolicious</a></p>
</li>
<li>
<p><a href="http://mojolicio.us/">mojolicio.us</a></p>
</li>
<li>
<p><a href="https://archive.org/details/ultrafast_electron_microscopes_berger_phd_thesis.pdf">Joel's PDF Thesis</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Physics::UEMColumn">Physics::UEMColumn, the basis of the thesis</a></p>
</li>
<li>
<p><a href="https://www.youtube.com/watch?v=YnW1hTVQYfA">Modeling Physical Systems with Modern Object Oriented Perl - YAPC::NA 2012</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/United_States_budget_sequestration_in_2013#Impact_on_research_funding">United States budget sequestration in 2013</a> (sequester)</p>
</li>
<li>
<p><a href="http://chicago.pm.org/">Chicago Perl Mongers</a></p>
</li>
<li>
<p><a href="https://www.servercentral.com/">ServerCentral</a></p>
</li>
<li>
<p><a href="https://nodejs.org/">Node.JS</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/POE">POE</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/AnyEvent">AnyEvent</a></p>
</li>
<li>
<p><a href="http://blog.kraih.com/">Sebastian Riedel (project leader)</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Mojo::Pg">Mojo::Pg</a> Mojolicious and PostgreSQL</p>
</li>
<li>
<p><a href="http://toroid.org">Abhijit Menon-Sen (crab)</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/DBI">DBI</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/DBD::Pg">DBD::Pg</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Mojolicious::Plugin::ForkCall">Mojolicious::Plugin::ForkCall</a> aka. <a href="https://metacpan.org/pod/Mojo::IOLoop::ForkCall">Mojo::IOLoop::ForkCall</a></p>
</li>
<li>
<p><a href="http://thorsen.pm/">Jan Henning Thorsen</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Mojo::IOLoop::ReadWriteFork">Mojo::IOLoop::ReadWriteFork</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux">(Bash) Windows Subsystem for Linux</a></p>
</li>
<li>
<p><a href="http://www.cpan.org/">CPAN</a></p>
</li>
<li>
<p><a href="/cmos-1-jason-crome-perl-dancer2">Jason Crome on Perl Dancer 2</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Carton">Carton</a></p>
</li>
<li>
<p><a href="https://github.com/kraih/mojo/wiki">Mojolicius Wiki</a></p>
</li>
<li>
<p><a href="http://marcus.nordaaker.com/">Marcus Ramberg</a></p>
</li>
<li>
<p><a href="https://slack.com/">Slack</a></p>
</li>
<li>
<p><a href="https://convos.by/">Convos</a></p>
</li>
<li>
<p><a href="http://www.oetiker.ch/en/oss/projects/">Oetiker Partner AG</a></p>
</li>
<li>
<p><a href="https://github.com/oetiker">Tobias Oetiker</a></p>
</li>
<li>
<p><a href="http://www.telenor.com/">Telenor</a></p>
</li>
<li>
<p><a href="https://mail.ru/">mail.ru</a></p>
</li>
<li>
<p><a href="https://www.craigslist.org/">Craigslist</a></p>
</li>
<li>
<p><a href="http://tempi.re/">Glen Hinkle (tempire)</a></p>
</li>
<li>
<p><a href="http://mojocasts.com/e1">Mojocasts</a></p>
</li>
<li>
<p><a href="https://github.com/kraih/mojo/wiki#screencasts">Mojocast Errata</a></p>
</li>
<li>
<p><a href="https://en.wikipedia.org/wiki/WebSocket">Websockets</a></p>
</li>
<li>
<p><a href="http://plackperl.org/">PSGI</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/distribution/Mojolicious/script/morbo">morbo</a></p>
</li>
<li>
<p><a href="http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad">Hypnotoad</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Starman">Starman</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Test::Mojo">Test::Mojo</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Test::Mojo::Role::PSGI">Test::Mojo::Role::PSGI</a></p>
</li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[jberger guest1 Joel Berger]</p>
<p>[0:00] szabgab:
Hello there!  This is Gabor again with the CMOS, Code Maven open source podcast and screencast and with me is Joel Berger.  Hi Joel!</p>
<p>[0:14] jberger:
Hi!  Good to see you, Gabor.</p>
<p>[0:16] szabgab:
Good to see you too.  And to those who are listening to this podcast, good to hear you too.  Anyway, welcome to the show.  We are going to talk about Mojolicious, the Perl based web framework but before we get there, let us talk a little about you.  Tell me a little bit about your background and how did you get into programming and how did you get into using Mojolicious.</p>
<p>[0:41] jberger:
Alright, sure.  Well, I actually have a PhD in physics and in my research I was doing some modeling of electron microscopes and I decided I needed to do some programming to do this and I already had a little bit of Perl work from doing some text processing and of course how does everyone start with Perl, right?  There is a value and needs a regex for that, right?</p>
<p>But I had learned some Perl.  And so, I started making big models for these electrons and learned quite a bit of programming that way.  And eventually once I got my PhD, it happened that the US had its a sequester, if you have heard this term.</p>
<p>Basically where the government decided that in order to cut the budgets they were going to do some sort of a deal where they would all cut the budgets at the same time but they all excluded their favorite things.  So, science got cut more than the rest and it was very hard for scientists.  So, luckily I had quite a bit of Perl programming by this point because of all that modeling I was doing and I asked around at my local Perl mongers, Chicago Perl mongers where I am still quite active and they found me a job in the programming world and I have been programming ever since, mostly in Perl and now I am lucky enough to actually be working in Mojolicious shop here in Chicago.</p>
<p>It is called Server Central, we do server hosting and whatever but we are doing a lot of our back-end work now in Mojolicious as well as some other languages.  The other groups are using some other languages but of course the group that I am in hired me because they were doing Mojolicious already.  It is been a lot of fun working there.</p>
<p>[2:29] szabgab:
Can you tell a little more about what kind of things do you do with Mojolicious?  I mean, back-end programming, Web-hosting company.</p>
<p>[2:38] jberger:
We are writing a server deployment system where the idea is that for our own internal use it is going to look like cloud provisioning, a cloud server provisioning like you have a Linode or any other well-known hosting companies, you can click a button and it gives you a new server, but our company is actual physical servers.</p>
<p>So, we are writing software and an API and all this to actually spin up real physical servers in that sort of same convenient way and that will help us respond more when a new client will come to us and say &quot;Hey, we need 50 new servers.&quot;  We will not need to take all the humans out to the racks and get them installing operating systems and all that.  We are going to have API calls and all that other fancy stuff too so that they can provision operating systems and set up networks and such all through the web frontend and that will all run through Mojolicious and we have actually got a fair amount of working ready.  So, it is a very exciting project.</p>
<p>[3:37] szabgab:
So, this a web application basically, just an internal one, right?</p>
<p>[3:42] jberger:
Yes but it is got many components because of course we have backside networks that we do not want the frontend to have access to because of course you would not want the security implications of allowing the frontend have access to your servers backends.  That is just terrifying.  So, we have all kinds of isolation there too.  So, there are some issues of proxying and all that other things.  And of course Mojolicious does that quite well too.</p>
<p>[4:09] szabgab:
So, you like Mojolicious and you liked it before you started with this company, right?</p>
<p>[4:18] jberger:
Yes, yes.  Actually even while I was still a graduate student I was starting to get into web programming just for my own fun and I happened upon my Mojolicious more or less by accident.</p>
<p>I think as many people do, you sort of pick your first web framework because you have heard of it and the thing that really kept me were some of the features that I am sure we will get to describe later but specifically the asynchronous stuff, really played with my brain in the right way.  I really enjoyed working on non-blocking code.</p>
<p>[4:54] szabgab:
Non-blocking like in Ajax, like in Node.</p>
<p>[5:00] jberger:
Like in Node, yeah.  And actually that is a great way to segue into talking a little bit about Mojo.  I like to describe Mojolicious as sort of a Node JS like framework for Perl.  Node is built on a reactive event-loop and so is Mojolicious.</p>
<pre><code>So, all of the incoming calls, outgoing calls are all event based, but that also lets you have the freedom to do things like asynchronous database queries or responding by web sockets or all kinds of other things you cannot do when you have to do a procedural request response platform.
</code></pre>
<p>And because Perl did not have a framework built on a non-blocking event loop like that, it was rather difficult to write a web application in that way.  It was not impossible.  You could use POE or you could use AnyEvent to write this but you had to be a little closer to the event loop than most people would like to be in.  So, when you build a web framework on top of it, it isolates you from that.
You can do a lot more.
It feels more like regular programming for the most part as much as non-blocking ever can do that.</p>
<p>[6:16] szabgab:
Yeah that is what I wanted to ask you because my feeling, coming from the blocking world or growing up in that, writing non-blocking code like Node is a little strange and things that seem straightforward, or were straightforward...</p>
<p>[6:39] jberger:
If you do very complex things, there is really no way to avoid that, but for the most part if you really are just doing say make a non-blocking web database request or maybe you make a request to another web service in a non-blocking way, the way that you then call back to your original client is very natural and you do not have to worry about it too much.</p>
<p>Of course if you start doing things like making 12 calls, three different services and you can do them in batches of whatever, it gets complex of course but you do not need to start at that level.</p>
<p>And actually I should say here a lot of people come to us and say &quot;Oh, it is most Mojolicious but I am afraid of it because it is non-blocking. That scares me.&quot; You do not need to do anything non-blocking.  It works just fine as a blocking framework.  Still there is parts that are reacting in the background but you do not have to think about that at all if you do not want to.</p>
<p>[7:32] szabgab:
And if you start out that way, if you start with the blocking way which I see most of the people are familiar with, can you switch over to the non-blocking mode or how difficult it is?</p>
<p>[7:43] jberger:
Of course.</p>
<p>The only thing that becomes a little bit difficult is if you have got very long running processes that you have started.  Because you have now blocked the loop, the next iterations of the loop also were blocked.</p>
<p>It is a tricky question, right?  In a normal web app you will have no problem going to sort of not-blocking incrementally.  The bigger problem is you have got sort of gigantic database queries that take minutes to complete or other crazy things but usually anything where you have not had to extend the client's timeout, you probably would be fine anyway because only the client will timeout first anyway.</p>
<p>[8:36] szabgab:
Yeah.  I mean, I saw all kinds of solutions for this problem when you have a long query and then the client keeps asking &quot;Are you ready yet?, Are you ready yet?&quot; and really strange solutions.  So, you say that with Mojolicious you can solve it much easier?</p>
<p>[8:56] jberger:
Well, you can.  So, there are several ways around this.</p>
<pre><code>First of all you can do sort of, well, that is the easiest way and particularly if you are using one of the..
So, Mojolicious project has spawned a couple of sort of spin-off projects that wrap databases in a more asynchronous way.  The primary one is Postgres.

Our project founder Sebastian Riedel has really taken on to Postgres lately and actually one of other core members Abhijit Menon-Sen, I hope I am saying that right, is Crab on IRC, that is a lot easier to say, is also on the Postgres development team.  So, that is a really cool crossover we have there. 
</code></pre>
<p>When we have questions about PostgreS, we can just call over Crab and say &quot;Hey, this thing is confusing us&quot; and he can help us out but we have a wrapper. It is still just using DBI and DBD::PG but it provides you a non-blocking interface and when you do that, you have got this query that is going to take 5 minutes to run and assuming you have set up all your timeouts correctly, you can keep serving other clients while that query is running.</p>
<p>And when the query is completed and it starts sending you data back, then you can respond to that client.  That is the easiest way to do it.  If you cannot do that for some reason and if you are not using a database that has a reactive or a non-blocking client, then you can do several different sorts of forking where you fork after getting the request, do your computation in some other process and then you pipe the results back to your original server.</p>
<p>And we have plug-ins for that too. I have written one called <a href="https://metacpan.org/pod/Mojolicious::Plugin::ForkCall">Mojolicious::Plugin::ForkCall</a>
It is actually <a href="https://metacpan.org/pod/Mojo::IOLoop::ForkCall">Mojo::IOLoop::ForkCall</a> too, but do not worry about that.</p>
<p>And Jan Henning Thorsen, another of the Mojo core developers has one called <a href="https://metacpan.org/pod/Mojo::IOLoop::ReadWriteFork">Mojo::IOLoop::ReadWriteFork</a>.
You can actually interact with your forked process.  You can send it data over a pipe and it thinks that it is standard input and you can send data back over it.  So, that is where we are doing really long running things where you want to monitor some process or whatever.  So, there are plenty of options for what we call unblocking code and they all work fairly well with a slight asterisk around Windows of course because forking and piping and things do not work so well on Windows.</p>
<p>Actually with the new Windows subsystem for Linux which is the real name, people have been calling Bash on windows, it is really called WSL or Windows Subsystem for Linux is we have actually had some fairly good reports of Mojolicious. The corner cases that Windows did not work as well are working quite nicely on Windows Subsystem for Linux.  So, we are very excited about that.</p>
<p>[12:02] szabgab:
I see.  So, besides this non-blocking mode, what else would you say as the killer feature of Mojolicious?  Why would someone pick Mojolicious?</p>
<p>[12:18] jberger:
So, I think the biggest thing is API consistency, right?</p>
<pre><code>We are very used to in the Perl world taking pieces from all over different parts of CPAN and each one presents a slightly different interface and we are very used to that and let us not think that that is a bad thing, but Mojolicious was designed really to work together with itself quite well.

You can of course use whichever modules you want but if you use the tools that come with it and it comes with a lot of built-in tools like a DOM parser and JSON parser and. I am sure I am going to forget everything because I am on the spot here, but it comes with lots of batteries included and the really nice thing as you get to use them more and more is that they were all designed with the same API in mind and consistency is always a key for us.

I already watched your first video with Jason Chrome from the Dancer group and I think I probably ought to comment that for a lot of the people in the Perl world we value stability over everything else and I think it would be wrong to not say that Mojolicious takes a slightly different approach to this.  We have a very defined breakage policy where we can at specific times break backwards compatibility and we have done that more in the past then we have lately but we have done quite a bit and the point has been it allows us to keep making the framework more and more consistent and if we need to change a thing that would change that consistency, we can change at other places too and the code as a result has now gotten to be very lean and very easily read while still providing really consistent API.  And as it turns out, after a while of iterating like that we have not actually broken much lately.  So, Mojo got this reputation for &quot;Oh, you know, you have to be very careful about your dependencies&quot; and we will probably never say that it is never going to change again but it is gotten quite stable lately and quite beautiful as a result of our willingness to iterate on it.
</code></pre>
<p>[14:35] szabgab:
So, if you had these changes earlier, not recently but earlier, these breaking changes, how did people used Mojolicious manage?  Do you have some process of upgrading?</p>
<p>[14:50] jberger:
First of all, we recommend Carton very heavily.  As you are developing, we recommend that you use Carton and pin your dependency of Mojolicious so that you know exactly where you have developed and which version you should use.</p>
<pre><code>We also have then a porting document that we try to keep up-to-date whenever we make a breaking change.  It says &quot;This thing has changed.  Use this one instead.&quot;   It is in the wiki and for the most part, especially since say about 5.0, we are now into the 7.0 series, the changes have been mostly semantic.  You change name here or there, a few behaviors have gone away but for the most part it is been fairly easy. Oh, you used to use this. Use that instead.  Not too many things have really just plain out gone away. 
</code></pre>
<p>[15:44] szabgab:
I see.  Okay, do you know any projects that were written in Mojolicious either open source or those that are, I mean, besides the company where you work?</p>
<p>[15:55] jberger:
Yeah.  Actually, I know that a lot of .. First of all, the big one that we are always kind of proud of is Jan Henning Thorsen and Marcus Romberg wrote an IRC client in Mojolicious and it is easy to compare it now, now that a lot of people have seen Slack.</p>
<pre><code> It feels a lot like Slack.  Its IRC in the browser.  You can pull it up on your phone or you can pull it up on your desktop or your laptop and it is all the same connection because you are hosting it in one place and it behaves then as a web server that you can connect to and type into.
 The web is convos.by if you want to look at that and they have a little demo there and actually it is kind of fun to mention now that they have just done a huge rewrite and it is about to be released for the 1.0 version which should be a lot easier to install.  That was a little bit hard to install which was a big problem.
</code></pre>
<p>Also, I know Tobi Oetiker, I hope I am it right.  Tools are starting to be written into Mojolicious which is quite fun for us to see people doing server administration using Mojolicious based tools.  Kind of interesting thing, I did not expect to see but it was fun to see happen.</p>
<pre><code>As far as websites, first of all, we have lists of people who are using the Mojolicious on our wiki and even some user quotes about it.  I know for some reason Norway has a huge user base of Mojolicious.  So, I know Telenor is using it for some things and there is a travel service out there that Jan Henning is actually moving to.  I know they are using it.  I wish I knew the name.  I do not off the top of my head.

We have some bigger sites.  I do not know if I am supposed to say.  I think I am allowed to say that we know that mail.ru which is in the Alexa Top 50 actually uses Mojolicious, not for all of their sites but I think as they go, they are coding more and more to it.  We were only just allowed to share that recently.  So, that is kind of fun for us to say. 
</code></pre>
<p>I have a nod and a wink that told me that there is some Mojo being used at Craigslist. I hope I am right in saying that but that is kind of fun for us too.  And plenty other smaller sites that you can see if you go to our Wiki and see the listings.</p>
<p>[18:28] szabgab:
If you are going to your Wiki, where do people go if they want to learn Mojolicious and they want to start using it.</p>
<p>[18:40] jberger:
That is a great question.  We have our website.  It is Mojolicious.org or you can do the sort of more fun Mojolicio.us so it just looks like Mojolicious but Mojolicious.org is easier to say.  And from there you can see the front page, kind of a pretty page.  You can get documentation there and then you can get links then from there to the GitHub as well.  The wiki is then through GitHub.  It is a GitHub wiki.</p>
<pre><code>We have an IRC channel, IRC.perl.org #mojo and we are quite friendly.  So, we try to be at least.  If it is not, come tell me and I will help you out.  I am your guy. 

So, we do most of our communication through IRC.  A lot of development is through IRC.  We are very proud it.  If you come into the IRC and find a bug, we often have it fixed within minutes and released.  Because we have kept the code base very clean over this time, we can react to issues very quickly.

I think you will remember back when there is that bug was found in Bugzilla about the code interpolation, the privilege escalation, the same thing that everyone has did you get a list of parameters thing.
</code></pre>
<p>[20:09] szabgab:
Something about CGI, I think.</p>
<p>[20:11] jberger:
Yeah and most web frameworks copied that API. So, most web frameworks had that same kind of, I should not say it is a vulnerability, it was a way that a user might accidentally write their code badly and because of the way that CGI had developed that API and we all copied allowed users to write insecure code and we put out a fix to that that very evening which was kind of fun for us to say &quot;You know you what?  No, we will not let you write this unsafe code anymore.  We are stopping it tonight.&quot;</p>
<p>So, we are very proud of our ability to respond very quickly especially to security bugs which have been few.</p>
<p>[20:53] szabgab:
So, any screencast or other resources?</p>
<p>[21:01] jberger:
One of our core members Glen Hinkle who goes by Tempire has a series of Mojocasts.  They are getting a little bit older unfortunately but for the most part they are pretty good. We have a list of errata as well on the wiki.</p>
<pre><code>I should probably help him link that into the website.  Unfortunately, Glenn has spent more of his time in iOS development lately.  So, although he is still around if we ever need to call me in for a for a group chat, he will be there but he has not had as quite as much time to spend on the Perl side but his is podcasts are amazing.

 I believe it is Mojocasts.com but let me just quickly Yes, Mojocasts.com.  I was worried if it was .org or something but Mojocasts.com.  It is really good.  And there are a few things that have changed since then we have noted that on the wiki as well.
</code></pre>
<p>[21:56] szabgab:
Good.  Just one thing, going back before we are closing here, you mentioned CGI lately and CGI sort of has a bad name especially because it is old and it is rather slow when you are running CGI. So, I wonder when you are running Mojolicious, do you run it as a CGI script or ... ?</p>
<p>[22:18] jberger:
Ah, good point.</p>
<pre><code>No, it is not a CGI script although it can actually run under a CGI server. If you have like a shared hosting or some old servers, you can still run Mojolicious under a CGI environment and it will work correctly.
You cannot use web sockets or anything because of course CGI has no way to know how to do that.  And I also should say that if you are using a PSGI server which is fine, you can do that as well.  Mojolicious will run as a PSGI server but again does not have the web sockets because you need to have the event loop in the server level in order for that to work.
</code></pre>
<p>So, to say that then we do bundle our own web servers in with distribution.  We have a few of them.  We have a basic Damon that is very capable and we have a script called Morbo which is nice because as you develop, it will notice that you have saved files and made changes and it will restart the server for you which is quite nice.  And then we have a much more capable production server called Hypnotoad and Hypnotoad is basically equivalent to the PSGI server Starman if you are aware Starman, same sort of pre-forking architecture.</p>
<p>It has one extra little feature of hot deployment.  So, if you say I have made all these changes I would like to release a new server or on post production, however you want to call this, and you do not want to have to bring your site down, you can actually tell Hypnotoad to start the new server and as the old clients keep being served by that old server, new requests will go to the new server and they never miss a beat.</p>
<p>You can upgrade Mojolicious.  You can upgrade your site.  You can even upgrade your Perl while doing that.  So, it is really quite interesting.</p>
<p>And then I should also say for all that capability, Mojolicious is still quite small.  It something about 8,400 lines of code and as its kind of famously known, it has no non-core dependencies but can use CPAN modules for extra behavior like IO::Socket::SSL for SSL connections and all kinds of other things if you want to use CPAN modules but it does not need them.  So, it is very easy to install.  And it is got 11,000 or so tests.  So, it has more tests than lines of code.  So, you can be reasonably sure that we have been careful about what we are doing.  And all that installs in less than a minute. So, if you are coming from my platform where it was hard to install, Mojolicious might be for you too.</p>
<p>[24:59] szabgab:
That is really nice.  So, thank you for coming to the show and sharing all this information.  I wonder if you have anything else, a shout-out or something that you would like to add that I failed to ask.</p>
<p>[25:16] jberger:
Great. It feels like I should, should not I?</p>
<p>[25:19] szabgab:
It is not a requirement.</p>
<p>[25:23] jberger:
No, I would just say give it a look, come by the IRC channel.</p>
<pre><code>Actually, I think I could say one of the things I particularly like about Mojolicious is there is a test framework called Test::Mojo. It comes in the distribution but I really like how it works and I would encourage people that if you had a hard time testing your web application before, even if it is not a Mojolicious application, you can use Test::Mojo with a plug-in that I have written and I am sure if we give some links here, I can give a link to it but using that Test Mojo and the plug-in that I have written, you can use it to test any other PSGI application as well and it can be very nice to have the expressive nature of Test Mojo for any website you have developed.  So, I would give that a look too.
</code></pre>
<p>[26:15] szabgab:
Yeah.  I will add it to the show notes and the links.</p>
<p>[26:18] jberger:
Okay.</p>
<p>[26:19] szabgab:
Great.  So, thank you very much and I hope that in a few months or when there is a new release we can return to this conversation and see what changed and how to update it.</p>
<p>[26:33] jberger:
Will do.</p>
<p>[26:33] szabgab:
Thank you very much.  Bye, bye.</p>
<p>[26:35] jberger:
Yup.  Thank you.</p>
<p>[/transcript]</p>
<!--

## Technical info

Recorded on 24 August 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: Normal
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Medium

Recoding Option:
  Record Video: Multi-track
</pre>

By the end of the recording the noise from the ventillator of my computer became pretty disturbing.

-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #2: Sawyer X on Perl 5</title>
    <summary type="html"><![CDATA[Interview with Sawyer, the current Pumpkin of Perl 5 about his job herding the cats called Perl 5 Porters.]]></summary>
    <updated>2016-08-24T18:08:03Z</updated>
    <pubDate>2016-08-24T18:08:03Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-2-sawyer-perl5" />
    <id>https://code-maven.com/cmos-2-sawyer-perl5</id>
    <content type="html"><![CDATA[<p>Interview with Sawyer X, the current Pumpkin of Perl 5 about the Perl 5 Porters and the programming language in general. He also explains the difference between Amsterdam.pm and AmsterdamX.pm.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/FRWaO2GpA7g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Sawyer X</h2>
<ul>
<li><a href="http://blogs.perl.org/users/sawyer_x/">Sawyer X blog</a></li>
<li><a href="https://metacpan.org/author/XSAWYERX">PAUSE</a></li>
<li><a href="https://twitter.com/PerlSawyer">@PerlSawyer</a></li>
<li><a href="https://github.com/xsawyerx">GitHub</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li><a href="http://booking.com/">Booking.com</a></li>
<li><a href="http://perl.nl/amsterdam/">Amsterdam.pm</a></li>
<li><a href="http://amsterdamx.pm.org/">AmsterdamX.pm</a></li>
<li><a href="https://lists.perl.org/list/perl5-porters.html">Perl 5 Porters mailing list</a></li>
<li><a href="https://lists.perl.org/list/perl5-summary.html">perl 5 summary</a></li>
<li><a href="https://twitter.com/perl5summaries">Twitter @perl5summaries</a></li>
<li><a href="http://blogs.perl.org/users/sawyer_x/">Sawyer at blogs.perl.org</a></li>
<li><a href="http://rt.perl.org/">rt.perl.org</a></li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[sawyer guest1 Sawyer]</p>
<p>[0:00] szabgab:
Hello!</p>
<pre><code>This is Gabor Szabo from the Code-Maven podcast and screencast and video interviews. With me is [Sawyer](http://blogs.perl.org/users/sawyer_x/) who is current Pumpkin of Perl 5 and we are going to talk about Perl, the language and the compiler.

Hi Sawyer.
</code></pre>
<p>[0:25] sawyer:
Hey!</p>
<p>[0:27] szabgab:
Please introduce yourself and tell me about you. A little background about yourself and how did you became a Pumpkin? What is a Pumpkin?</p>
<p>[0:38] sawyer:
Okay, let's try. A little bit about myself first. I started with Pascal and Assembly and C. Also a bit of C++. At some point, after a friend recommended and suggested at high school, I've started playing with Perl.</p>
<p>I started learning the language which the basics was fun. I've learned it in one night, like at 4 am, it was a lot of fun. Then I've started writing some code, doing different stuff. I think the first thing I wrote was actually a program that downloaded all of the comics of a certain comics strip that I liked, and put them in nice directories, because the Internet was not very fast and I wanted to download all of them and then read them at home.</p>
<p>I've started attending the Tel Aviv Perl Mongers group, TelAviv.pm, which you organized. I gave a few talks there and eventually someone, you, convinced me to go to FOSDEM and YAPC::EU, where FOSDEM is the Open Source conference in Belgium, and YAPC is the European Perl Conference, and you suggested I give a talk there.</p>
<p>I remember we had a discussion about this where you said &quot;Go ahead&quot; and I said &quot;No way&quot; and you said &quot;go ahead&quot; and I said &quot;no way&quot;,  and we did it back-and-forth a few times, until I said &quot;fine, I'll go whatever&quot;.</p>
<p>It was a lot of fun and I just kept giving talks and I've started to be more and more active in different projects. I became mainly active in the Dancer web framework which I started using for a personal project and slowly I had more and more interest in it, and became the maintainer of it, and we grew a nice community around that.</p>
<pre><code>	  When I moved to The Netherlands where I live right now to work at [Booking.com](http://booking.com/) I created another group. We already had [Amsterdam.pm](http://perl.nl/amsterdam/) which is a Dutch Perl Mongers group and I founded the [AmsterdamX.pm](http://amsterdamx.pm.org/) which is not X for Sawyer X, but it is X for [expat](https://en.wikipedia.org/wiki/Expatriate). I really have to stress that. AmsterdamE is not as AmsterdamX for expats and the idea is that it is much more comfortable for people who don't speak Dutch and the timing is different and it is a bit different.
</code></pre>
<p>We found it to be more successful because we had a little participation from expats. We have a large group of people doing Perl in Amsterdam and in the area but they would not go to the Perl Monger's meetings so I started that group.</p>
<p>This year Ricardo Signes who was the Perl Pumpkin for the last few year stepped down from that role and I took over it. Mainly passed on from him, less of a &quot;I fought him for it,&quot; and that takes most of my time nowedays. I still do a lot of conferences. This month I think I'll be at 3 conferences and along with that Dancer which I am still active in and, of course, work. That's basically my time nowadays.</p>
<p>The Perl Pumpkin. I don't know if I have a good story for it. I was always interested in internals of Perl, it is written in C and.</p>
<p>[4:11] szabgab:
What is a Perl Pumpkin?</p>
<p>[4:13] sawyer:
So yeah. The Perl Pumpkin is basically the project manager for the Perl 5 language.</p>
<pre><code>I was always interested in the internals. I came from C which is what Perl is written in. It is very sophisticated C and I never got to those levels, but I was always interested in that I was always trying to keep track of what's going on in the language itself. You know, the underpinning of what we know as the Perl syntax and how that works and optimizations there. Lexing, parsing all that stuff is very fascinating but the mailing list for that is just too much.
</code></pre>
<p>I don't know if you have ever read the <a href="https://lists.perl.org/list/perl5-porters.html">Perl 5 Porters mailing list</a>. The group that maintains Perl is the Perl 5 porters and the name P5P is the name of either the group or the list, of course.</p>
<p>The list is very hard to follow because it is basically an amalgamation of several different communication channels. So there is the tickets, and there is the discussion, and then there are some summaries that are sent there for some commits. At least there used to be.
It could be a lot of different stuff and they could be all combined into one list, which is what P5P reads and writes to. It was just too much to keep track.</p>
<pre><code>So I started summarizing them. So now I read them every day and then at the end of the week or at the beginning of the week I publish a summary of it that you can read on the list or on a different list that's called [perl 5 summary](https://lists.perl.org/list/perl5-summary.html), that's just for summaries, or on [Twitter](https://twitter.com/perl5summaries) and
</code></pre>
<p>also on <a href="http://blogs.perl.org/users/sawyer_x/">blogs.perl.org</a>.</p>
<p>So I became active in the core group mainly following discussions. Giving notes here and there, getting more interested in the internals. I was always very active in the community prospective of Perl and I was always wondering about the direction and the vision of Perl and where to move forward with it. Specifically Perl 5.</p>
<p>So when Ricardo decided to step down, he was looking at what kind of people can fill the void, and could take on this role. I was nominated by someone from the core developers. It was discussed internally and a decision was made that I'd do it appropriately, which hopefully I would. So basically what it means...</p>
<p>[6:40] szabgab:
So you are the Pumpkin now.</p>
<p>[6:42] sawyer:
Yeah, I know. I am still trying to do it right, because I am always worried that I am not doing it appropriately. People think that ...</p>
<p>[6:54] szabgab:
What are you doing?</p>
<p>[6:56] sawyer:
No one really knows what the Perl Pumpkin does. What it basically means is that I help with discussions and I try to kind of navigate discussions towards actual actions, rather than just <a href="https://en.wiktionary.org/wiki/bikeshedding">bikeshedding</a>.</p>
<pre><code>Once in a while there are conflicting ideas, one person implements things, I think it should be this way, and another person says, it should be done that way, and there they just reach a point where they just disagree and they cannot resolve it. Then I come in and I make a decision, Okay, we are taking this approach because of A, B, and C. The thing is that I don't know all of the technical details that a lot of the bright people there do know, so I mostly listen a lot and then talk to people, oftentimes off the list to get more information, and then I can make decisions.
</code></pre>
<p>So actually a lot of my work is not done on the mailing list. You won't see me as much as other people, mostly I talk to people outside the mailing list to get a better understanding of topics before I respond. So my response is usually at the end saying, &quot;Yes.&quot;  Or I don't know, what about this direction?  So that's kind what the Perl Pumpkin does.</p>
<p>[8:10] szabgab:
What does Perl do?</p>
<p>[8:11] sawyer:
Well, Perl allows you to run Perl code, basically.</p>
<pre><code>I think it would the biggest value of it.  It would be hard to run Perl code without it, but,
I mean there are a few other interpreters for Perl 5, and you could use them. They are either forks or they have limited capability in comparision, so the cannonical implementation of Perl 5, which has the larges group of developers that are committed to it, including grant money and sponsorhip money, is Perl 5 Porters and what we call Perl. 

But jokes aside, Perl is a language that can solve a lot of different problems.
It has a multi-paradigm programming perspective. So you can writen in procedural, you can write in Object Oriented, you can write in purely functional, you can write in so many different ways, so you can apply it to so many different technologies.

Because it has a good coupling with C, using the XS layer and FFI if you want it, it allows you to interact with C or with C++ code fairly easily and interact with Perl.
So you can speed up parts of it or combine with libraries etc.
So it is very high level. It is hyper-dynamic, which is a term that I really enjoy using for that perspective, and it has a lot of really cool features under the hood.

I use it to solve most of the problems that I have.
</code></pre>
<p>[9:49] szabgab:
So, what would you say to people who had experience, who knew about Perl maybe 10 or 15 years ago?
What has changed since then? Has anything changed?</p>
<p>[10:01] sawyer:
There are so many things that have changed, both in fixes, in optimizations, in features, there are new syntaxes available. There were a lot of things introduced to solve specific problems and I mean it is very hard to summarize. I tried giving a talk summarizing all the things that have changed since, let's say 5.10 or 5.8 and it's such a long list.
Let's take two versions back.
Nowadays Perl is released every few years. Actually released every single year and have a stable release. So let's take just 2.</p>
<p>[10:44] szabgab:
So what version are you at now?</p>
<p>[10:45] sawyer:
We are now at version 5.24. Let's take a look at 5.22. It was released on June 1st I think,
and it included, just to have a few examples, the diamond operator (<code>&amp;lt;&amp;gt;</code>that we have for input, now we have a double diamond operator which is much safer. More secure. You have regular expression bounderies for Unicode. So like a lot of people play with Unicode and work with Unicode but we have added several boundaries for spaces, what Unicode considers a word-boundary, what Unicode considers as a sentence-boundaries, like graphme cluster boundaries. If you use Unicode, these are great.
We have added them last year.</p>
<pre><code>The regular expression has a strict mode. Unicode 7 was introduced and added last year.
This year 5.24 already has Unicode 8, and we've already merged Unicode 9, so we'll release it in the next version, which will be 5.26.
Aliasing by references for example.
Having const as a subroutine attribute. There are a lot of stuff like that.
If you have a look at the recent version for example that just released recently.
It was released in May 9th, 2016 there are a few other stuff.
So there is Unicode 8 I've already told you about.

There is also postfix dereferencing. Once of the things pissing people off,
when you have a very big structure that represents an array, or it can also represent a hash.
You have to write the entire structure all the way to the last element and then you have to wrap it with a dereferencing in order to got what it references, which is kind of using a pointer and dereferencing a pointer. 
What happens is that you write all of this forward and then you have to wrap the entire thing.
Because that's how the wrapping code works. But now we have added syntax to change that to the end.
These are things that seem simple, but it completely changes the way you write and the way you work, because you only move forward. Which is some of the things people like about functional programming. The way that you move.
So these actually have a lot of value and this is no longer experimental. You can use this.
Things like optimizing basic operations. Additions, substractions, multiplications, subroutine calls, you know stuff that people tend to use. All of these have been optimized significantly.
</code></pre>
<p>[13:10] szabgab:
So you are talking about speed improvements.</p>
<p>[13:13] sawyer:
Yes, these would be the optimizations. Subroutine signatures that people really like and use in a lot of other languages we now have, but we are also optimizing it, so the next version will have substantial optimization for subroutine signatures.</p>
<pre><code> What else?

 We are introducing the indented heredocs synatax, a bunch of other languages have it. Now we'll have that too.

 A lot of security-related changes. For example Perl developers familiar the current directory being in what you load when you try to load modules. It also tries the current directory. We are going to remove that. That's a security issue. While people have used it, it is actually very problematic. We realized this and it is going to change in the next version.
</code></pre>
<p>[14:09] szabgab:
So that can actually break a lot of code out there.</p>
<p>[14:13] sawyer:
Well, so one of the things we actually did was release all of the core modules recently, with that removed locally, and we have noticed very little breakage. The only breakage was base.pm which is used by quite a few modules and we are probably going to merge a different implementation that implements the same thing, but in a safer way for base.pm that has a specific usage which is trickier, but we couldn't observe other than the base.pm breakage that was major at all.
So we are kind of safe with that.</p>
<pre><code> If your code assumes loading from the current directory, you can just say I'd like from the current directory. That would work just fine. Any code that does that will work just fine. But code that implicitely loaded from the current directory, that is going to be removed. That is a much safer perspecive of this.

 So if you take a few steps back and you look at all this history. What we have added was a lot of syntax, a lot of changes in bug fixex, security, a lot of optimizations.
 We have plugable keywords so you can write an interpreter within the interpreter. Really crazy stuff like that. These are things that keep evolving and changing in the language and you can't really see all of this unless you look at the global picture. The whole picture of it.
</code></pre>
<p>[15:46] szabgab:
So let's jump to something slightly different. If someone wants to learn Perl or get involved in...
I mean learn Perl, let's start with that.
There are two groups here. One is someone who wants to learn Perl, what would you suggest and the other one if someone wants to get involved in developing Perl in helping and further improving the language. So let's start with the...?</p>
<p>[16:12] sawyer:
If you don't know Perl and you hear this and you think, &quot;Hey this sounds like an interesting language, maybe I'd like to learn it&quot; then I'd recommend, there are two books that I highly recommend.
One is Beginning Perl by Ovid, Curtis Poe who goes by Ovid, and the other one is Modern Perl by chromatic. I think these are very very good books that cover the essentials.</p>
<pre><code>Modern Perl tends to be more succint, but it is very good and Beginning Perl is very thorough and I think Curtis has a very good way of explaining things and they both teach you, not Perl like 10-20 years ago, but Perl that you'd write nowadays, that people would expect you to write, that is proper practices that don't assume on &quot;I know Unix&quot; or don't assume &quot;I came from C&quot; and it is exactly the same.
</code></pre>
<p>give you a very idiomatic and correct way of writing Perl that is extensible and secure and correct and fun. So I really recommend those, if you'd like to learn the language.</p>
<p>When it comes to how to improve the language itself. So the language breaks down to two parts.
It breaks down to the core of the language and all of the modules for it.
The modules for it are written in either C, using a binding loader called XS. It's kind of a glue language between C and Perl, or directly in Perl which we call Pure Perl because it does not have any XS or C.
And you can write a module that is either in one of them or in both, whatever you want. So a lot of the language extensions are done using modules and the language tries to have a small core that is easily extendable using modules.
So a lot of things that we assume as the core language are actually just modules that you can open a pull-request for you can contribute you can work on these projects openly and it's a lot of fun and there are project. Examples is the one that I am involved with is Dancer that you could contribute code to and you can join those teams.
Usually it is a team of people. Sometimes it is a single maintainer. Sometime is one or two maintainers working together and you can always jump in and say hey, I know a little bit of Perl I want to help with this.</p>
<p>There is also the CPAN Pull-request challenge. The Pull-request challange kind of allows you to get a taste of it, like a tasting menu where every month you get a new module and this module was curated to be both important and used and having issues to work on. So there is a filtering process going on there.  Not just random stuff, because CPAN can take whatever anyone wants to upload. CPAN is where we upload stuff so it contains anything. Some of those no one really uses. Some of those are not very good, but some are very important and used and they get curated and you get every month &quot;hey here is a thing you could work on&quot;. You can go and submit a pull-request and talk to the author and it is fantastic.</p>
<p>Now when it comes to language itself, if you'd like to work on the language, that requires...
I mean at first I though that it requires learning C like if you want to learn on the language
then you need to know C. In fact the matter is that the language contains a lot of tooling around it that are part of the language that could use a lot of help. Many of these tools have been written in Perl.  I think the first contribution that I did was remove a core module and put it on CPAN.
One additional thing that we have now is that we have another module that we are thinking of making available separately from core as well. Because that would allow people to use it without necessarily having to upgrade Perl. That is a contribution I can make knowing any level of C.
So I've been trying to collect these nowadays. Haven't got very far but I am trying to collect all of these different things that you can do that don't necessarily would require specific C knowledge.
Now if you do know C you can always take a look at the existing tickets in <a href="http://rt.perl.org/">rt.perl.org</a> and if there is any ticket there that you want to play with the Perl source is open sourced fully. Free software just clone it from Git. It's also available on a GitHub mirror, an unofficial GitHub mirror. It's available there. You can just submit patches, you can e-mail the mailing list Perl 5 Porters and you can contact us and say &quot;Hey I'd like to work on something, what do you work on?&quot;. Or &quot;I'd like to work on this ticket, what can I do?&quot;. You can also comment on the tickets themselves. So that ticket and the whole combination of the mailing list, if you comment on the ticket we'll see it and comment onthe ticket back. If you write on the mailing list, everyone else will see it as well. So it all gets combined. So no matter how you access us, no matter how you contact us we'll find it.</p>
<p>[21:02] szabgab:
So it either RT, the bug-tracking system, or mailing list, or IRC, I guess.</p>
<p>[21:09] sawyer:
Sure, IRC. We are on irc.perl.org #p5p and you can find us. Not everyone is always online, but drop a note and someone will probably respond soon and I think people who come in and just want to play with stuff are really a great resource, they have different perspectives.
They think from a different angle and it is always interesting to see what people play with.</p>
<p>[21:38] szabgab:
Thank you very much. I wonder if there is any subject that we have not talked about that you'd like to mention here. Shoutout to people.</p>
<p>[21:53] sawyer:
I'd shoutout to everyone. It's tricky. Tony Cook and Dave Mitchel have been working a lot on the Perl core as part of their grants and they are doing an amazing work, optimization, a ton of bugfixes, and stuff like that.
We have one amazing contributor who work tirelessly on pretty much anything and that's Father Chrysostomos. I really like this person. He is a really nice guy.</p>
<pre><code>And Zefram who is an expert on incredibly detailed technical topics.

I want to thank Jim Keenan who is a fantastic curator of all the tickes. If you open a ticke he will see it and if you have a test he'll run it and if you have a patch there he'll try to merge it and 
if its wrong. If it does not pass any kind of policy that we have, then he'll comment with explanations and links. It's just incredible.

Todd Rinaldo and John Lightsey who worked on the changes to the current directory. They work in the security team at cPanel. And cPanel has like an entire security team that does stuff. They found a slew of these issues and they raised them, they wrote the patches for them. Just fantastic work.
Matthew Horsfall who is putting the indented heredocs.
I mean there is a list. I am not gonna be able. I mean if you'r going to have another episode we can sit down and just go.
</code></pre>
<p>[23:22] szabgab:
We can get back together a couple of month from now and see how things have progressed, and maybe when the next version of Perl is released, we can talk again.</p>
<p>[23:36] sawyer:
Yeah absoultely. I think that would be great. It's just there are too many for now.
Yeah I think very interesting things are happening. I am very happy to see how the group is working together now. And I'd be interested to see where we are going to take this. Because we are already introducing syntax, we are already introducing optimizations, we already introducing lower memory consumptions, the Unicode support that Perl has thanks to Karl Williamson's efforts, these are amazing things and we already have all that going on, so what we are going to be doing now, is a very big and interesting question to me.</p>
<p>[24:22] szabgab:
Okay, We'll talk about it later. Thank you for coming on the show.</p>
<p>[24:26] sawyer:
Thank you for having me. I blurted out as many things as I can in the least amount of time.</p>
<p>[24:33] szabgab:
Thank you very much. Bye bye.</p>
<p>[24:34] sawyer:
Yeah. Bye bye.</p>
<p>[/transcript]</p>
<!--

## Technical info

Recorded on 17 August 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>

There are a couple of places where we had a lot of dropped frames
and by the end of the recording the noise from the ventillator of my computer became pretty disturbing.
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS #1: Jason Crome on Perl Dancer 2</title>
    <summary type="html"><![CDATA[Interview with Jason Crome about the Perl Dancer web framework and how they handled the fine art of changes while providing backward compatibility.]]></summary>
    <updated>2016-08-23T19:01:01Z</updated>
    <pubDate>2016-08-23T19:01:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos-1-jason-crome-perl-dancer2" />
    <id>https://code-maven.com/cmos-1-jason-crome-perl-dancer2</id>
    <content type="html"><![CDATA[<p>Interview with Jason A. Crome one of the core developers of the <a href="http://perldancer.org/">Perl Dancer</a> web framework. We talked about how he got involved in the project and how they handled the upgrade process from Dancer 1 to Dancer 2 to avoid breaking any of the plugins.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/uVCpubfC9L4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<podcast>
<h2 class="title is-4">Jason A. Crome</h2>
<ul>
<li><a href="https://www.crome-plated.com/">Jason A. Crome</a></li>
<li><a href="https://metacpan.org/author/CROMEDOME">PAUSE</a></li>
<li><a href="https://twitter.com/cromedome">@cromedome</a></li>
<li><a href="https://github.com/cromedome">GitHub</a></li>
</ul>
<h2 class="title is-4">Links</h2>
<ul>
<li><a href="http://www.allaroundtheworld.fr/">All Around the World</a></li>
<li><a href="https://en.wikipedia.org/wiki/Massively_multiplayer_online_role-playing_game">Massively Multiplayer Online Game (MMORPG)</a></li>
<li><a href="http://booking.com/">Booking.com</a></li>
<li><a href="http://perldancer.org/">perldancer.org</a></li>
<li><a href="http://irc.perl.org">irc.perl.org</a></li>
<li><a href="https://github.com/PerlDancer/">GitHub for Perl Dancer</a></li>
<li><a href="https://www.perl.dance/">Perl Dancer conference</a></li>
</ul>
<h2 class="title is-4">Transcript</h2>
<p>[transcript]
[szabgab host1 Gabor Szabo]
[cromedome guest1 Jason A. Crome]</p>
<p>[0:00] szabgab:
Hello!
This is Gabor Szabo with the first episode of the Code Maven news podcast and screencast and interview project, and with me is <a href="https://www.crome-plated.com/">Jason A. Crome</a>, who is going to talk about the Perl Dancer project.</p>
<pre><code>Hi Jason, how are you?
</code></pre>
<p>[0:20] cromedome:
Hi! Thanks for having me here today. I am doing great.</p>
<p>[0:26] szabgab:
I hope it's going to be good. This is the first interview in this format. Let's get started, tell me a little bit about yourself.</p>
<p>[0:30] cromedome:
Okay, let's see, I've been programming professionally for probably about the last 20 years. The last 18 or so I've spent, I've started a technology company with some others in the United States, and we were writing software for the local government, here in the States.</p>
<pre><code>Last year, I've retired from that, and I've been active off and on in the Perl community for a number of years and when I decided to get back to work last fall, one of the things I've gravitated towards was the Dancer project, something that I've used a little bit in the past.

Eventually they had me join their team, and I've been doing a lot with that. In November I got hired on by [All Around the World](http://www.allaroundtheworld.fr/), a consulting firm out of France. There I am the technical lead on a project called Veure, which is a [Massively Multiplayer Online Game (MMORPG)](https://en.wikipedia.org/wiki/Massively_multiplayer_online_role-playing_game) written in Perl.
</code></pre>
<p>[1:43] szabgab:
Nice.</p>
<p>[1:46] cromedome:
I spend a lot of time in Perl these days.</p>
<p>[1:49] szabgab:
Okay, and is it using Dancer for this project or something else?</p>
<p>[1:54] cromedome:
Unrelated to Dancer, but there is a lot of overlap with the technologies I use in that project that I use in other aspects of my life.  I try to use a little bit of Dancer here and there at my day job when I can. Dancer is really personally a passion of mine.</p>
<p>[2:18] szabgab:
Tell me about Dancer. What is Dancer?</p>
<p>[2:26] cromedome:
My involvement in Dancer is funny actually. Back in <a href="http://2012.yapcna.org/">2012 YAPC in Madison, Wisconsin, USA</a> I was looking for a new web framework.</p>
<pre><code>The one that I've been using kind of died out and I sat in a couple of talks and Sawyer, one of the project leads, he is a very engaging speaker and he had a [really good talk about what Dancer was about](https://www.youtube.com/watch?v=2A6ZRZj_MEu4). It really fit the way that I've worked and I submitted a couple of pull-requests to them that got incorporated. I really didn't get back to it until last fall and a project I was using used Dancer, and as I started to run into issues with docs and a coouple of bugs I've noticed, I've started to send in pull-requests and Sawyer contacted me and said, &quot;You know if you keep doing this, then we are going to have to assimilate you into the core team,&quot; and a little bit later that's actually what happened.

But what Dancer is, it is a framework for building web applications. For those of you who are familiar with Perl, Perl has this great saying that &quot;Making Easy Things Easy and Hard Things Possible.&quot; 
</code></pre>
<p>That's really a philosophy that the Dancer framework has stuck with. If you want to build a web app and get up and running quickly, then Dancer is a great framework to do it with.</p>
<pre><code>If you've never done web programming, if you've never done Perl programming actually, it's a really nice entry point into the Perl ecosystem. If you are an experienced Perl programmer, you are not going to be disappointed either, because all of the power and flexibility that the Perl ecosystem allows you, you can channel that into your Dancer applications. 
You can make really large and elaborate web applications pretty easily. The framework takes care of a lot of things most of the web programmers don't want to think about all the time. It does those things really easily. Either through the core of the framework or through the number of plugins that it offers. It just does what you need it to and it kind of stays out of your way, it's great.
</code></pre>
<p>[4:58] szabgab:
Okay. I understand that there is something called Dancer and Dancer 2. Are these two versions? What is the relationship between them? Are you using the new one?</p>
<p>[5:10] cromedome:
Personally my involvement is almost exclusively with Dancer 2. The history behind these is that Dancer started out as a smaller project by our project founder, Alexis (<a href="https://twitter.com/sukria">Alexis Sukrieh</a>). I don't know if he quite had the vision, at the time when he created Dancer, that it was going to be as wildly successful as it was.
It was not really architected with that kind of growth in mind, so when he started to get more elaborate applications there were some things that would shoot you in the foot a little bit. And so the Dancer 2 project was started, from the ground up, to address these concerns.
It took a couple of years of development, but early in the middle of last year it hit critical mass, for a lack of a better term, and it was pretty feature equivalent to what Dancer 1 had at that point, with the exception being the plugin ecosystem. Which is what we have spent most of 2016 addressing, actually.</p>
<p>[6:38] szabgab:
Okay, so what kinds of plugins are there, that are mostly used or that you use or are recommended or, I don't know...?</p>
<p>[6:50] cromedome:
My favorite plugins personally...
There is a variety of plugins for everything, there is templating plugins, there is session and state management, there are plugins for MongoDB, for Redis, for Memcached, there are plugins available for generating Captcha images, there is authorization frameworks.</p>
<pre><code>The core of the framework is actually pretty minimalistic. It lets you say, if visitors come to my application and they visit this URL, this is what I am going to present them with, or this is the code that will happen. A lot of the additional magic happens in the plugin ecosystem. Dancer knows how to talk to a templating engine, but other then a very simple templating engine that we have out of the box, all the rest of the templating functionality is provided through plugins. I use a templating framework called Template::Toolkit. I've been using it for years and I am very familiar with it and that functionality is provided through a plugin.

I use [Redis](http://redis.io/) a lot for caching. We have both a generic Redis plugin that accesses the functionality of Redis, we actually have a session plugin that stores your application state information in Redis, just like it would with any of the other session engines in files or whatever. 

There is a lot out there. One of the things that you could do with Dancer 1 that you couldn't do in Dancer 2 was plugins that use functionality provided by other plugins and this was kind of a blocker for some people who wanted to move from Dancer 1 to Dancer 2. Actually the code for plugin 2 was done a long time ago, but one of our project focuses is on stability.
</code></pre>
<p>[9:18] szabgab:
Can you repeat...?</p>
<p>[9:22] cromedome:
Plugin 2 was actually done very early in 2016, but one of our key focuses is stability and not breaking production code. So just releasing plugin 2 with a lot of breaking changes, wasn't going to work for us.</p>
<pre><code>So a couple of our developers, [Peter Mottram](https://metacpan.org/author/SYSPETE) specifically, took on the lion share of it, syspete as he is known in the Perl community.

He individually tested every plugin in the Dancer ecosystem with the new plugin 2. Figured out what broke and if we had access to those plugins, then we fixed them, and if they were written by somebody else, we actually sent pull-requests to the ones we did not control. So that we knew, out of the gate, that the whole plugin ecosystem would function with our new plugin architecture.

It was kind of funny, there were still a couple of them that we could not patch, so we even spent some time building a compatibility layer, so that the Dancer 1 plugins could still use plugin 2  with no syntactic changes. Stability and not breaking other peoples code, is very important to us.
</code></pre>
<p>[10:57] szabgab:
Yeah, It's a known problem, that moving forward and staying backward compatible, is not compatible with each other, and then you have to make a decision at one point, that you more or less stop your progress, I guess. You can move much slower in order to maintain backward compatibility.</p>
<pre><code>Okay, so what kind of project do you know that exist, that are using Dancer, that you can point out?
</code></pre>
<p>[11:37] cromedome:
The Perl Dancer conference web site is a piece of software for managing the conference registration and that's one application written in Dancer. There is a blog engine called <a href="http://pearlbee.org/">PearlBee</a> that was release last year, earlier this year, that is based on Dancer as well. In fact the <a href="http://blogs.perl.org/">Perl community's blog site</a> is in the middle of being transitioned over to this. I know <a href="http://booking.com/">Booking.com</a>, which is a huge sponsor and hugely involved in the Perl community, has changed some of their blogging tools over to PearlBee as well.</p>
<pre><code>I can think of a lot of companies that are using Dancer in their applications and behind the scenes, but as far as canned software packages like wikis and blogs, I never see a whole lot of those coming out of the Perl community. It always seems like we are focused on getting other jobs done.
</code></pre>
<p>[12:50] szabgab:
Yeah, I understand. So I think more or less a closing question here, actually a couple of closing questions. I think I have.</p>
<p>[13:05] cromedome:
Sure.</p>
<p>[13:06] szabgab:
One of them is if someone wants to get involved in using Dancer or even want to contribute. Where do these people need to go? How can they find you?</p>
<p>[13:21] cromedome:
The easiest place to start would be our web site <a href="http://perldancer.org/">perldancer.org</a>, we have an IRC channel at <a href="http://irc.perl.org">irc.perl.org</a> just come to #dancer and we're there. It is a very friendly community, it is a very beginner friendly we have a very beginner friendly code of conduct, and we don't tolerate abuse of new people.</p>
<pre><code>We are also on GitHub, if you look on [GitHub for Perl Dancer](https://github.com/PerlDancer/) all the plugins and the actual source code of Dancer can be found there. 
Our issues, our open tickets are managed at GitHub and we have a lot of tickets out there that are marked as beginner friendly or up for grabs. 
Anybody who wants to contribute to Dancer, write a plugin, send us a documentation patch, look for one of the beginner friendly tickets. 
It is a very eassy project to get involved in. It is a very easy to follow codebase. It is a very thriving and happy community of people. It is one of the things that drew me to Dancer over so many of the other open source projects, is that we really have a great community.
</code></pre>
<p>[14:46] szabgab:
Thanks, that's great input, I hope that some people will join you. Do you have any other things to add that we have not talked about that you'd like to add?</p>
<p>[14:57] cromedome:
Yeah actually the <a href="https://www.perl.dance/">Perl Dancer conference</a> is coming up next month at the end of September in Vienna, Austria. Not only it is a great time to come to Vienna, but it is a great time for both beginning and experienced Dancer programmers, to come and find some great things about Dancer, learn about things that we have in the works, get to hack on Dancer with some of your peers, and just hang out and enjoy time in Austria.</p>
<p>[15:30] szabgab:
It's a pretty long flight from the U.S. to Vienna. Are you going to be there?</p>
<p>[15:37] cromedome:
Yes, I am.</p>
<p>[15:38] szabgab:
That's great. So if anyone wants to meet Jason at the Dancer conference in Vienna, we put links in the show-notes for the conference and for the other things you have mentioned.
So thank you very much for coming on the show and I hope that in a couple of month, we can catch up again with some updates, new releases, new information about the project. Thank you very much.</p>
<p>[16:06] cromedome:
Thank you. Thanks for having me.</p>
<p>[16:07] szabgab:
Bye bye.</p>
<p>[16:08] cromedome:
Bye.</p>
<p>[/transcript]</p>
<!--
## Technical info

Recorded on 17 August 2016 with "Ecamm Network Call Recorder for Skype v2.6.1" using the following settings:

<pre>
QuickTime Options:
  Audio Encoding: Uncompressed
  Video Quality: High
  Video Image Size: 854 x 480 (Wide)
  Video Frame Rate: Maxium

Recoding Option:
  Record Video: Multi-track
</pre>

There are a couple of places where we had a lot of dropped frames
and by the end of the recording the noise from the ventilator of my computer became pretty disturbing.
-->
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CMOS - Code-Maven Open Source podcast</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-08-23T19:00:01Z</updated>
    <pubDate>2016-08-23T19:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cmos" />
    <id>https://code-maven.com/cmos</id>
    <content type="html"><![CDATA[<p>CMOS, the Code-Maven Open Source podcast helps you become familiar with a wide range of projects by interviewing users or developers of these projects.</p>
<p>You can subscribe with your favorite Podcast listener via the <a href="/rss/cmos">RSS feed <img src="/img/feed-icon16x16.png" alt="CMOS RSS feed" /></a>
or via <a href="https://itunes.apple.com/il/podcast/code-maven/id1153427237">iTunes <img src="/img/itunes.png" alr="iTunes" /></a></p>
<h2 class="title is-4">About the show</h2>
<p>If you are thinking about suggesting yourself or someone else to be on the show, but were wondering if that would be
relevant, I've tried to group together the types of guests we had so far:</p>
<ul>
<li>Project managers like <a href="/cmos-5-lucy-greco-dictationbridge">Lucy Greco</a> and
<a href="/cmos-8-lynn-cyrin-bundler-rubygems">Lynn 'Cyrin' Conway</a></li>
<li>Core developers of a project like <a href="/cmos-7-obinwanne-hill-restivejs">Obinwanne Hill</a> and
<a href="/cmos-4-tom-hudson-gron">Tom Hudson</a>, or <a href="/cmos-9-ire-aderinokun">Ire Aderinokun</a></li>
<li>Contributor of a project like <a href="/cmos-3-joel-berger-mojolicious">Joel Berger</a>.</li>
<li>Enthusiastic (and very knowledgable) user like <a href="/cmos-6-tally-barak-graphql">Tally Barak</a>.</li>
</ul>
<p>The episodes usually last less than 25 minutes.</p>
<p>If you would like to talk about an open source project, get in touch with <a href="https://twitter.com/szabgab">Gabor</a>.</p>
<h2 class="title is-4">Other recommended podcasts</h2>
<p>If you are interested in deep discussions with open source developers, I recommend
the <a href="https://changelog.com/">ChangeLog</a> and the <a href="https://changelog.com/rfc/">Request For Commits</a>.</p>
<p>If you are new to progamming I'd recommend the <a href="http://codenewbie.org/">CodeNewbie</a> podcast.</p>
<p>They are awesome.</p>
<h2 class="title is-4">How to listen to podcasts?</h2>
<p>Personally I use <b>Podcast Addict on Android</b> and I've <a href="http://szabgab.com/podcasts.html">described it how</a> along with
a few other recommended podcasts. In addition there are plenty of <a href="https://www.youtube.com/results?search_query=how+to+listen+to+podcasts">explanations on YouTube</a>.</p>
<h2 class="title is-4">The Episodes</h2>
<ul>
<li><a href="cmos-0">CMOS #0: Introduction</a></li>
<li><a href="cmos-1-jason-crome-perl-dancer2">CMOS #1: Jason Crome on Perl Dancer 2</a></li>
<li><a href="cmos-2-sawyer-perl5">CMOS #2: Sawyer X on Perl 5</a></li>
<li><a href="cmos-3-joel-berger-mojolicious">CMOS #3: Joel Berger on Mojolicious</a></li>
<li><a href="cmos-4-tom-hudson-gron">CMOS #4: Tom Hudson - gron for making JSON greppable</a></li>
<li><a href="cmos-5-lucy-greco-dictationbridge">CMOS #5 Lucy Greco - DictationBridge - helping the visually impaired</a></li>
<li><a href="cmos-6-tally-barak-graphql">CMOS #6: Tally Barak on GraphQL</a></li>
<li><a href="cmos-7-obinwanne-hill-restivejs">CMOS #7: Obinwanne Hill on RestiveJS</a></li>
<li><a href="cmos-8-lynn-cyrin-bundler-rubygems">CMOS #8: Lynn 'Cyrin' Conway on Bundler, RubyGems and Ruby Together</a></li>
<li><a href="cmos-9-ire-aderinokun">CMOS #9: Ire Aderinokun - Khaled Bot, Can I Use Embed, Formhack</a></li>
<li><a href="cmos-10-michael-kennedy">CMOS #10: Michael Kennedy - Talk Python To Me</a></li>
<li><a href="cmos-11-mohammad-s-anwar">CMOS #11: Mohammad S. Anwar - Contributing to CPAN every single day</a></li>
<li><a href="cmos-12-randal-schwartz">CMOS #12: Randal Schwartz the host of FLOSS Weekly</a></li>
<li><a href="cmos-13-trung-dinh-quang">CMOS #13: Trung Đinh Quang on GitHub Explorer - a progressive web app</a></li>
<li><a href="cmos-14-johnny-ray-austin">CMOS #14: Johnny Ray Austin - Mo - Django - VueJS</a></li>
<li><a href="cmos-15-prosper-otemuyiwa">CMOS #15: Prosper Otemuyiwa - Laravel</a></li>
<li><a href="cmos-16-jan-henning-thorsen-and-marcus-ramberg">CMOS #16: Jan Henning Thorsen and Marcus Ramberg about Convos, the web-based IRC client</a></li>
<li><a href="cmos-17-moyinoluwa-adeyemi">CMOS #17: Moyinoluwa Adeyemi creating Android Watch in Yorùbá</a></li>
<li><a href="cmos-18-timi-ajiboye">CMOS #18: Timi Ajiboye on Client Manager, Resque, Friendly ID and other Rails gems</a></li>
<li><a href="cmos-19-job-van-achterberg">CMOS #19: Job van Achterberg - Inclusive design</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>CSV - Comma Separated Files</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-05-31T15:00:01Z</updated>
    <pubDate>2016-05-31T15:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/csv" />
    <id>https://code-maven.com/csv</id>
    <content type="html"><![CDATA[<p>CSV stands for Comma Separated Values, though in reality, the character that separates the values can be anything.
<code>,</code> is probably the most popular one, but there are plenty of files where the separator is semi-colon <code>;</code>.
In other places it is <code>|</code>, and yet in other places it is a <code>\t</code> TAB.
The latter is usually also called TSV - Tab Separated Values.</p>
<p>We'll just use the name <b>CSV</b> and mean any of these cases.</p>
<p>A CSV file is great for representing table-like data. Something you could also store in Excel,
<a href="https://www.libreoffice.org/discover/calc/">Calc of Libre Office</a>, or any other Spreadsheet application.
Without the formatting and without the calculating of expressions. Just the raw data.</p>
<p>A CSV file can be seen as a table from a relational database, one that you'd normally interrogate using SQL.
If you need to represent multiple SQL tables, that will require one CSV file for each table.</p>
<p>A rather simple example looks like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/process_csv_file.csv">examples/data/process_csv_file.csv</a></strong></p>
<pre><code class="language-csv">Tudor;Vidor;10;Hapci
Szundi;Morgo;7;Szende
Kuka;Hofeherke;100;Kiralyno
Boszorkany;Herceg;9;Meselo

</code></pre>
<p>Here each field is separated by a semi-colon <code>;</code> and each physical row represents one row in the table.</p>
<p>(Data: <a href="https://hu.wikipedia.org/wiki/H%C3%B3feh%C3%A9rke">Snowwhite and the 7 Dwarfs</a> in Hungarian.)</p>
<p>A more complex example is this one:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/distance.csv">examples/data/distance.csv</a></strong></p>
<pre><code class="language-csv">Budapest,Bukarest,1200,km
Tel Aviv,Beirut,500,km
London,Dublin,300,km
New York,&quot;Moscow, East&quot;,6000,km
Local,&quot;Remote
Location&quot;,10,km

</code></pre>
<p>(Data: totally made up.)</p>
<p>Here the fields are separated using <code>,</code> and we can see two special cases:</p>
<h2 class="title is-4">Handle embedded speparator characters</h2>
<p>The line starting with &quot;New York&quot; contains a field that has a comma <code>,</code> in the middle.
In order to make it clear that the comma between Moscow and East is part of the element the creator of
the CSV file can do two things. Either wrap the element in quotes as happend in this example:</p>
<pre><code>New York,&quot;Moscow, East&quot;,6000,km
</code></pre>
<p>The character can also be &quot;escaped&quot; using a back-slash <code>\</code>. (Escaping here means that the character looses
its special meaning separating fields.</p>
<p><code>New York,Moscow\, East,6000,km</code></p>
<p>The software creating the CSV file needs to be able to add these extra marks and the software reading the CSV file must
be able to understand them and interprete them correctly.</p>
<h2 class="title is-4">Embedded newline (Multi-line fields)</h2>
<p>The second special case can be seen in the lines which comprise a single logical row.
We already know that the quotation character <code>&quot;</code> marks the beginning of a field which ends with the next quotation character
<code>&quot;</code>, but in this case that second charcter is in a subsequent physical row. Effectively here we have a field that has a newline
embedded in it.</p>
<pre><code>Local,&quot;Remote
Location&quot;,10,km
</code></pre>
<p>If you are familiar with any of the Spreadsheet software you probably have already seen files with a few multi-line fields.
This is how such fields are represented.</p>
<p>Here too, it is very important for the software to be able to parse the file correctly. A simple call to <code>split</code>
won't work properly.</p>
<h2 class="title is-4">Header or not?</h2>
<p>In the earlier examples each row contained data, though rows were not necessary aligned along newlines.</p>
<p>In the next example the first row of the file is the header. In that row the values are the names of the columns similar to
what you would have in a relational database, except that in this case there is no restriction as to what the column
name can contain. So we have one column with a space in the name and another column where the name (the content of the first row)
has both space and parenthese.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/planets.csv">examples/data/planets.csv</a></strong></p>
<pre><code class="language-csv">Planet name,Distance (AU),Mass
Mercury,0.4,0.055
Venus,0.7,0.815
Earth,1,1
Mars,1.5,0.107
Ceres,2.77,0.00015
Jupiter,5.2,318
Saturn,9.5,95
Uranus,19.6,14
Neptune,30,17
Pluto,39,0.00218
Charon,39,0.000254

</code></pre>
<p>When reading such a file one must treat the first row as special. At a minimum it should not be used it as data,
but maybe it can even be used as way to refernce the values in the various fields.</p>
<p>(Data source <a href="https://en.wikipedia.org/wiki/Solar_System">Solar System</a>. No really.)</p>
<h2 class="title is-4">Implementations of CSV parsers</h2>
<ul>
<li><a href="https://perlmaven.com/csv">CSV in Perl</a></li>
<li><a href="https://docs.python.org/2/library/csv.html">CSV in Python 2.x</a></li>
<li><a href="https://docs.python.org/3/library/csv.html">CSV in Python 3.x</a></li>
<li><a href="/create-and-download-csv-with-javascript">Create CSV in JavaScript</a></li>
<li><a href="/reading-csv-file-in-ruby">Read CSV in Ruby</a></li>
</ul>
<p>See also an <a href="/exercise-add-numbers-from-csv-file">exercise to add numbers taken from a CSV file</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Error 718: Missing files cannot be found.</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-05-27T18:00:01Z</updated>
    <pubDate>2016-05-27T18:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/missing-files-cannot-be-found" />
    <id>https://code-maven.com/missing-files-cannot-be-found</id>
    <content type="html"><![CDATA[<p>Once upon a time I worked at a company on an automated testing system. It had lots of &quot;interesting&quot; things in their
code-base, but one that stood out was one of the error messages:</p>
<h2 class="title is-4">Error 718: Missing files cannot be found</h2>
<p>Of course. If the file is missing, it cannot be found. What's the story?</p>
<h2 class="title is-4">List of missing files</h2>
<p>The system had a step checking if all the required files are present and it created a list of the files that were missing
and saved it in a file called <code>missing_files.txt</code>.</p>
<p>A later step then would read the content of <code>missing_files.txt</code> and report it it.</p>
<p>The question was, what to do if the file &quot;missing_files.txt&quot; did not exist? The rather unfortunate choice was to report
<code>Missing files cannot be found</code> with an obscure error number.</p>
<p>The problem was made worse as the 'missing_files.txt' file would only be created if there was at least one missing file.
In normal circumstances, when all the files were supplied, the 'missing_files.txt' was not created and this the error was reported.</p>
<p>Yes I know. This whole thing looks strange.</p>
<h2 class="title is-4">Better solution?</h2>
<p>A much better choice would have been an error message such as <code>The 'missing_files.txt' file could not be found.</code>
with possibly a link to a much more detailed explanation.</p>
<p>An even better solution would be probably to alway create the 'missing_files.txt' file, but leave it empty if
there are no missing file.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Almost infinite recursive template in AngularJS for representing tree structures</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-05-18T23:30:01Z</updated>
    <pubDate>2016-05-18T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/angular-recursive-template" />
    <id>https://code-maven.com/angular-recursive-template</id>
    <content type="html"><![CDATA[<p>Representing a tree-like structure can be a tricky thing, but as plenty of other examples
found on the Internet show, people need to do it. Recently I also needed to do that and it
worked quite well till the people who built the data have added another level to the tree.
Then it blew up with a horrible error message. It was so big that the link leading to
the Angular Error report site was also broken.</p>
<p>After some additional research I found the solution. Let's see it.</p>
<h2 class="title is-4">Recursive template with static data</h2>
<p>First let's see the &quot;standard&quot; solution showing tree stuctures:</p>
<p>Our JavaScript code looks like this:</p>
<p>&lt;include file=&quot;examples/angular/recursive_template/recursive.js&quot;</p>
<p>It doesn't have much in it, just the data structure.</p>
<p>The HTML, including the template look like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/recursive_template/recursive.html">examples/angular/recursive_template/recursive.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot; ng-app=&quot;DemoApp&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;recursive.js&quot;&gt;&lt;/script&gt;

  &lt;script type=&quot;text/ng-template&quot; id=&quot;tree_view&quot;&gt;
  {{ node.title }}
    &lt;ul ng-if=&quot;node.tree&quot;&gt;
        &lt;li ng-repeat=&quot;node in node.tree&quot; ng-include=&quot;'tree_view'&quot;&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/script&gt;

&lt;/head&gt;
&lt;body  ng-controller=&quot;DemoController&quot;&gt;
    &lt;ul&gt;
        &lt;li ng-repeat=&quot;node in tree&quot; ng-include=&quot;'tree_view'&quot;&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/recursive_template/recursive.html">view</a></p>
<p>the <b>tree_view</b> is the name of the template and it includes itself.</p>
<p>You can click on the <b>try</b> link to see the result.</p>
<h2 class="title is-4">Recursive template with generated data</h2>
<p>In order to demonstrate the problem, and to avoid creating a large data structure manually,
I've created another example in which we generate the same tree structure using a
recursive JavaScript function. There are some logging messages included to make
it easier to see what's going on. (Read: I spent quite a few minutes getting the function right
and needed those printouts.)</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/recursive_template/recursive_generated.js">examples/angular/recursive_template/recursive_generated.js</a></strong></p>
<pre><code class="language-js">angular.module('DemoApp', [])
.controller('DemoController', function($scope, $log) {
    var build_tree = function(depth) {
        $log.log('build_tree', depth);
        var leaf = [
                {
                    title: &quot;Level &quot; + depth
                }
            ]
        if (depth &gt; 1) {
            leaf[0].tree = build_tree(depth-1);
        }
        return leaf;
    }

    $scope.tree = build_tree(10);
    $log.log($scope.tree);
});

</code></pre>
<p>Besides the name of the included JavaScript file, the HTML did not change:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/recursive_template/recursive_generated.html">examples/angular/recursive_template/recursive_generated.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot; ng-app=&quot;DemoApp&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;recursive_generated.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;text/ng-template&quot; id=&quot;tree_view&quot;&gt;
  {{ node.title }}
    &lt;ul ng-if=&quot;node.tree&quot;&gt;
        &lt;li ng-repeat=&quot;node in node.tree&quot; ng-include=&quot;'tree_view'&quot;&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/script&gt;
&lt;/head&gt;
&lt;body  ng-controller=&quot;DemoController&quot;&gt;
    &lt;ul&gt;
        &lt;li ng-repeat=&quot;node in tree&quot; ng-include=&quot;'tree_view'&quot;&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/recursive_template/recursive_generated.html">view</a></p>
<p>As long as we give a number less than 10 to the function, which means the number of
levels in the tree, everything works find. Once we pass 10 or any larger number we
get a nasty error in <a href="/open-javascript-console">the JavaScript console</a>.
If you are lucky and the data structure isn't
too big, like in this example, the error will include a link that, after further
cleaning leads to &lt;href=&quot;<a href="https://docs.angularjs.org/error/$rootScope/infdig?p0=10%22%3Ethis">https://docs.angularjs.org/error/$rootScope/infdig?p0=10&quot;&gt;this</a> error page</a></p>
<p>It reads:</p>
<pre>
Error: $rootScope:infdig Infinite $digest Loop
10 $digest() iterations reached. Aborting!
</pre>
<p>In a nutshell: we had a recursive call in Angular, (this one we knew, this is what we wanted),
but in order to protect us from infinitely loops AngularJS (as many programming languages too)
imposes an arbitrary limit to the number of recursive calls. In the case of AngularJS this number is 10.
So one we reach this depth, AngularJS stops the recursion and reports the error.</p>
<p>At the end of the page it also suggests that we can adjust the limit through the
<a href="https://docs.angularjs.org/api/ng/provider/$rootScopeProvider">$rootScopeProvider</a>.</p>
<h2 class="title is-4">Increase the recursion limit by setting $rootScopeProvider.digestTtl</h2>
<p>The solution is then to increase the limit to something that matches our need.
Increasing this number means that in case you get in a unwanted recursive call
Angular will work harder before putting an end to the ordeal which might mean
that the application will be less responsive, so change it with care.</p>
<p>In this example I've increased the value to 14 which will be enough for our example:</p>
<pre><code class="language-javascript">.config(function($rootScopeProvider){
    $rootScopeProvider.digestTtl(14);
})
</code></pre>
<p>Here is the full JavaScript code:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/recursive_template/recursive_generated_fixed.js">examples/angular/recursive_template/recursive_generated_fixed.js</a></strong></p>
<pre><code class="language-js">angular.module('DemoApp', [])
.config(function($rootScopeProvider){
    $rootScopeProvider.digestTtl(14);
})
.controller('DemoController', function($scope, $log) {
    var build_tree = function(depth) {
        $log.log('build_tree', depth);
        var leaf = [
                {
                    title: &quot;Level &quot; + depth
                }
            ]
        if (depth &gt; 1) {
            leaf[0].tree = build_tree(depth-1);
        }
        return leaf;
    }

    $scope.tree = build_tree(10);
    $log.log($scope.tree);
});

</code></pre>
<p>Here you can try it:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/recursive_template/recursive_generated_fixed.html">examples/angular/recursive_template/recursive_generated_fixed.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot; ng-app=&quot;DemoApp&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;recursive_generated_fixed.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;text/ng-template&quot; id=&quot;tree_view&quot;&gt;
  {{ node.title }}
    &lt;ul ng-if=&quot;node.tree&quot;&gt;
        &lt;li ng-repeat=&quot;node in node.tree&quot; ng-include=&quot;'tree_view'&quot;&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/script&gt;
&lt;/head&gt;
&lt;body  ng-controller=&quot;DemoController&quot;&gt;
    &lt;ul&gt;
        &lt;li ng-repeat=&quot;node in tree&quot; ng-include=&quot;'tree_view'&quot;&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/recursive_template/recursive_generated_fixed.html">view</a></p>
<h3 class="title is-5">Screenshots</h3>
<p><img src="/img/shots/angular-recursive-template.png" alt="" /></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Create calculator</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-05-12T17:01:25Z</updated>
    <pubDate>2016-05-12T17:01:25Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-calculator" />
    <id>https://code-maven.com/exercise-calculator</id>
    <content type="html"><![CDATA[<p>Create a command line calucaltor that will prompt for two numbers and an operator
and will calculate the result. Handle the following operators: <code>+</code>, <code>-</code>, <code>*</code>, and <code>/</code>.</p>
<p>An interaction should look like this:</p>
<pre>
$ mycalc
First number: 23
Second number: 19
Operator: +
Result: 42
</pre>
<p>where the numbers 23, 19 and the operator + are typed in by the user.</p>
<!--
## Tools
* <a href=""></a>

-->
<h2 class="title is-4">Solutions</h2>
<ul>
<li>
<p><a href="/calculator-in-java">Java</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Record editor in Angular for fixed list of values</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-05-08T22:30:01Z</updated>
    <pubDate>2016-05-08T22:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/record-editor-in-angular-for-fixed-list-of-values" />
    <id>https://code-maven.com/record-editor-in-angular-for-fixed-list-of-values</id>
    <content type="html"><![CDATA[<p>Earlier we have started to build an editor in Angular to edit a record. In the first article we have prepared
and editor for a simple <a href="/record-editor-in-angular">input box for free text</a>.</p>
<p>This time we'll add an editor for a record where the user must choose from a fixed list of values.</p>
<p>In the HTML we have two pages in two <code>div</code> elements. One of them is for the list of records, the
one is the editor. In addition we also have an <code>h2</code> element called 'Records' which is always visible.
It shows in a rather readable way the content of the <code>records</code> attribute which contains all the records.</p>
<p>You can try the code by clicking on &quot;Try&quot;.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/editor_with_selector/edit_record.html">examples/angular/editor_with_selector/edit_record.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Edit Record&lt;/title&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;edit_record.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body ng-app=&quot;EditRecordApp&quot; ng-controller=&quot;EditRecordController&quot;&gt;
 
&lt;div ng-show=&quot;page === 'list'&quot;&gt;
  &lt;h2&gt;Listing&lt;/h2&gt;
 
  &lt;div ng-repeat=&quot;r in records&quot;&gt;{{r.name}}
   &lt;button ng-click=&quot;edit($index)&quot;&gt;Edit&lt;/button&gt;
  &lt;/div&gt;
&lt;/div&gt;
 
&lt;div ng-show=&quot;page === 'editor'&quot;&gt;
  &lt;h2&gt;Editor&lt;/h2&gt;
  &lt;div&gt;Name: &lt;input ng-model=&quot;editor.name&quot;&gt;&lt;/div&gt;
  Planet: &lt;select ng-options=&quot;v as v.name for v in values track by v.id&quot; ng-model=&quot;editor.planet&quot;&gt;&lt;/select&gt;
 
   &lt;div&gt; &lt;button ng-click=&quot;save()&quot;&gt;Save&lt;/button&gt; &lt;button ng-click=&quot;cancel()&quot;&gt;Cancel&lt;/button&gt; &lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;Records&lt;/h2&gt;
&lt;pre&gt;
{{records | json : pretty}}
&lt;/pre&gt;
 
&lt;/body&gt;
&lt;/html&gt;


</code></pre>
<p><a href="/examples/angular/editor_with_selector/edit_record.html">view</a></p>
<p>In the JavaScript file we have two function that represent out interaction with the remote servers.
<code>get_data</code> sets the current list of records as we have received from the server, <code>get_values</code>
returns the list of values available for the <code>planet</code> field.</p>
<p><code>$scope.page</code> holds the name of the current page. We start by showing the <code>list</code> of the records.</p>
<p>When the user clicks on the <code>Edit</code> button the <code>$scope.edit</code> is called, passing the <code>$index</code>
of the current record in the list of records in <code>$scope.records</code>.</p>
<p>We copy the content of the current record to <code>$scope.editor</code> and switch to the <code>editor</code> view.</p>
<p>We use an <code>ng-options</code> directive to show a <code>select</code> element and we use
<code>&quot;v as v.name for v in values track by v.id&quot;</code> to actually list the potential values.
In this case the use of <code>track by</code> is not critical, as the values themselves are unique,
but if there can be duplication of values, then we must explicitly tell AngularJS which field to use
as unique identifier for the record. Without that <code>ng-options</code> will break.</p>
<p>If the user clicks <code>Cancel</code> we switch back to the list view removing the content of the <code>$scope.editor</code> attribute.</p>
<p>If the user clicks <code>Save</code> we first copy the content of the <code>$scope.editor</code> back to <code>current_record</code>
and then clear the content of <code>$scope.editor</code>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/editor_with_selector/edit_record.js">examples/angular/editor_with_selector/edit_record.js</a></strong></p>
<pre><code class="language-js">angular.module(&quot;EditRecordApp&quot;, [])
  .controller(&quot;EditRecordController&quot;, function($scope) {
    $scope.page = 'list';
 
    $scope.records = get_data();
	$scope.values = get_values();
 
    $scope.edit = function(idx) {
        $scope.editor = angular.copy($scope.records[ idx ]);
        $scope.current_record = idx;
        $scope.page = 'editor'
    }
 
    $scope.cancel = function() {
        $scope.editor = null;
        $scope.page = 'list';
    }
 
    $scope.save = function() {
        $scope.records[ $scope.current_record ] = angular.copy($scope.editor);
        $scope.editor = null;
        $scope.page = 'list';
    }
    
});
 
var get_data = function() {
   return [
      {
        'name' : 'Foo'
      },
      {
        'name' : 'Bar',
        'planet' : {
            'id' : 1
        }
      },
      {
        'name' : 'Qux',
        'planet': {
            'name': 'Venus'
        }
      },
      {
        'name' : 'ET',
        'planet': 'Mars'
      }
   ];
};

var get_values = function() {
	return [
		{
			'id' : 1,
			'name' : 'Mercury'
		},
		{
			'id' : 2,
			'name' : 'Venus'
		},
		{
			'id' : 3,
			'name' : 'Earth'
		},
	];
};

</code></pre>
<p>As you can see there are 4 cases in the original data. 'Foo' does not have any planet in the original data.
In this case the list selector will come up empty, but once we selected a value there is no going back.
(Well, except if we press cancel and don't save the change.)</p>
<p>In the case of 'Bar' the 'planet' attribute holds an object (hash for Ruby and Perl programmers, dictionary for Python programmers)
with the id of the planet from the <code>$scope.values</code> list. When we open the editor it will automatically select and display
the proper value.  Once we click on save (leaving the same value or selecting another planet) the full value record (both name and id)
will be stored in <code>$scope.records</code>.</p>
<p>'Qux' has a planet in the original data, but it is represented only by its name. Our solution does not know what to do with it
as the values are identified by their id. So when we try to <code>Edit</code> this record we'll have no value selected in the planet selector.</p>
<p>The same goes with 'ET', whose planet is not an object but a simple string.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Create and download data in CSV format using plain JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-03-23T23:30:01Z</updated>
    <pubDate>2016-03-23T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/create-and-download-csv-with-javascript" />
    <id>https://code-maven.com/create-and-download-csv-with-javascript</id>
    <content type="html"><![CDATA[<p>There can be cases, especially in Single Page Applications, when you have some data in the browser already
that you have probably received via an Ajax call that you'd like to let your users download.</p>
<p><a href="https://en.wikipedia.org/wiki/Comma-separated_values">CSV</a> is a nice and simple format to
keep tabular information.</p>
<p>In this simple example you'll see how to let your users save data from the browser.</p>
<p>This solution only works in the simple case, but it could be improved to handle some of the stranger cases as well.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/download_csv.html">examples/js/download_csv.html</a></strong></p>
<pre><code class="language-html">&lt;script&gt;
var data = [
   ['Foo', 'programmer'],
   ['Bar', 'bus driver'],
   ['Moo', 'Reindeer Hunter']
];


function download_csv() {
    var csv = 'Name,Title\n';
    data.forEach(function(row) {
            csv += row.join(',');
            csv += &quot;\n&quot;;
    });

    console.log(csv);
    var hiddenElement = document.createElement('a');
    hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);
    hiddenElement.target = '_blank';
    hiddenElement.download = 'people.csv';
    hiddenElement.click();
}
&lt;/script&gt;

&lt;button onclick=&quot;download_csv()&quot;&gt;Download CSV&lt;/button&gt; 

</code></pre>
<p><a href="examples/js/download_csv.html">view</a></p>
<p>The <code>data</code> is just some array of arrays holding, well, the data. It does not really matter how it got into the browser.</p>
<p>The <code>download_csv</code> function that is triggered by the click of the button, will create a string that will become
the content of the file on the disk of the user. In the first line we add the header row and finish it with a newline (<code>\n</code>).
Then using a <code>forEach</code> loop we add additional lines separating the values with comma (<code>,</code>). After all we
are creating a file with comma separated values. Each line is finished with a newline.</p>
<p>Once we have the content in some variable we create a an <code>a</code> element and in the link (the <code>href</code> part)
we add the URI-encoded version of the future CSV file. We can even add the future name of the file which is 'people.csv'
in our case. Without that Chrome just saved the file calling it 'download.csv'.</p>
<p>The last step is to trigger the newly created element which tell the browser to download the &quot;file&quot;.</p>
<h2 class="title is-4">Caveat</h2>
<p>This solution only handles the case when the data is &quot;simple&quot;.
If the data might have comma <code>,</code> in it then, in order for the file to work properly we'll have to
put the value with the comma in it inside quotes. This can be added quite easily.</p>
<p>However, what happens if the data can also contain quotes? We will then have to escape those.</p>
<p>This is not &quot;unsolvable&quot; of course, but it needs some more work and currently I did not have the need for that.</p>
<h2 class="title is-4">Comments</h2>
<p>In Firefox is not working. I click the button and nothing happens.Thanks</p>
<hr />
<p>Firefox requires the download A-element to be present in the DOM before clicking and not created dynamically. So, just add a hidden <a id=dummy_download> or similar and fetch that instead of using createElement and you're set. :)</p>
<p>(This might not be the official explanation, but it works)</p>
<hr />
<p>hye how can i click the save button and it will automatically save into my server not my laptop ?</p>
<hr />
<p>Excellent little example - just what I needed.
Thanks very much Gabor.</p>
<hr />
<p>Hi, is there any check to prevent delimiter inside data? What if any data will contain delimiter (&quot;,&quot;)? rows and columns wont match. Is there workaround for that?</p>
<hr />
<p>thanks, very handy!</p>
<hr />
<p>thank you .....its perfect</p>
<hr />
<p>I'm glad you explain each. line of code. Thanks!</p>
<hr />
<p>Thank you</p>
<hr />
<p>Chrome has an issue using encodeURI if the filesize is greater than 1mb. This discussion on StackOverflow shows how to use createObjectURL instead.
<a href="https://stackoverflow.com/questions/24610694/export-html-table-to-csv-in-google-chrome-browser/24611096#24611096">https://stackoverflow.com/questions/24610694/export-html-table-to-csv-in-google-chrome-browser/24611096#24611096</a></p>
<hr />
<p>Hi, It is not working in IE 11. I have added tag in DOM. Whenever call function to download csv, getting alert, &quot;Do you want to open application from this website&quot;. After click on Allow csv is not dwonloading. Working fine on chrome. Please help to eun on IE 11.</p>
<hr />
<p>Thank you very much!</p>
<hr />
<p>hello....I need your help...i want to export form data into csv file using plain JS</p>
<hr />
<p>Is there any option to set password for the files.</p>
<hr />
<p>How can we download multiple sheets?</p>
<hr />
<h2 class="title is-4">what if my delimiter in the string is ; instead of comma</h2>
<p>Then join with a semi-colon instead;</p>
<p>csv += row.join(';');</p>
<hr />
<p>Thank's for this solution, I'm saved :)</p>
<hr />
<p>i followed the steps hoewever i get my array values written in one row in CSV file, no \n is applied.
my data is an array returned by a function as :
var data = [days];
return data;
and i call this function from the downloadCSV ()</p>
<hr />
<p>Getting the following error: (TypeError: row.join is not a function) Any idea?</p>
<hr />
<p>Hi, How to achieve the same functionality in IE 11 ?</p>
<hr />
<p>Thank you!</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Angular example: simple router</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-03-12T00:30:01Z</updated>
    <pubDate>2016-03-12T00:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/simple-router-with-angular" />
    <id>https://code-maven.com/simple-router-with-angular</id>
    <content type="html"><![CDATA[<p>When creating Single Page Applications with AngularJS it is quite important to handle the back button properly.
The <a href="https://docs.angularjs.org/api/ngRoute">ngRoute</a> service provides a simple way to handle this.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/simple_router/simple_router.html">examples/angular/simple_router/simple_router.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Routing&lt;/title&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-route.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
angular.module(&quot;DemoApp&quot;, ['ngRoute'])
    .controller(&quot;DemoController&quot;, function($scope) {
        $scope.title = &quot;Simple Router Example&quot;;
    })
    .config(['$routeProvider', function($routeProvider) {
        $routeProvider.
            when('/abc', {
                template: '&lt;h2&gt;ABC&lt;/h2&gt; from the template',
            }).
            when('/def', {
                templateUrl: 'def.html',
            }).
            otherwise({
                redirectTo: '/'
            });
    }]);
&lt;/script&gt;
&lt;/head&gt;

&lt;body ng-app=&quot;DemoApp&quot; ng-controller=&quot;DemoController&quot;&gt;
&lt;h1&gt;{{title}}&lt;/h1&gt;
&lt;a href=&quot;#&quot;&gt;home&lt;/a&gt;
&lt;a href=&quot;#abc&quot;&gt;abc&lt;/a&gt;
&lt;a href=&quot;#def&quot;&gt;def&lt;/a&gt;

&lt;div ng-view&gt;&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/simple_router/simple_router.html">view</a></p>
<p>We need to load both AngularJS and the Angular Route service.</p>
<p>In the HTML page we add an <code>ng-view</code> directive:</p>
<pre><code class="language-html">&lt;div ng-view&gt;&lt;/div&gt;
</code></pre>
<p>When we create the Angular Application using the <code>angular.module</code> call we need to pass <code>'ngRoute'</code> in the
second parameter to indicate which dependencies to use.</p>
<p>The controller itself can be empty. We only used it here to show where does it fit.
We just fill a simple attribute that will be the h1 element in the page.</p>
<p>The interesting part is the <code>config</code> call.
The <a href="https://docs.angularjs.org/api/ngRoute/provider/$routeProvider">$routeProvider</a>
will have a mapping of URL pathes and what to show when each one is hit.</p>
<p>Assuming the page lives at the URL <code>http://example.com/example.html</code> all the pages will be seen
as anchors of that page. So for example the '/abc' route will be
<code>http://example.com/example.html#/abc</code></p>
<p>In our example if the user arrives to the <code>/abc</code> Angular will take the content of the
<code>template</code> and show it in the div-element having the <code>ng-view</code> directive.</p>
<p>If the user arrives to <code>/def</code>, Angular will fetch the content of the 'def.html' page from the same server
and will display the content of that file in the <code>ng-view</code>.</p>
<p>The <code>otherwise</code> entry tells the router where to redirect user arriving to any other anchoredurl.
So for example example.html#/xyz  will be automatically redirected to example.html#/ .</p>
<h2 class="title is-4">Route page with button</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/simple_router/simple_router_with_button.html">examples/angular/simple_router/simple_router_with_button.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Routing&lt;/title&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-route.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
angular.module(&quot;DemoApp&quot;, ['ngRoute'])
    .controller(&quot;DemoController&quot;, function($scope, $location) {
        $scope.title = &quot;Simple Router Example&quot;;
        $scope.goto = function(page) {
            $location.path(page);
        };
    })
    .config(['$routeProvider', function($routeProvider) {
        $routeProvider.
            when('/abc', {
                template: '&lt;h2&gt;ABC&lt;/h2&gt; from the template',
            }).
             when('/def', {
                templateUrl: 'def.html',
            }).
            when('/ghi', {
                templateUrl: 'ghi.html',
            }).
            otherwise({
                redirectTo: '/def'
            });
    }]);
&lt;/script&gt;
&lt;/head&gt;

&lt;body ng-app=&quot;DemoApp&quot; ng-controller=&quot;DemoController&quot;&gt;
&lt;h1&gt;{{title}}&lt;/h1&gt;
&lt;a href=&quot;#abc&quot;&gt;abc&lt;/a&gt;
&lt;a href=&quot;#def&quot;&gt;def&lt;/a&gt;

&lt;button ng-click=&quot;goto('/ghi')&quot;&gt;ghi&lt;/button&gt;

&lt;div ng-view&gt;&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/simple_router/simple_router_with_button.html">view</a></p>
<p>In the second example there is an additional element. A button that helps us show how to change
the page from within the  controller. In order for this to work we had to inject the
<a href="https://docs.angularjs.org/api/ng/service/$location">$location</a> service into the controller.</p>
<p>We can then set the route but calling <code>$location.path()</code> and passing the new route to it.
For example '/abc', or '/def' from the previous example. In our demo we have encapsulated this
call in another function which we called 'goto' and which was made available in the HTML code
by adding it to the <code>$scope</code>.</p>
<p>In the HTML we have a button that calls this <code>goto</code> function that was connected to it
using the <code>ng-click</code> directive.</p>
<p>In addition, in this example we have also changed the value of the default page defined
by the <code>otherwise</code> call. So any user arriving to a page like &quot;#/xyz&quot; will be redirected
to &quot;#/def&quot;</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>JMeter</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-02-17T17:30:01Z</updated>
    <pubDate>2016-02-17T17:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/jmeter" />
    <id>https://code-maven.com/jmeter</id>
    <content type="html"><![CDATA[<p><a href="http://jmeter.apache.org/">Apache JMeter</a> is an Open Source Performance and load testing tool.</p>
<h2 class="title is-4">Other videos</h2>
<ul>
<li><a href="https://www.youtube.com/user/JMeterTutorial">JMeter Tutorials</a></li>
<li><a href="https://www.youtube.com/user/BlazeMeterSupport">BlazeMeter Support</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ideas for TED</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-01-30T17:00:01Z</updated>
    <pubDate>2016-01-30T17:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ted" />
    <id>https://code-maven.com/ted</id>
    <content type="html"><![CDATA[<p><a href="http://www.ted.com/">TED</a> is full of great talks about Technology, Entertainment, Design, and actually a lot more. I also love
the fact that they have plenty of local events sometimes in the local language and that many of the talks have subtitles in a lot of languages.</p>
<p>This makes it even more likely that their ideas will spread.</p>
<p>So I thought I'd like to help it with my little knowledge of programming, but first let's write down a few ideas.</p>
<h2 class="title is-4">Recommended talks in other than English</h2>
<p>If you register with TED, you can subscribe to their daily or weekly e-mail in which they suggest a talk.
A couple of weeks ago I have subscribed to it and watch their videos, but as far as I could see these are usually relatively
new talk with little or no subtitles.</p>
<p>It would be nice to have similar suggestion service in other languages as well. So for example a subscriber could register to
receive only those talks that are either speaking in Hungarian or have Hungarian subtitles.</p>
<h2 class="title is-4">What to translate?</h2>
<p>On the other edge of the language support, it would be nice if there was a list of talks recommended for translation
for specific languages. As I can see TED uses <a href="http://amara.org/">Amara</a> to handle all the translations.
I am not sure if they have such recommendations.</p>
<p>List all the talks that have no subtitles in language X. Order by popularity of the talks. (Number of viewers or number of 'likes'.
Show preference to talks that are already available in more than one language.</p>
<h2 class="title is-4">API</h2>
<p>Probably the biggest obstacle to implementing these ideas is the lack of public API.
They do have an <a href="http://developer.ted.com/">API</a>, but as of January 2016 they don't allow
new registration to get an API key.</p>
<p>So if I would like to implement either of these I'll need to <a href="https://perlmaven.com/pro/web-scraping-ted">scrap the web pages of TED</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Prevent leaving the page using plain JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-01-26T19:50:01Z</updated>
    <pubDate>2016-01-26T19:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/prevent-leaving-the-page-using-plain-javascript" />
    <id>https://code-maven.com/prevent-leaving-the-page-using-plain-javascript</id>
    <content type="html"><![CDATA[<p>In many case, but espeically in single-page applications when there is some unsaved data in the browser you might want to make
sure the user does not accidently leave the page without first saving the data. This can be achived using the <code>onbeforeunload</code>
(read &quot;on before unload&quot;) event.</p>
<p>This even will trigger whenever the user is trying to leave the page by</p>
<ul>
<li>clicking the &quot;Back&quot; button</li>
<li>reloading the page</li>
<li>typing in a new URL</li>
<li>clicking on a link on your page</li>
<li>or even when trying to close the current tab or the whole browser</li>
</ul>
<p>In the following example, that you can try by clicking on the &quot;Try&quot; link, you can see how it is implemented.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/prevent_leaving_the_page.html">examples/js/prevent_leaving_the_page.html</a></strong></p>
<pre><code class="language-html">&lt;h1 id=&quot;home&quot;&gt;Warn before leaving the page&lt;/h1&gt;

&lt;script&gt;
// Warning before leaving the page (back button, or outgoinglink)
window.onbeforeunload = function() {
   return &quot;Do you really want to leave our brilliant application?&quot;;
   //if we return nothing here (just calling return;) then there will be no pop-up question at all
   //return;
};
&lt;/script&gt;

&lt;a href=&quot;http://code-maven.com/&quot;&gt;Code Maven&lt;/a&gt;


</code></pre>
<p><a href="examples/js/prevent_leaving_the_page.html">view</a></p>
<p>We just need to assign a function to the <code>window.onbeforeunload</code> attribute and that function needs
to return something. That will tell the browser that it should display a pop-up window asking the user if she
wants to leave the page.</p>
<p>Firefox will just ask <code>This page is asking you to confirm that you want to leave - data you have entered may not be saved.</code>.<br>
<img src="/img/firefox_confirm_navigate.png" title="Firefox: This page is asking you to confirm that you want to leave - data you have entered may not be saved."><br></p>
<p>Chrome will be more specific &quot;Confirm Reload&quot; + &quot;Are you sure you want to reload this page?&quot;,<br>
<img src="/img/chrome_confirm_reload.png" title="Chrome: Confirm Reload - Are you sure you want to reload this page?"><br></p>
<p>or &quot;Confirm Navigation&quot; + &quot;Are you sure you want to leave this page?&quot;<br>
<img src="/img/chrome_confirm_navigation.png" title="Chrome: Confirm Navigation - Are you sure you want to leave this page?"><br></p>
<p>It will even include the text we returned from the function.</p>
<p>Safari will ask &quot;Are you sure you want to leave this page?&quot; and include our text.<br>
<img src="img/safari_leave_page.png" title="Safari: Are you sure you want to leave this page?"><br></p>
<p>Opera totally disregarded the code. I wonder if it would work if the JavaScript code was in a separate file.</p>
<p>If the function does not call <code>return</code> and just falls out at the end of the function,
or if it calls <code>return;</code> without returning any value then the the browser will not ask anything
and it will just do whatever we told it to do. (Reload the page, navigate away, etc.)</p>
<p>This allows us write some conditional code that will only show the popup of there is any data
that needs saving.</p>
<pre><code class="language-javascript">window.onbeforeunload = function() {
   if (data_needs_saving()) {
       return &quot;Do you really want to leave our brilliant application?&quot;;
   } else {
      return;
   }
};
</code></pre>
<h2 class="title is-4">Comments</h2>
<p>window.onbeforeunload = function() { return; };
I tried to return nothing to disable the pop up. But, it does not work</p>
<hr />
<p>you have to return undefined</p>
<hr />
<p>Hi, I have a situation, where I am opening a new window from my main application as a new tab. I need to prompt the message while the user tries to close the new tab. I have given the code as below.</p>
<pre><code>&lt;script&gt;
window.onbeforeunload = function () {
return &quot;Do you really want to leave our brilliant application?&quot;;

};
&lt;/script&gt;
</code></pre>
<p>But when I click on the X button, the new tab closes without prompting the message. Please suggest.</p>
<hr />
<h2 class="title is-4">copied the same code but not working in chrome (not even any browser!!). Getting the default message only as below:
&quot;Changes you made may not be saved.&quot;</h2>
<p>Many browsers have reverted that feature.</p>
<p>See <a href="https://caniuse.com/?search=onbeforeunload">https://caniuse.com/?search=onbeforeunload</a></p>
<hr />
<p>Hi, this doesn't work on IOS (either Safari &amp; Chrome).
Do you have workaround for that?</p>
<hr />
<p><a href="https://stackoverflow.com/questions/7317273/warn-user-before-leaving-web-page-with-unsaved-changes/7317311#7317311">https://stackoverflow.com/questions/7317273/warn-user-before-leaving-web-page-with-unsaved-changes/7317311#7317311</a></p>
<p>window.addEventListener(&quot;beforeunload&quot;, function (e) {
var confirmationMessage = 'It looks like you have been editing something. '
+ 'If you leave before saving, your changes will be lost.';</p>
<pre><code>(e || window.event).returnValue = confirmationMessage; //Gecko + IE

return confirmationMessage; //Gecko + Webkit, Safari, Chrome etc.
</code></pre>
<p>});</p>
<hr />
<p>This doesn't work anymore in Safari</p>
<hr />
<p>You can tell the guy who published that solution on stack-overflow. He might help you on this :)</p>
<hr />
<p>Thanks for the code man :D</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Wikipedia</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2016-01-23T14:00:01Z</updated>
    <pubDate>2016-01-23T14:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/wikipedia" />
    <id>https://code-maven.com/wikipedia</id>
    <content type="html"><![CDATA[<p><a href="https://www.wikipedia.org/">Wikipedia</a> is great, especially if you speak one of the major languages.</p>
<p>Unfortunately there are many people who cannot read these major languages, and even if they can, it is much easer
to understand thing in their own mother tongue.</p>
<p>On the other hand there are many articles on Wikipedia that are available in one of the &quot;smaller&quot;
languages, but not in English. I belive making these available in English as well would be important.</p>
<p>I have a number of projects in mind trying to help people who would like to contribute to Wikipedia
locate areas with some &quot;low hanging fruits&quot;. The first such project is locating all the articles
that are available in one language, but apparently not available in English.</p>
<p>The way to identify them is to look for articles that have no link to their English counterpart.
These articles might be just missing the link, or there might be no English version of the page.</p>
<p>If you'd like to help check out the articles.</p>
<p>If you can locate the English version of the article then click on the &quot;Interwiki link editor&quot; on the side
of the non-English article and add a link to the Engish version. Then go to the English article and add a link
in the other direction as well.
I am not sure, but I think the rest of the Interwiki links will be added automatically by a bot within a few days.</p>
<p>If there is no English counterpart for the article then start translating!</p>
<h2 class="title is-4">Source code</h2>
<p>The pages are generated by <a href="https://github.com/szabgab/wikipedia-translations">this code</a>. In the <b>languages.json</b>
we have the list of languages and also the list of pages to be skipped. These are pages that are probbaly
not interesting to anyone except the speakers of that language.</p>
<h2 class="title is-4">Notes</h2>
<ul>
<li>
<p><a href="http://www.andiamo.co.uk/resources/expansion-and-contraction-factors">Expansion and contraction factors in translation</a></p>
</li>
<li>
<p>Document lenght difference between English and other languages</p>
</li>
<li>
<p><a href="https://www.w3.org/International/articles/article-text-size.en">Text size in translation</a></p>
</li>
</ul>
<h2 class="title is-4">Languages</h2>
<p>The languages I have processed so far:</p>
<ul>
<li><a href="/wikipedia/ace">Acehnese</a></li>
<li><a href="/wikipedia/af">Afrikaans</a></li>
<li><a href="/wikipedia/ar">Arabic</a></li>
<li><a href="/wikipedia/azb">South Azerbaijani</a></li>
<li><a href="/wikipedia/he">Hebrew</a></li>
<li><a href="/wikipedia/hu">Hungarian</a></li>
<li><a href="/wikipedia/ilo">Ilokano</a></li>
<li><a href="/wikipedia/mhr">Meadow Mari</a></li>
<li><a href="/wikipedia/pam">Kapampangan</a></li>
<li><a href="/wikipedia/su">Sundanese</a></li>
<li><a href="/wikipedia/id">Indonesian</a></li>
<li><a href="/wikipedia/is">Icelandic</a></li>
<li><a href="/wikipedia/ga">Irish</a></li>
<li><a href="/wikipedia/yo">Yorùbá</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG X</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-12-24T22:30:01Z</updated>
    <pubDate>2015-12-24T22:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-x" />
    <id>https://code-maven.com/svg-x</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing a line in SVG.</p>
<script src="/try/examples/js/svg.min.js"></script>
<div id="draw_x"></div>
<script src="/try/examples/js/svg_x.js"></script>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_x.js">examples/js/svg_x.js</a></strong></p>
<pre><code class="language-js">function draw_x() {
    var draw = SVG('draw_x');
    draw.size(200, 200);
    draw.line(0, 0, 200,200).attr({
        'stroke'       : '#FF0000',
        'stroke-width' : '5px'
    });
    draw.line(0, 200, 200,0).attr({
        'stroke'       : '#FF0000',
        'stroke-width' : '5px'
    });
}

draw_x();

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Record editor using Angular JS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-12-17T20:30:01Z</updated>
    <pubDate>2015-12-17T20:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/record-editor-in-angular" />
    <id>https://code-maven.com/record-editor-in-angular</id>
    <content type="html"><![CDATA[<p>I am working on several web application where we have lists of data records and we would like to give our users
some capability to edit those records. In this article I'll look at one of the solutions I've tried.</p>
<p>In this simplified application each record has a single text field that can be edited.</p>
<p>Each record looks like this:</p>
<pre><code>  {
     'name' : 'Foo'
  }
</code></pre>
<p>The whole HTML page is a single Angular Module with a single Angular Controller.
There are two &quot;pages&quot; similar to what we were doing in the
<a href="/simple-pages-or-tabs-with-angularjs">simple pages and tabs with Angular JS</a>
example.</p>
<p>The first page is the listing of the records. Nothing fancy. Next to each value there is a button that will call
the <code>edit</code> function with the current record when clicked.</p>
<p>The second page is the editor. It has an <code>input</code> box for the only value we have in each record.
This input box is bound to the <code>editor.name</code> attribute.</p>
<p>There are also two buttons. One to save the changes and one to cancel the editing. Each one has a function
call.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/editor1/edit_record.html">examples/angular/editor1/edit_record.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Edit Record&lt;/title&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;edit_record.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body ng-app=&quot;EditRecordApp&quot; ng-controller=&quot;EditRecordController&quot;&gt;

&lt;div ng-show=&quot;page === 'list'&quot;&gt;
  &lt;h2&gt;Listing&lt;/h2&gt;

  &lt;div ng-repeat=&quot;r in records&quot;&gt;
  {{r.name}} &lt;button ng-click=&quot;edit(r)&quot;&gt;Edit&lt;/button&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div ng-show=&quot;page === 'editor'&quot;&gt;
  &lt;h2&gt;Editor&lt;/h2&gt;
  &lt;div&gt;Name: &lt;input ng-model=&quot;editor.name&quot;&gt;&lt;/div&gt;

   &lt;div&gt; &lt;button ng-click=&quot;save()&quot;&gt;Save&lt;/button&gt; &lt;button ng-click=&quot;cancel()&quot;&gt;Cancel&lt;/button&gt; &lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
 

</code></pre>
<p><a href="examples/angular/editor1/edit_record.html">view</a></p>
<p>Now let's see the JavaScript file.</p>
<p>In the real application we get the records via an Ajax call, but in this example I just have
a function called <code>get_data</code> that returns the records. I put it outside of the Angular module
in order to emphasize that the data comes from outside of our application.</p>
<p>Inside the controller we set the default page and fill the records from that external data source.</p>
<p>The <code>edit</code> function receives the current record as a parameter and assigns to a separate attribute
that represents the editor and then switches to that page.</p>
<p>Clicking on either the <code>cancel</code> or the <code>save</code> buttons will switch back to the list-view,
but in the save function we also need to implement the actual saving of the data. Before doing that
please try the code.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/editor1/edit_record.js">examples/angular/editor1/edit_record.js</a></strong></p>
<pre><code class="language-js">angular.module(&quot;EditRecordApp&quot;, [])
  .controller(&quot;EditRecordController&quot;, function($scope) {
    $scope.page = 'list';
    $scope.records = get_data();

    $scope.edit = function(record) {
        $scope.editor = record;
        $scope.page = 'editor'
    }

    $scope.cancel = function() {
        $scope.page = 'list';
    }

    $scope.save = function() {
        // TODO
        $scope.page = 'list';
    }
    
});

var get_data = function() {
   return [
      {
        'name' : 'Foo'
      },
      {
        'name' : 'Bar'
      },
      {
        'name' : 'Qux'
      }
   ];
}


</code></pre>
<p>You will notice that if you make changes in the editor they are automatically reflected in the list
whenever you click on the <code>save</code> button. Unfortunately the same will happen when you click on
the cancel button. By assigning the current record as a whole to the <code>$scope.editor</code> attribute
we connected that listing of that selected record (on the list page) to the editor through an attribute
on the <code>$scope</code>. Two-way bindings are one of the &quot;selling features&quot; of AngularJS,
but we created two pairs of two-way bindings that currently bites us.</p>
<p>We either need to implement something that will put back the old value when the user clicked on the &quot;cancel&quot; button,
or we need to totally separate the two bindings and copy the content of the record when we open the editor
and copy the data back when we click on save.</p>
<p>When clicking on &quot;edit&quot; copy the current record to the editor attribute. Have separate bindings. Copy the data from the editor to the list if the user clicks on &quot;save&quot;.</p>
<p>When clicking on &quot;edit&quot; copy the current record to a backup variable, bind the list entry to the editor. Copy the data back if the user clicks on &quot;cancel&quot;.</p>
<h2 class="title is-4">Separate Editor</h2>
<p>I have a feeling that separating the editor is the cleaner solution conceptually. So let's start with that.</p>
<p>If we are going to separate the current item of the list and the editor, then somehow we have to remember
which item were we editing. Probably the best way is to remember the order number of the record in the whole
list of records.  In order to facilitate this we will pass the <code>$index</code> attribute supplied by the
<code>ng-repeat</code> instead of the actual record.</p>
<p>So the HTML changed a bit and we are now calling <code>edit($index)</code>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/editor2/edit_record.html">examples/angular/editor2/edit_record.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Edit Record&lt;/title&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;edit_record.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body ng-app=&quot;EditRecordApp&quot; ng-controller=&quot;EditRecordController&quot;&gt;

&lt;div ng-show=&quot;page === 'list'&quot;&gt;
  &lt;h2&gt;Listing&lt;/h2&gt;

  &lt;div ng-repeat=&quot;r in records&quot;&gt;
  {{r.name}} &lt;button ng-click=&quot;edit($index)&quot;&gt;Edit&lt;/button&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div ng-show=&quot;page === 'editor'&quot;&gt;
  &lt;h2&gt;Editor&lt;/h2&gt;
  &lt;div&gt;Name: &lt;input ng-model=&quot;editor.name&quot;&gt;&lt;/div&gt;

   &lt;div&gt; &lt;button ng-click=&quot;save()&quot;&gt;Save&lt;/button&gt; &lt;button ng-click=&quot;cancel()&quot;&gt;Cancel&lt;/button&gt; &lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
 

</code></pre>
<p><a href="examples/angular/editor2/edit_record.html">view</a></p>
<p>The JavaScript code went through a much bigger change. We accept the index in the &quot;idx&quot; variable and
then we copy the value of the &quot;name&quot; attribute of the current record to the editor.
We also save the index in an attribute on the <code>$scope</code>.</p>
<p>The <code>cancel()</code> does not have to do anything just switching back to the &quot;list&quot; page.</p>
<p>The <code>save()</code> function copies the new value from the editor to the appropriate record using
the saved index.
It should also call some Ajax function to send the new data to the back-end, but in this example
we don't want to deal with that.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/editor2/edit_record.js">examples/angular/editor2/edit_record.js</a></strong></p>
<pre><code class="language-js">angular.module(&quot;EditRecordApp&quot;, [])
  .controller(&quot;EditRecordController&quot;, function($scope) {
    $scope.page = 'list';

    $scope.records = get_data();

    $scope.edit = function(idx) {
        $scope.editor = {
            'name' : $scope.records[ idx ].name
        };
        $scope.current_record = idx;
        $scope.page = 'editor'
    }

    $scope.cancel = function() {
        $scope.page = 'list';
    }

    $scope.save = function() {
        $scope.records[ $scope.current_record ].name = $scope.editor.name;
        $scope.page = 'list';
    }
    
});

var get_data = function() {
   return [
      {
        'name' : 'Foo'
      },
      {
        'name' : 'Bar'
      },
      {
        'name' : 'Qux'
      }
   ];
}


</code></pre>
<p>Try this solution. It works.</p>
<h2 class="title is-4">Separate Stash</h2>
<p>For the 3rd example we did not have to make any changes to the HTML page, only to the
JavaScript. Here, instead of copying the content of the record to the editor we copy it
to some other attribute we called &quot;stash&quot;. We store the index as previously and then we
connect the editor to the current record.</p>
<p>This time we don't have to do anything if the user clicks on the 'save' button as the
editor was connected to the current record. We only need to have the Ajax call.</p>
<p>Instead of that we now need to copy the old data back from the stash to the current record
if the user clicked on &quot;cancel&quot;.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/editor3/edit_record.js">examples/angular/editor3/edit_record.js</a></strong></p>
<pre><code class="language-js">angular.module(&quot;EditRecordApp&quot;, [])
  .controller(&quot;EditRecordController&quot;, function($scope) {
    $scope.page = 'list';

    $scope.records = get_data();

    $scope.edit = function(idx) {
        $scope.stash = {
            'name' : $scope.records[ idx ].name
        };
        $scope.current_record = idx;
		$scope.editor = $scope.records[ idx ];
        $scope.page = 'editor'
    }

    $scope.cancel = function() {
        $scope.records[ $scope.current_record ].name = $scope.stash.name;
        $scope.page = 'list';
    }

    $scope.save = function() {
        $scope.page = 'list';
    }
    
});

var get_data = function() {
   return [
      {
        'name' : 'Foo'
      },
      {
        'name' : 'Bar'
      },
      {
        'name' : 'Qux'
      }
   ];
}


</code></pre>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/editor3/edit_record.html">examples/angular/editor3/edit_record.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Edit Record&lt;/title&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script src=&quot;edit_record.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body ng-app=&quot;EditRecordApp&quot; ng-controller=&quot;EditRecordController&quot;&gt;

&lt;div ng-show=&quot;page === 'list'&quot;&gt;
  &lt;h2&gt;Listing&lt;/h2&gt;

  &lt;div ng-repeat=&quot;r in records&quot;&gt;
  {{r.name}} &lt;button ng-click=&quot;edit($index)&quot;&gt;Edit&lt;/button&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div ng-show=&quot;page === 'editor'&quot;&gt;
  &lt;h2&gt;Editor&lt;/h2&gt;
  &lt;div&gt;Name: &lt;input ng-model=&quot;editor.name&quot;&gt;&lt;/div&gt;

   &lt;div&gt; &lt;button ng-click=&quot;save()&quot;&gt;Save&lt;/button&gt; &lt;button ng-click=&quot;cancel()&quot;&gt;Cancel&lt;/button&gt; &lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
 

</code></pre>
<p><a href="examples/angular/editor3/edit_record.html">view</a></p>
<h2 class="title is-4">Caveat</h2>
<p>In all these cases we manually copied the single attribute the record has. If we have larger and more complex records
we'll better use the <code>angular.copy</code> method to do a full deep-copy of the record.</p>
<p>We could also stash away the whole &quot;records&quot; array and copy it back if the user clicks on &quot;cancel&quot;, but if this feels
like a waste of memory.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Linking RubyGems to GitHub or other VCS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-12-06T23:30:01Z</updated>
    <pubDate>2015-12-06T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/linking-rubygems-to-github-or-other-vcs" />
    <id>https://code-maven.com/linking-rubygems-to-github-or-other-vcs</id>
    <content type="html"><![CDATA[<p>Having a <a href="/public-version-control-for-open-source-projects">Public Version Control system</a> for your project is
quite important, make it easy for people to find it. RubyGems makes it very easy.</p>
<p>Since the release of version 2 of RubyGems we can add any field to the metadata key.</p>
<p>In order to include the <code>source_code_uri</code> key add the following to the <code>gempspec</code> file of your project
replacing the the URL with the one that matches your project.</p>
<pre><code class="language-ruby">  gem.metadata = {
    &quot;source_code_uri&quot; =&gt; &quot;https://github.com/username/project&quot;,
  }
</code></pre>
<p>Some people put the URL of their GitHub Repository in the <code>gem.homepage</code> fields.
That's ok, but it would be prefereble to also put it in the <code>source_code_uri</code> field.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Run only one instance of a Ruby program at the same time - self locking</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-23T23:00:01Z</updated>
    <pubDate>2015-11-23T23:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/run-only-one-instance-of-a-script" />
    <id>https://code-maven.com/run-only-one-instance-of-a-script</id>
    <content type="html"><![CDATA[<p>There are cases when you'd like to make sure the same script cannot be run twice at the same time.
Maybe because it generates a lot of load on the server, or because it uses some other scarce resource.</p>
<p>Maybe you are test-driving a drone, and there is only one drone.</p>
<p>This is a sample script that use <code>flock</code> on the script being executed in order to make
sure there are no two proccess running at the same time.</p>
<h2 class="title is-4">Non-blocking version</h2>
<p><code>$PROGRAM_NAME</code> is a variable Ruby provides us and it has the filename of the current script in it.
We open that file for reading and then we use the <code>flock</code> method of the File class to try to put an
exclusive lock <code>LOCK_EX</code> on it. We are trying to put this lock on it in a non-blocking way: <code>LOCK_NB</code>.</p>
<p>If this is the first instance of the script the <code>flock</code> will be successful. It will return <code>true</code>
and thus or code can continue printing the current process-id (<code>$$</code>) and then going into the real process
which is represented by a call to <code>sleep</code> in our code.</p>
<p>If we try to run the same script again, while the first instance is still running (sleeping), then
the <code>flock</code> will not succeed. Because we made the call non-blocking it will return immediately with a <code>false</code>
value. In that case we complain an exit the script.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ruby/only_one_nb.rb">examples/ruby/only_one_nb.rb</a></strong></p>
<pre><code class="language-ruby">
f = File.open($PROGRAM_NAME, 'r')
if (not f.flock(File::LOCK_EX | File::LOCK_NB))
    puts &quot;Another instance is already running&quot;
    exit
end
puts &quot;Running #{$$}&quot;
sleep 10

</code></pre>
<p>That's it. You can try it by running the script in one terminal and while it is still running,
switching to another terminal and try running it there too. It will return immediately.</p>
<h2 class="title is-4">Blocking version</h2>
<p>If we omit the <code>LOCK_NB</code> from the call to <code>flock</code> then the call to <code>flock</code>
will wait for the lock to be released by the other process. Once it is done the flock in the second process will
return and that instance will run too.</p>
<p>In this case there is no need for the <code>if</code> statement as the <code>flock</code> will wait till it can lock.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ruby/only_one_blocking.rb">examples/ruby/only_one_blocking.rb</a></strong></p>
<pre><code class="language-ruby">
f = File.open($PROGRAM_NAME, 'r')
f.flock(File::LOCK_EX)
puts &quot;Running #{$$}&quot;
sleep 10

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>AngularJS: filter table created with ng-repeat</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-22T20:01:25Z</updated>
    <pubDate>2015-11-22T20:01:25Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/angular-filter-table-created-with-ng-repeat" />
    <id>https://code-maven.com/angular-filter-table-created-with-ng-repeat</id>
    <content type="html"><![CDATA[<p>Creating a table using <code>ng-repeat</code> is quite simple. Adding a search box to filter the result is also quite simple,
if we would like to use simple text search. It becomes a bit more complex if you'd like to search for values <b>less than</b>
a certain value typed in by the user.</p>
<p>In our examples we are going to use <a href="https://en.wikipedia.org/wiki/Solar_System">the planets of the Solar System</a>.
We have the name, the average distance from the Sun measured in units of &quot;distance of the Earth from the Sun&quot;,
and the mass relative to the mass of the Earth. Therefore both numbers are 1 for the Earth. (We are not Earth centric at all, are we :).</p>
<p>In the first example we have built a table from some data embedded in the code and added a text-filter to all of the fields:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/angular_table_filter_1.html">examples/angular/angular_table_filter_1.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Table Filter&lt;/title&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script&gt;
  angular.module('TableFilterApp', [])
    .controller('TableFilterController', function($scope) {
      $scope.planets = [
        {
          name : 'Mercury',
          distance : 0.4,
          mass : 0.055
        },
        {
          name : 'Venus',
          distance : 0.7,
          mass : 0.815
        },
        {
          name : 'Earth',
          distance: 1,
          mass : 1
        },
        {
          name : 'Mars',
          distance : 1.5,
          mass : 0.107
        },
        {
          name : 'Ceres',
          distance : 2.77,
          mass :     0.00015
        },
        {
          name : 'Jupiter',
          distance : 5.2,
          mass :   318
        },
        {
          name : 'Saturn',
          distance : 9.5,
          mass :    95
        },
        {
          name : 'Uranus',
          distance : 19.6,
          mass :   14
        },
        {
          name : 'Neptune',
          distance : 30,
          mass : 17
        },
        {
          name : 'Pluto',
          distance : 39,
          mass : 0.00218
        },
        {
          name : 'Charon',
          distance : 39,
          mass :  0.000254
        }
      ];
    
    });
  &lt;/script&gt;

&lt;/head&gt;
&lt;body ng-app=&quot;TableFilterApp&quot; ng-controller=&quot;TableFilterController&quot;&gt;

&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Average Distance&lt;/th&gt;&lt;th&gt;Mass&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;input ng-model=&quot;f.name&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;input ng-model=&quot;f.distance&quot;&gt;&lt;/td&gt;&lt;/td&gt;&lt;td&gt;&lt;input ng-model=&quot;f.mass&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr ng-repeat=&quot;p in planets | filter:f&quot;&gt;&lt;td&gt;{{p.name}}&lt;/td&gt;&lt;td&gt;{{p.distance}}&lt;/td&gt;&lt;td&gt;{{p.mass}}&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;



</code></pre>
<p><a href="examples/angular/angular_table_filter_1.html">view</a></p>
<p>The interesting part of the code is in these two lines:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/angular_table_filter_1.js">examples/angular/angular_table_filter_1.js</a></strong></p>
<pre><code class="language-js">&lt;tr&gt;&lt;td&gt;&lt;input ng-model=&quot;f.name&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;input ng-model=&quot;f.distance&quot;&gt;&lt;/td&gt;&lt;/td&gt;&lt;td&gt;&lt;input ng-model=&quot;f.mass&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr ng-repeat=&quot;p in planets | filter:f&quot;&gt;&lt;td&gt;{{p.name}}&lt;/td&gt;&lt;td&gt;{{p.distance}}&lt;/td&gt;&lt;td&gt;{{p.mass}}&lt;/td&gt;&lt;/tr&gt;


</code></pre>
<p>The second row is the one that builds the table. It is a regular <code>ng-repeat</code> row, but we have
filtered out the results based on the content of object <code>f</code>. The attributes of that object are
bound to the <code>input</code> boxes in the first line. Each attribute name will filter in the respective
field of the original array.</p>
<p>That's neat, but in our case the search or filter only makes sense on the first column. As it is a simple text-filter
there is no much use of finding all the planets for which the distance has a digit 7 in them. In other tables this
might be more interesting.</p>
<h2 class="title is-4">Search values less than or greater than</h2>
<p>A much more interesting search or filter would be to find all the planets where the distance is less than 2.
Or where the mass is less than 20.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/angular_table_filter_2.html">examples/angular/angular_table_filter_2.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot;
     content=&quot;width=device-width, initial-scale=1, user-scalable=yes&quot;&gt;
  &lt;title&gt;Table Filter&lt;/title&gt;
  &lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;script&gt;
  angular.module('TableFilterApp', [])
    .controller('TableFilterController', function($scope) {
      $scope.planets = [
        {
          name : 'Mercury',
          distance : 0.4,
          mass : 0.055
        },
        {
          name : 'Venus',
          distance : 0.7,
          mass : 0.815
        },
        {
          name : 'Earth',
          distance: 1,
          mass : 1
        },
        {
          name : 'Mars',
          distance : 1.5,
          mass : 0.107
        },
        {
          name : 'Ceres',
          distance : 2.77,
          mass :     0.00015
        },
        {
          name : 'Jupiter',
          distance : 5.2,
          mass :   318
        },
        {
          name : 'Saturn',
          distance : 9.5,
          mass :    95
        },
        {
          name : 'Uranus',
          distance : 19.6,
          mass :   14
        },
        {
          name : 'Neptune',
          distance : 30,
          mass : 17
        },
        {
          name : 'Pluto',
          distance : 39,
          mass : 0.00218
        },
        {
          name : 'Charon',
          distance : 39,
          mass :  0.000254
        }
      ];
      $scope.f = {};

      $scope.filter_by = function(field) {
        console.log(field);
        console.log($scope.g[field]);
        if ($scope.g[field] === '') {
             delete $scope.f['__' + field];
             return;
        }
        $scope.f['__' + field] = true;
        $scope.planets.forEach(function(v) { v['__' + field] = v[field] &lt; $scope.g[field]; })
      }
    
    });
  &lt;/script&gt;

&lt;/head&gt;
&lt;body ng-app=&quot;TableFilterApp&quot; ng-controller=&quot;TableFilterController&quot;&gt;

&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Average Distance&lt;/th&gt;&lt;th&gt;Mass&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;input ng-model=&quot;f.name&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;input ng-model=&quot;g.distance&quot; ng-change=&quot;filter_by('distance')&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;input ng-model=&quot;g.mass&quot; ng-change=&quot;filter_by('mass')&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr ng-repeat=&quot;p in planets | filter:f&quot;&gt;&lt;td&gt;{{p.name}}&lt;/td&gt;&lt;td&gt;{{p.distance}}&lt;/td&gt;&lt;td&gt;{{p.mass}}&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;



</code></pre>
<p><a href="examples/angular/angular_table_filter_2.html">view</a></p>
<p>This is more complex. I could not find a better solution yet, so for now, every time the user types in a value in either of the &quot;distance&quot;
or the &quot;mass&quot; filter box, the code will go over the values of the array, and add an extra key to each object which is <code>true</code> if the
object matches the currently added filter, or <code>false</code> if it isn't. The extra key is build using two underscores '__' followed by
the original key. The assumption is that it is very unlikely that we'll encounter data where these are also real keys.</p>
<p>The HTML part has changed slightly. Instead of binding the input boxes to attributes of the filter object, we bind them to another object (called g),
and we also connect the input boxes to functions calls using <code>ng-change</code>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/angular_table_filter_2b.js">examples/angular/angular_table_filter_2b.js</a></strong></p>
<pre><code class="language-js">&lt;tr&gt;&lt;td&gt;&lt;input ng-model=&quot;f.name&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;input ng-model=&quot;g.distance&quot; ng-change=&quot;filter_by('distance')&quot;&gt;&lt;/td&gt;&lt;td&gt;&lt;input ng-model=&quot;g.mass&quot; ng-change=&quot;filter_by('mass')&quot;&gt;&lt;/td&gt;&lt;/tr&gt;


</code></pre>
<p>When the user changes either of the two boxes, Angular will run the <code>filter_by</code> function. There first we check if the input box is empty.
If it is, then we remove the whole condition.</p>
<p>If there is a value in the input box, we go over all the object in the <code>planets</code> array and add the attribute with the appropriate <code>true</code>
or <code>false</code> value. The actual filtering is done by AngularJS.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/angular_table_filter_2.js">examples/angular/angular_table_filter_2.js</a></strong></p>
<pre><code class="language-js">      $scope.f = {};

      $scope.filter_by = function(field) {
        if ($scope.g[field] === '') {
             delete $scope.f['__' + field];
             return;
        }
        $scope.f['__' + field] = true;
        $scope.planets.forEach(function(v) { v['__' + field] = v[field] &lt; $scope.g[field]; })
      }
 

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Download a web page</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-20T13:00:01Z</updated>
    <pubDate>2015-11-20T13:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/download-a-web-page" />
    <id>https://code-maven.com/download-a-web-page</id>
    <content type="html"><![CDATA[<p>Building a web crawler starts by fetching one page. It can be an HTML page. The RSS or Atom feed of a web site.
Some site provide API where get the response as a <a href="/json">JSON string</a>.</p>
<p>It can be downloading an image or some other binary file.</p>
<p>The task is quite simple. Given a URL fetch the thing that is behind it and put it in a variable.</p>
<p>For a variation on this, you can write a function that will get a URL and a filename and will save
the content it received in the given file.</p>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="/download-a-page-using-ruby">Ruby: Download an HTML page using Ruby</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>JSON</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-20T12:30:01Z</updated>
    <pubDate>2015-11-20T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/json" />
    <id>https://code-maven.com/json</id>
    <content type="html"><![CDATA[<p><a href="http://json.org/">JSON (JavaScript Object Notation)</a> is a lightweight data interchange (serialization) format inspired by JavaScript object literal syntax.
The power of JSON comes from the fact that it maps rather well to the complex data structures of many programming languages and that there are converters
between JSON and the data structures of over 60 programming languages. See the <a href="http://json.org/">JSON site</a> for specification and for the list of implementations.</p>
<p>For our purposes JSON is a string that can be easily stored in a file, or can be easily transmitted over some networking protocol.
This makes it an extremely useful format for data exchange between processes even if the process are running on different machine, at different times,
and are written in different languages. It can be also used as a format for configuration files as it is rather readable and writable to humans as well.</p>
<h2 class="title is-4">Use cases of JSON</h2>
<p>Ajax, that stands for <b>&quot;asynchronous JavaScript and XML&quot;</b>, describes how an application written in JavaScript running in a browser can communicate
with the application running on the server that is most likely written in some other language, for example in <a href="https://perlmaven.com/">Perl</a>,
<a href="/python">Python</a>, <a href="/ruby">Ruby</a>, or PHP.
Originally, as the name indicates, the data sent back-and-forth between the two applications was supposed to be in XML, but today, a large chunk of those applications communicate
using JSON format. It is more light-weight than XML and fits the purpose much better.</p>
<p>Using it as a human edited configuration file is another use case. The fact that it allows the creation of deep hierarchies makes it much more useful that
the INI-file format which was used extensively especially in Microsoft Windows.</p>
<p>JSON can be used as a Data Serialization method for caching.</p>
<p>A step-child of it, called <a href="http://en.wikipedia.org/wiki/BSON">BSON (Binary JSON)</a>,
is being used as the data format in <a href="https://www.mongodb.org/">MongoDB</a>.</p>
<h2 class="title is-4">Implementations and articles</h2>
<ul>
<li>
<p><a href="https://perlmaven.com/json">JSON in Perl</a></p>
</li>
<li>
<p><a href="/ajax-request-for-json-data">Ajax request for JSON data</a></p>
</li>
<li>
<p><a href="http://ruby-doc.org/stdlib-2.0.0/libdoc/json/rdoc/JSON.html">JSON module in Ruby</a></p>
</li>
<li>
<p><a href="https://docs.python.org/2/library/json.html">json in Python 2</a></p>
</li>
<li>
<p><a href="http://php.net/manual/en/book.json.php">JSON in PHP</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>URL Shortener</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-17T15:00:01Z</updated>
    <pubDate>2015-11-17T15:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/url-shortener" />
    <id>https://code-maven.com/url-shortener</id>
    <content type="html"><![CDATA[<p>The value of the URL shorteners is far bigger than having a short URL.
They can provide excellent information about clicks leaving your site,
for example to affiliates, or clicks in your newsletter.</p>
<p>A long long time ago, many years before bitly and similar services came on the scene I've built a site
called exitlog. It was a simple url shortener, but I have not understood the business behind it and
abandoned it.</p>
<p>Now, as an execise, let's create a URL shortener.</p>
<p>See other <a href="/exercises">projects and exercises</a></p>
<p>Before going out and building the application itself, let's describe how should it work:</p>
<h2 class="title is-4">Public URL shortener</h2>
<p>A public URL shortener would work like this:</p>
<ol>
<li>A random visitor arrives to the main page. Pastes a URL, receives a short URL on our site.  e.g. <a href="http://exitlog.org/r/xY30pQ">http://exitlog.org/r/xY30pQ</a></li>
<li>If a request for that &quot;short&quot; URL arrives, it is redirected to the original URL.</li>
<li>If the same random visitor arrives again, she can list her previously shortened URLs. (This tricky. How can we know this the same person?)</li>
<li>User can create an account and log in.</li>
<li>All the previously remembered shortenings are now associated with her account.</li>
<li>If logged-in user shortens the URLs those are saved associated to her account.</li>
<li>A logged in user can see statistics on the clicks of her short URLs.</li>
</ol>
<h2 class="title is-4">Implementation</h2>
<ol>
<li>One:
<ul>
<li>Show a a page with a text-box and a submit button.</li>
<li>When submitted the URL is saved in the database, a string is generated.
The string has 6 characters of a-zA-Z0-9, the same bitly uses.
(this provides (26+26+10)<strong>6 = 62</strong>6 = 56,800,235,584 possibilities)
Quite enough.
In Perl <a href="https://metacpan.org/pod/Short::URL">Short::URL</a> might be used.
A random generator might also work, and checking if the value already exists,
then either generating a new random string or increasing the one found till the first one which
is not in use.</li>
<li>Save both of them in a database: url, short-url</li>
</ul>
</li>
<li>Given a short-url, check the database and send the redirection.</li>
<li>Create a session (set a cookie). From now on, when a new url is shortened add the session-id next to the url, short-url pair in the database.</li>
<li>Have a special request that will fetch all the url, short pairs of the currens session id and list them.</li>
<li>Show a link to &quot;create account&quot; and a link to &quot;login&quot;</li>
<li>Create account:
<ul>
<li>Fields: username, email, password (twice)</li>
<li>Check if the username is valid and unique (in its lower case version)</li>
<li>Check if the e-mail is unique and valied (In Perl use <a href="https://metacpan.org/pod/Email::Valid">Email::Valid</a>)  (At this point we don't verify the e-mail)</li>
<li>Check if the passwords match.</li>
<li>Save the username, email, and the hashed password in the database.</li>
<li>Once this was submitted the user is now &quot;logged in&quot; display a link to &quot;log out&quot;.</li>
<li>Save &quot;logged in&quot; in the session object on the server.</li>
<li>Save the user_id in the session object on the server.</li>
<li>If &quot;log out&quot; is clicked then remove the &quot;logged in&quot; from the session object.</li>
</ul>
</li>
<li>Login page:
<ul>
<li>Fields: username, password</li>
<li>Check if username is in the database and validate if the new password matches the old one.</li>
<li>If yes, then save the user_id in the session object, save &quot;logged_in&quot; in the session object and change the display to show the logout link.</li>
<li>If not, then show 'invalid login'.</li>
</ul>
</li>
<li>Retreive all the entries with the session id of this user, remove the session id, from the rows and add the user_id. (is it really good to remove the sid?)</li>
<li>When pasting a new url, check if the user is logged in. If she is get the user_id from the session object and use that to save the new url,short-url pair.</li>
<li>Change how URLs are shortened: Save the IP, of the shortener, and the time when it was done.</li>
<li>Map the IP to a location (country) and save that too.</li>
<li>When a short URL is accessed, save the time, requested IP (=&gt; country), OS/browers etc.</li>
<li>When the logged-in user wants to see stats:
<ul>
<li>
<p>For each URL, show the number of clicks.</p>
</li>
<li>
<p>Show graph of clicks in the last hour/day/week</p>
</li>
<li>
<p>Show the country distribution of links.</p>
</li>
</ul>
</li>
</ol>
<h2 class="title is-4">Private URL shortener</h2>
<p>A private URL shortener is part of an already existing website with users on it.
Only designated users can create new short URLs and only special users
can see the statitics, but they can see the statistics of all the shortened URLs.
e.g. <a href="http://exitlog.org/private">http://exitlog.org/private</a></p>
<p>Describe this later.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Compare the Wikipedia translations</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-16T12:30:01Z</updated>
    <pubDate>2015-11-16T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/compare-wikipedia-translations" />
    <id>https://code-maven.com/compare-wikipedia-translations</id>
    <content type="html"><![CDATA[<p>Given an article on the <a href="https://en.wikipedia.org/">English Wikipedia</a>, for example
about <a href="https://en.wikipedia.org/wiki/Perl">Perl</a>,
<a href="https://en.wikipedia.org/wiki/Python_%28programming_language%29">Python</a>,
<a href="https://en.wikipedia.org/wiki/Ruby_%28programming_language%29">Ruby</a>,
<a href="https://en.wikipedia.org/wiki/PHP">PHP</a>, or <a href="https://en.wikipedia.org/wiki/JavaScript">JavaScript</a>,
create a program that will fetch the size of all the translated versions of this article
from every language on Wikipedia.</p>
<p>Depending on the level of investigation you'd like to do you can start implementing right away or you could read one or more
of the <b>hint</b> that explain what you need to fetch.</p>
<h2 class="title is-4">Hints</h2>
<p>Wikipedia provides an <a href="https://www.mediawiki.org/wiki/API:Main_page">API to fetch the content of the page</a> in
raw format. It also provide a lot more details about its <a href="https://www.mediawiki.org/wiki/Wikibase/API">API</a>,
including information about <a href="https://www.mediawiki.org/wiki/API:Properties">API::Properties</a>.</p>
<p>The language links are served by <a href="https://www.wikidata.org/">Wikidata</a>.</p>
<h2 class="title is-4">Hints</h2>
<p>This URL will return the content of the 'Perl' page of the English version of the Wikipedia in JSON format:</p>
<pre><code>https://en.wikipedia.org/w/api.php?action=query&amp;prop=revisions&amp;rvprop=content&amp;format=json&amp;titles=Perl
</code></pre>
<p>This URL will return the list of translated versions of the page with Q-id Q42:</p>
<pre><code>https://www.wikidata.org/w/api.php?action=wbgetentities&amp;format=json&amp;props=sitelinks&amp;ids=Q42
</code></pre>
<p>Given a title (in this case PHP), the following URL will return the Q-id of the page:</p>
<pre><code>https://en.wikipedia.org/w/api.php?action=query&amp;prop=pageprops&amp;format=json&amp;titles=PHP'
</code></pre>
<h2 class="title is-4">Hints</h2>
<p>There seem to be 4 types of language links returned from <a href="https://www.wikidata.org/">Wikidata</a>:</p>
<p>Plain Wikipedia links that end in the word 'wiki' such as <code>itwiki</code>, <code>newwiki</code>, or <code>pdcwiki</code>. They
can be 2 or more characters. The real URL is the same without the last 4 characters.</p>
<p>Wikipedia links with underscores such as <code>zh_yuewiki</code>, <code>bat_smgwiki</code>, or <code>zh_min_nanwiki</code>
are quite similar, but we need to replace the underscore <code>_</code> characters by dash <code>-</code> characters.</p>
<p><a href="https://en.wikiquote.org/">Wikiquote</a> links. For exampe <code>enwikiquote</code> which map to <a href="https://en.wikiquote.org/">https://en.wikiquote.org/</a>.</p>
<p><a href="https://fr.wikibooks.org/">Wikibook</a> links, such as <code>frwikibook</code> which map to <a href="https://fr.wikibooks.org/">https://fr.wikibooks.org/</a>.</p>
<h2 class="title is-4">Tools</h2>
<h2 class="title is-4">Solutions</h2>
<p><a href="https://github.com/szabgab/wikipedia-stats">wikipedia stats in GitHub</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Set up CGI with Apache on Ubuntu Linux</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-12T08:30:01Z</updated>
    <pubDate>2015-11-12T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/set-up-cgi-with-apache" />
    <id>https://code-maven.com/set-up-cgi-with-apache</id>
    <content type="html"><![CDATA[<p>CGI, the Common Gateway Interface is a simple  way to write web applications. Especially when you are running Apache as the web server.
Recently I wanted to show a few examples using CGI in various programming languages, but first I had to make sure CGI is enabled on my server.</p>
<p>I have been using the an <a href="https://perlmaven.com/vagrant-perl-development-environment">Ubuntu based Vagrant image</a> for my experiments
but I think the same steps will work in any other Ubuntu-based or any Debian based system.</p>
<h2 class="title is-4">Install Apache 2</h2>
<p>If you don't have it installed yet, you will need to install the web servers itself:</p>
<pre><code>$ sudo apt-get install apache2
</code></pre>
<h2 class="title is-4">Install curl</h2>
<p><code>curl</code> can be used to fetch web pages.
It is not a requirement for our set up, but it is nice to have on the server as it can be used to check the pages
without opening a real browser. Besides, at least in my set up, I have configured the web server on a Virtual Environment,
but I have not set up port-forwarding for port 80 yet and thus I would not be able to access the web server from my
desktop. (The article about <a href="https://perlmaven.com/vagrant-perl-development-environment">Vagrant development environment</a>
has explanation how to set up the port forwarding.)</p>
<pre><code>$ sudo apt-get install curl
</code></pre>
<h2 class="title is-4">Try the web server</h2>
<p>At this point we can try if the web server works:</p>
<pre><code>$ curl http://127.0.0.1/
</code></pre>
<p>It will print some HTML on the screen.</p>
<h2 class="title is-4">Configure CGI</h2>
<p>I looked around the <code>/etc/apache2</code> directory, which is the standard place to find the
configuration files of Apache. I've found the <code>/etc/apache2/conf-available/serve-cgi-bin.conf</code>
file that has a symbolic link from <code>/etc/apache2/conf-enabled/serve-cgi-bin.conf</code>.
It has a section that maps the /cgi-bin path in the URLs to the <code>/usr/lib/cgi-bin/</code>
directory in the hard disk and enables CGI execution in this directory.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/apache/serve-cgi-bin.conf">examples/apache/serve-cgi-bin.conf</a></strong></p>
<pre><code class="language-conf">&lt;IfModule mod_alias.c&gt;
	&lt;IfModule mod_cgi.c&gt;
		Define ENABLE_USR_LIB_CGI_BIN
	&lt;/IfModule&gt;

	&lt;IfModule mod_cgid.c&gt;
		Define ENABLE_USR_LIB_CGI_BIN
	&lt;/IfModule&gt;

	&lt;IfDefine ENABLE_USR_LIB_CGI_BIN&gt;
		ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
		&lt;Directory &quot;/usr/lib/cgi-bin&quot;&gt;
			AllowOverride None
			Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
			Require all granted
		&lt;/Directory&gt;
	&lt;/IfDefine&gt;
&lt;/IfModule&gt;

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

</code></pre>
<p>That's not enough though. We also need to enable the CGI module of Apache.</p>
<p>The installed modules of Apache can be found in the <code>/etc/apache2/mods-available</code> directory.
The cgi module is called <code>cgi.load</code></p>
<p>The enabled modules have symbolic links in <code>/etc/apache2/mods-enabled</code>, but as I found out,
the CGI module did not have a symbolic link there: The CGI module was not enabled by default.</p>
<pre><code>$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/cgi.load
</code></pre>
<p>Added the symbolic link.</p>
<h2 class="title is-4">Reload Apache configuration</h2>
<p>As the configuration of Apache has changed we need to tell Apache to reload its configuration files:</p>
<pre><code>$ sudo service apache2 reload
</code></pre>
<h2 class="title is-4">Create the first CGI script</h2>
<p>Now that we have enable CGI we can create our first CGI script.</p>
<p>This first CGI example will be created in Bash.
Later on you can check out the solutions to the various <a href="/exercises">web exercises</a>
Especially the <a href="/exercise-web-hello-world">Hello World!</a> exercise and
the <a href="/exercise-web-echo">Web Echo</a> exercise and their solutions.</p>
<p>I've created a file called <code>/usr/lib/cgi-bin/hw.sh</code> using <code>sudo vim /usr/lib/cgi-bin/hw.sh</code></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/apache/hw.sh">examples/apache/hw.sh</a></strong></p>
<pre><code class="language-bash">#!/bin/bash
printf &quot;Content-type: text/html\n\n&quot;
printf &quot;Hello World!\n&quot;

</code></pre>
<p>Made it executable:</p>
<pre><code>$ sudo chmod +x /usr/lib/cgi-bin/hw.sh
</code></pre>
<p>Then I could access it through Apache using:</p>
<pre><code>$ curl http://127.0.0.1/cgi-bin/hw.sh
Hello World!
</code></pre>
<h2 class="title is-4">Troubleshooting</h2>
<p>If the <code>curl</code> request returns <code>404 Not Found</code> then either the file is not in the correct place, or the
URL given to curl is incorrect.</p>
<p>If the <code>curl</code> requests return <code>500 Internal Server Error</code> you might have forgotten to make the script
executable using <code>sudo chmod +x /usr/lib/cgi-bin/hw.sh</code></p>
<p>or the hashbang line (The first line that should look like this <code>#!/bin/bash</code> was not typed in correctly.</p>
<p>Another common source of error is the difference between the newlines in MS Windows and Linux in <a href="https://perlmaven.com/what-is-a-text-file">text files</a>.
You have to make sure that your script has the Unix/Linux line-ending. One of the best ways might be to run
<code>dos2unix hw.sh</code> that will replace the Windows-newlines by Unix-newlines.</p>
<p>Lastly, the 500 error might occur if the first line printed by the script is not <code>Content-type: text/html</code>
followed by 2(!) newlines.</p>
<h2 class="title is-4">Further reading</h2>
<p>Check out all the articles related to <a href="https://perlmaven.com/cgi">CGI and Perl</a> and
<a href="/hello-world-using-cgi-in-ruby">CGI and Ruby</a>.</p>
<h2 class="title is-4">Comments</h2>
<h2 class="title is-4">A comment that was deleted before I decided to move them over.</h2>
<p>Well Said. I have been fighting this for 20 years. I set up an Apache Server, it runs for years, and when I go to do it again, everything is all moved around and it takes hours and hours to simply get a hello world program to run under apache. It is never clear on how to do it, they leave no instructions, For petes sake why doesn't the release at least have the file http.conf still there with the whole instruction set on how to get the functionality of http.conf working under the new paradigm??? It boggles the mind.</p>
<hr />
<p>Thumbs up. Moving files around for no real gain makes the software difficult to use. I too spent hours trying to get things straight.</p>
<p>For other users, here's some advice that worked for me:</p>
<p>1: Enable the CGI subsystem with a2enmod cgid</p>
<p>2: Uncomment the CGI handler in mods-enabled/mime.conf, or include this directive in your specific vHost section</p>
<p>AddHandler cgi-script .cgi</p>
<p>3: Include Options ExecCGI in the vHost or topmost directory where you want these programs to be available</p>
<hr />
<p>In fact, very most times I had any issue I lost patience with myself, I was able to get someone to take the the time and lead me step by step. The truth, however, is that you are suposed to spend some time reading and learning stuff yourself as people generally expect some basic level of knowledge.</p>
<p>And you know, I suspect you had neen doing some small stupid mistake, just as I sometimes do. But if you need an advice, you need to ask politely rather than throw feces.</p>
<hr />
<p>Oh thank you thank you thank you. 3 HOURS of searching before I found this article that finally talks about the CGI module and the soft link to fix this in mods-enabled. Why is this so well hidden on the internet is a mystery.</p>
<hr />
<p>After getting it to work with hello world, I tried to run one of my past cgi-perl scripts from an HTML page in my recent home apache2 server. The cgi-perl script runs fine as a webserver elsewhere - developed during my doctoral days. It's a long code: a certain bioinformatic application.</p>
<p>The HTML page calls the cgi-perl script using method 'GET' as follows:</p>
<pre><code>&lt;form action=&quot;http://127.0.0.1/cgi-bin/newsdnamelt.cgi&quot; method=&quot;GET&quot;&gt;
&lt;center&gt;&lt;input value=&quot;Run&quot; type=&quot;submit&quot;&gt;&lt;/center&gt;
&lt;/form&gt;
</code></pre>
<p>I am getting this error both with the HTML as well as with curl on command prompt:</p>
<p>Internal Server Error</p>
<p>The server encountered an internal error or misconfiguration and was unable to complete your request.</p>
<p>Please contact the server administrator at webmaster@localhost to inform them of the time this error occurred, and the actions you performed just before this error.</p>
<p>More information about this error may be available in the server error log.
Apache/2.4.29 (Ubuntu) Server at 127.0.0.1 Port 80</p>
<p>Any hint would be deeply appriciated.</p>
<hr />
<ul>
<li>Thanks in anticipation and Warm Regards,</li>
</ul>
<hr />
<p>PS: Interestingly .sh scripts placed at /usr/lib/cgi-bin/ works just fine from HTML submit button - like the hw.sh.
But none of the cgi-perl scripts do.</p>
<p>These scripts start in the following way and all of them have worked just fine from similar HTML submission pages in the past.
So, I wonder what's wrong! Any advice would be of great help!</p>
<hr />
<p>#!/usr/bin/perl</p>
<p>use CGI qw(:standard);
print &quot;Content-type:text/html\n\n&quot;;</p>
<p>#============Input Environment variables======
$inptype;$filename;$inpseq;$x;$y;$Temp;$Na;$K;$NH4;$Mg;$tag;$tparam,$ustartbp;
#=============================================</p>
<p>$qstr = $ENV{QUERY_STRING};</p>
<p>#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~env input from html~~~~~~~~~~~~~~~~~~~~
$qstr=&quot;choice=dirseq&amp;filename=&amp;dnaseq=GCGCGCGCGCGCGatgtcgtacgcatgcgatcagtcagcgacaCGCGC&amp;tag=&amp;tparam=&amp;startbp=&amp;window=20&amp;overlap=0&amp;Temp=37&amp;Na=0.165&amp;K=0&amp;NH4=&amp;Mg=0.01&quot;;
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</p>
<p>print $qstr,&quot;\n&quot;;</p>
<p>@qdata = split(/&amp;/,$qstr);
#open (OUT,&quot;&gt;ch.out&quot;);</p>
<hr />
<p>Are the scripts executable, can you get the errors from the log file of the server?</p>
<hr />
<p>Excellent discourse. Great sincerity in helping the community. Long live Linux and opensource coding!!</p>
<hr />
<p>thanks</p>
<hr />
<p>Hey! It works. :)</p>
<p>I'm now a &quot;veteran&quot; PHP dev. Because of that, I've not attempted traditional CGI scripting before but now I'm trying to add REBOL to my web dev toolbox and this is now necessary for me to do that. Funny thing... Your bash script example works but my REBOL script is returning a 500 Error for having a &quot;malformed header&quot; even though there are no typos and 2 newlines preceding the content. Off to find out why! Thanks for getting me going this far!</p>
<hr />
<p>I think this usually happens if the code does not print the Content-Type properly.</p>
<hr />
<p>Thanks a lot sir!!</p>
<hr />
<p>Hi,</p>
<p>Instead of manually creating the symlink with</p>
<p>$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/cgi.load</p>
<p>you should use the provided tool a2enmod. Ubuntu also provide a2disconf a2dismod a2dissite a2enconf and a2ensite for enabling and disabling modules, sites and configuration blocks</p>
<p>Thanks for all your work.</p>
<hr />
<p>your post hi-lights exactly what is wrong with the linux community. You seem to think that &quot; Ubuntu also provide a2disconf a2dismod a2dissite a2enconf and a2ensite for [this that and the other thing, that you don't provide any instructions for.]&quot; is somehow better than just cutting and pasting the two lines:</p>
<p>$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/cgi.load</p>
<p>this is exactly the problem with the linux community: If it ain't broke don't fix it.</p>
<p>ALL instructions should be cut and paste lines form the command line. The FIRST set of instructions on setting up Apache is getting the welome screen to come up (that actually works pretty well,) and the second thing should be how to set up cgi-bin. For who knows what reason apache instructions instead go into multiple virtual hosting environments with do-decagon multi-plexing, cross-over premium drivers... whatever thing that is so complex I wouldn't have a chance to follow. Meanwhile I'm stuck getting hello_world.c which I can easily compile with gcc: ($ gcc -o hello_world.exe hellow_world.c) to run through the browser. Its absolutely ridiculous. This should be a no-brainer and up and running in less than 30 seconds.</p>
<hr />
<p>thanks for the post. it helped me alot.</p>
<hr />
<p>Ah, is it this easy? Why have I been thinking it is somewhat bloody difficult? :o)</p>
<p>For the record, I had the cgid.load already present in my 2018-09-26 Raspbian Buster AND if you are getting that 500 server error, make sure the bash script is not indented (as was mine upon pasting it to nano).</p>
<p>Indeed, not it works from me from my other machines too, which sugests I will be able to drive my RasPi car from a web interface.</p>
<hr />
<p>Hello sir i am trying to configure apache files to run a cgi script
on Apache2 server from last 5 days. please help. hope for your better reply..</p>
<p>when i ran my python(test.cgi) file on localhost server (localhost/test.cgi) it prints the code</p>
<hr />
<p>Many thanks!!!</p>
<hr />
<p>Thank you so much!!</p>
<hr />
<p>Thanks Gabor,
It really help us . Earlier we were using centos and recently we migrated to Ubuntu and our health check was failing for one service which is exposed using cgi.</p>
<hr />
<p>curl <a href="http://127.0.0.1/cgi-bin/hw.sh">http://127.0.0.1/cgi-bin/hw.sh</a> seems to be throwing an error for me :(
Where does your localhost point to ?</p>
<hr />
<p>What is the error?</p>
<p>aswin@aswin-desktop:~$ curl <a href="http://127.0.0.1/cgi-bin/hw.sh">http://127.0.0.1/cgi-bin/hw.sh</a></p>
<pre><code>&lt;html&gt;&lt;head&gt;
&lt;title&gt;500 Internal Server Error&lt;/title&gt;
&lt;/head&gt;&lt;body&gt;
&lt;h1&gt;Internal Server Error&lt;/h1&gt;

The server encountered an internal error or
misconfiguration and was unable to complete
your request.


Please contact the server administrator at
webmaster@localhost to inform them of the time this error occurred,
and the actions you performed just before this error.


More information about this error may be available
in the server error log.


---
&lt;address&gt;Apache/2.4.18 (Ubuntu) Server at 127.0.0.1 Port 80&lt;/address&gt;
&lt;/body&gt;&lt;/html&gt;

</code></pre>
<p>and what do you see in the error log of the server?</p>
<hr />
<p>I actually reinstalled lubuntu and tried it again and it works now, this was mostly due to some modifications i did to some of my files.
This article was really helpful :)
Thanks!</p>
<p>Thanks a lot for this article! :)</p>
<p>The missing symlink saved the day! I had the correct apache conf file for site but the cgi was not enabled.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Personal Bookmarks</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-11T22:00:01Z</updated>
    <pubDate>2015-11-11T22:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/personal-bookmarks" />
    <id>https://code-maven.com/personal-bookmarks</id>
    <content type="html"><![CDATA[<p>The objective of this project is to create a web application to store bookmarks.</p>
<p>The owner of the site should be able to store URLs with tags and some comments.
Search the previously stored URL. Edit them and even remove them.</p>
<p>The most basic version can work without any authentication. Assuming it is working on
the desktop computer without external access or assuming it is behind a
&quot;Basic Authentication&quot; system.</p>
<p>An improved version can have an authentication part. It does not need a registration part as
it is a personal system. Only one person, the owner should be able to add/search/edit/delete items.</p>
<p>A 3rd version should allow the owner of the site to add/search/edit/delete items, but it should
also allow anyone to search and view the items.</p>
<p>A 4th level can allow the owner to designate each entry to be &quot;private&quot; or &quot;public&quot;.
Non-authenticated users will only be able to see the entries marked as &quot;public&quot;.</p>
<h2 class="title is-4">Database design</h2>
<p>Each entry has a</p>
<ul>
<li>
<p>URL</p>
</li>
<li>
<p>A title that could be fetched from the web site or typed in manually.</p>
</li>
<li>
<p>0 or more tags. Each tag can be a few words long.</p>
</li>
<li>
<p>A short description.</p>
</li>
<li>
<p>Private note. This is only relevant in the 3rd and 4th level. These comments should be never made public even if the entry is public.</p>
</li>
<li>
<p>A flag marking the entry to be private or public. Only relevant in the 4th version.</p>
</li>
<li>
<p>Date when the item was added.</p>
</li>
<li>
<p>Date when the item was last edited.</p>
</li>
</ul>
<p>The actions the owner or the logged in user should be able to perform:</p>
<ul>
<li>Add a new item.</li>
<li>Search based on any of the fields.</li>
<li>Edit an exsting item.</li>
<li>Delete an existing item.</li>
</ul>
<p>In the 3rd version only the logged in user can search and see items.</p>
<p>In the 4th version then anyone can search, but private entries can be only found by the logged in user.
One must take care that even the autocomplete suggestion system (if there is one) won't suggest words or tags
from private entries as that can reveal information.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Split file path using regex</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-08T21:00:01Z</updated>
    <pubDate>2015-11-08T21:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-split-file-path-with-regex" />
    <id>https://code-maven.com/exercise-split-file-path-with-regex</id>
    <content type="html"><![CDATA[<p>Write two functions.</p>
<p>Given a path like <b>/home/foo/.mozilla/cache/data.txt</b>,
one of the functions will return the filename (<b>data.txt</b>),
the other function will return the full-path directory name (<b>/home/foo/.mozilla/cache</b>).</p>
<p>Handle also the case of <b>c:\home\foo.mozilla\cache\data.txt</b>.</p>
<slidecast file="beginner-perl/exercise-split-path" youtube="ooejgCs6VC4" />
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Echo Web application</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-08T19:00:01Z</updated>
    <pubDate>2015-11-08T19:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-web-echo" />
    <id>https://code-maven.com/exercise-web-echo</id>
    <content type="html"><![CDATA[<p>Display a form and a button. After the user types in some text and clicks on the button,
show &quot;You said: &quot; and the text typed in by the user. Two solutions: one with GET, the other
one with POST.</p>
<h2 class="title is-4">Solutions</h2>
<ul>
<li>Plain HTML</li>
<li>Plain JavaScript</li>
<li><a href="/http-client-request-in-nodejs">Node.js (part 1)</a></li>
<li><a href="/echo-with-flask-and-python">Python: Flask</a></li>
<li><a href="http://perl6maven.com/echo-text-with-bailador">Perl 6: Bailador</a></li>
<li><a href="https://perlmaven.com/pro/echo-with-plain-cgi">Perl 5: Echo with plain CGI</a></li>
<li><a href="https://perlmaven.com/getting-started-with-perl-dancer">Perl 5: Getting started with Perl Dancer - Creating an Echo application</a></li>
<li><a href="https://perlmaven.com/pro/echo-with-plack-cgi">Perl 5: Echo with Plack in CGI mode</a></li>
<li><a href="/echo-with-cgi-in-ruby">Ruby: echo with CGI</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Hello World for Web applications</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-07T11:00:01Z</updated>
    <pubDate>2015-11-07T11:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-web-hello-world" />
    <id>https://code-maven.com/exercise-web-hello-world</id>
    <content type="html"><![CDATA[<p>The first exercise for building web applications.</p>
<p>Write a &quot;web application&quot; that will display <strong>Hello World</strong>.
The first one should be a plain HTML file without any code behind it.</p>
<p>Before going on do the above and then see the <a href="/hello-world-in-plain-html">plain HTML solution</a>.</p>
<p>Then pick your favorite back-end web development environment and write some code that will return the same HTML
created earlier. Each soultion should have several versions:</p>
<ol>
<li>
<p>Just return the string &quot;Hello World!&quot;.</p>
</li>
<li>
<p>Return the HTML 5 version of &quot;Hello World!&quot;</p>
</li>
<li>
<p>Write version in which there is a template with a placeholder for &quot;text&quot; and the code fills that placeholder with the string &quot;Hello World!&quot;.</p>
</li>
</ol>
<h2 class="title is-4">Tools</h2>
<ul>
<li><a href="/html-basics">HTML Basics</a></li>
<li><a href="/set-up-cgi-with-apache">Set up CGI with Apache on Ubuntu Linux</a></li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="/hello-world-in-plain-html">Hello World! in plain HTML</a></li>
<li><a href="/getting-started-with-nodejs">Node.js: Getting Started with Node.js</a></li>
<li><a href="/hello-world-with-flask-and-python">Python: Hello world with Flask and Python</a></li>
<li><a href="http://perl6maven.com/getting-started-with-bailador">Perl 6: Getting started with Bailador</a></li>
<li><a href="https://perlmaven.com/pro/hello-world-with-plain-cgi">Perl 5: Hello World with plain CGI</a></li>
<li><a href="https://perlmaven.com/getting-started-with-psgi">Perl 5: Getting started with PSGI</a></li>
<li><a href="https://perlmaven.com/pro/hello-world-with-plack-cgi">Perl 5: Hello World with Plack in CGI mode</a></li>
<li><a href="https://perlmaven.com/hello-world-with-dancer2">Perl 5: Hello World with Dancer2</a></li>
<li><a href="/hello-world-using-cgi-in-ruby">Ruby: Hello World using CGI</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Send e-mail with attachment</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-07T10:50:01Z</updated>
    <pubDate>2015-11-07T10:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-send-email-with-attachment" />
    <id>https://code-maven.com/exercise-send-email-with-attachment</id>
    <content type="html"><![CDATA[<p>Exercise: Send e-mail with attachment.</p>
<p>Extend your solution for <a href="/exercise-send-plain-text-email">sending plain text e-mail</a>
by allowing the user to provide  a list of filename and send the e-mail with the given files included
as attachments.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Send HTML e-mail</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-07T10:40:01Z</updated>
    <pubDate>2015-11-07T10:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-send-html-email" />
    <id>https://code-maven.com/exercise-send-html-email</id>
    <content type="html"><![CDATA[<p>Exercise: Send HTML e-mail.</p>
<p>Extend your solution for <a href="/exercise-send-plain-text-email">sending plain text e-mail</a>
by allowing the user to provide both a <b>plain text</b> version of the e-mail and an <b>HTML` version of it
and send the e-mail that will contain both.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Send plain text e-mail</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-07T09:40:01Z</updated>
    <pubDate>2015-11-07T09:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-send-plain-text-email" />
    <id>https://code-maven.com/exercise-send-plain-text-email</id>
    <content type="html"><![CDATA[<p>Exercise: Send plain text e-mail.</p>
<p>Create a function that will get one or more addresses where <code>To</code> send the message,
0 or more address to <code>Cc</code> the message. A single addres to pretend as the <code>From</code> field.</p>
<p>Get a string to be the <code>Subject</code> line and some plain text to be the body of the e-mail.</p>
<p>By default this should assume to be running on a Linux/Unix system with a properly configured sendmail program
and use that as the underlying transporting system.</p>
<p>Then also add an optional parameter <code>SMTP</code> that holds the name or IP address of an
<a href="https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol">SMTP server</a>.
When this parameter is given, use the SMTP server to send the e-mail.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Implement the wc command of Linux/Unix (word count)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-05T06:31:25Z</updated>
    <pubDate>2015-11-05T06:31:25Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-implement-linux-wc" />
    <id>https://code-maven.com/exercise-implement-linux-wc</id>
    <content type="html"><![CDATA[<p>Exercise: Implement the <code>wc</code> command of Linux/Unix</p>
<p>See other <a href="/exercises">exercises</a>.</p>
<p>A sample execution of <code>wc</code> looks like this:</p>
<pre><code>$ wc *
      11      34     249 README.pod
       2       4     128 authors.txt
      37     110     773 check_examples.pl
wc: examples: read: Is a directory
    2737    2738   27627 python_weekly.pickle
wc: sites: read: Is a directory
       9      15     149 sites.yml
wc: static: read: Is a directory
    2796    2901   28926 total
</code></pre>
<p>That is. Given a list of things on the command line it counts the number of &quot;lines&quot;, &quot;words&quot;, and &quot;characters&quot; for each file
printing them in 3 columns (in that order) followed by the name of the file.</p>
<p>At the end it will print the totals of each column.</p>
<p>If it encounters something that is not a file (e.g. a directory) it prints a warning and goes on.</p>
<p>In our case there were 3 directories 'examples', 'sites', and 'static'.</p>
<p>Optionally allow the user to supply any of the 3 flags: <code>-l</code> to print the line count, <code>-w</code> to print the word count, or <code>-c</code> to print the charater count.
By default it prints all 3.</p>
<p>If no input file is provided, <code>wc</code> will work on the content arriving on the Standard Input. This means we can write this:</p>
<pre><code>$ find . | wc -l
</code></pre>
<p>and get back the number of file in the directory tree starting in our current working directory.</p>
<h2 class="title is-4">Suggestion</h2>
<p><a href="/exercise-count-words-in-a-file">Count words in a file</a> is a simpler exercise. Solve that first!</p>
<h2 class="title is-4">Tools - Perl 5</h2>
<ul>
<li><a href="https://perlmaven.com/open-and-read-from-files">Perl 5: Open file and read content</a></li>
<li><a href="https://perlmaven.com/argv-in-perl">Perl 5: @ARGV</a></li>
<li><a href="https://perlmaven.com/warn">Perl 5: warn</a></li>
<li>Printing to STDERR</li>
<li>Create functions</li>
<li>Check file type (file, directory, etc)</li>
</ul>
<h2 class="title is-4">Tools - Ruby</h2>
<ul>
<li><a href="/open-file-and-read-content-in-ruby">Ruby: Open file and read content in Ruby</a></li>
<li><a href="/argv-the-command-line-arguments-in-ruby">Ruby: ARGV command line parameters</a></li>
<li>Printing to Standard Error</li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="/python-wc">Python</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Match Roman numbers</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-04T23:01:07Z</updated>
    <pubDate>2015-11-04T23:01:07Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-match-roman-numbers" />
    <id>https://code-maven.com/exercise-match-roman-numbers</id>
    <content type="html"><![CDATA[<p>Exercise: Match Roman numbers</p>
<p>I usually give this as a bonus exercise for people who finish all the other exercises early. Let's see if you can do this?</p>
<p>Write a function that return &quot;true&quot; if the given value is a <a href="https://en.wikipedia.org/wiki/Roman_numerals">Roman number</a>. Can you even write a Roman to &quot;normal&quot;
(also known as <a href="https://en.wikipedia.org/wiki/Arabic_numerals">Arabic</a>) number converter?</p>
<p>Roman numbers are:</p>
<pre><code>I    = 1
II   = 2
III  = 3
IV   = 4
V    = 5
VI   = 6
VII  = 7
VIII = 8
IX   = 9
X    = 10
...
</code></pre>
<pre><code>I     = 1
V     = 5
X     = 10
L     = 50
C     = 100
D     = 500
M     = 1000
</code></pre>
<slidecast file="beginner-perl/exercise-roman-numbers" youtube="0QI6QAZxNwg" />
<h2 class="title is-4">Tools</h2>
<h2 class="title is-4">Solution</h2>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Parse HTTP GET parameters</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-03T21:00:01Z</updated>
    <pubDate>2015-11-03T21:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-parse-http-get-parameters" />
    <id>https://code-maven.com/exercise-parse-http-get-parameters</id>
    <content type="html"><![CDATA[<p>When you visit a web-site, fill in a form and submit it, in some cases you will see the URL containing a question mark <code>?</code>
followed by a long list of key-value pairs. These are the HTTP parameters of this GET request.</p>
<p>Every programming language has plenty of libraries handling these values properly, but we can also use them as an exercise.</p>
<p>So given a string like this:  <code>fname=Foo&amp;lname=Bar&amp;email=foo@bar.com</code>
or a string like this <code>ip=127.0.0.1&amp;machine=foobar</code> create a hash/dictionary/associative array that will hold the key-value
pairs found in the string.</p>
<p>Given <code>fname=Foo&amp;lname=Bar&amp;email=foo@bar.com</code> the data structure should look like this:</p>
<pre><code>{
  'fname' : 'Foo',
  'lname' : 'Bar',
  'email' : 'foo@bar.com'
}
</code></pre>
<p>Given this string <code>ip=127.0.0.1&amp;machine=foobar</code> the data structure should look like this:</p>
<pre><code>{
  'ip'      : '127.0.0.1',
  'machine' : 'foobar'
}
</code></pre>
<p>For extra bonus try to handle this case as well:</p>
<p>Given <code>fname=Foo&amp;lname=Bar&amp;email=foo@bar.com&amp;email=here@there.or</code> the data structure should look like this:</p>
<pre><code>{
  'fname' : 'Foo',
  'lname' : 'Bar',
  'email' : [ 'foo@bar.com', 'here@there.or' ]
}
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Add numbers taken from a CSV file</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-02T16:01:25Z</updated>
    <pubDate>2015-11-02T16:01:25Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-add-numbers-from-csv-file" />
    <id>https://code-maven.com/exercise-add-numbers-from-csv-file</id>
    <content type="html"><![CDATA[<p>Exercise: Add numbers taken from a CSV file</p>
<p>See other <a href="/exercises">exercises</a>.</p>
<p>Given a CSV file like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/process_csv_file.csv">examples/data/process_csv_file.csv</a></strong></p>
<pre><code class="language-csv">Tudor;Vidor;10;Hapci
Szundi;Morgo;7;Szende
Kuka;Hofeherke;100;Kiralyno
Boszorkany;Herceg;9;Meselo

</code></pre>
<p>Write a script that will take the values of the 3rd in this Comma Separated Values file
and add them together.</p>
<p>Can your code also handle this file?</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/distance.csv">examples/data/distance.csv</a></strong></p>
<pre><code class="language-csv">Budapest,Bukarest,1200,km
Tel Aviv,Beirut,500,km
London,Dublin,300,km
New York,&quot;Moscow, East&quot;,6000,km
Local,&quot;Remote
Location&quot;,10,km

</code></pre>
<h2 class="title is-4">Tools</h2>
<ul>
<li>
<p><a href="https://perlmaven.com/perl-split">Perl 5 split</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/csv">Perl 5 CSV</a></p>
</li>
<li>
<p><a href="/ruby-split">Ruby split</a></p>
</li>
<li>
<p><a href="http://ruby-doc.org/stdlib-2.0.0/libdoc/csv/rdoc/CSV.html">Ruby CSV</a></p>
</li>
</ul>
<h2 class="title is-4">Solutions in Perl 5</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-process-csv-file">Perl 5 Process CSV file</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-process-csv-file-short-version">Perl 5 Process CSV file short version</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-oneliner-sum-of-csv">Perl 5 One-liner sum of column in CSV</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-text-csv-xs">Process CSV file using Text::CSV_XS</a></li>
</ul>
<h2 class="title is-4">Solution Ruby</h2>
<ul>
<li>
<p><a href="/reading-csv-file-in-ruby">Reading CSV file in Ruby</a></p>
</li>
</ul>
<h2 class="title is-4">Solution in Groovy</h2>
<ul>
<li><a href="/groovy-read-csv-file">Readng CSV file in Groovy</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: parse variable width fields</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-11-01T09:30:38Z</updated>
    <pubDate>2015-11-01T09:30:38Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-parse-variable-width-fields" />
    <id>https://code-maven.com/exercise-parse-variable-width-fields</id>
    <content type="html"><![CDATA[<p>Exercise: parse variable width fields</p>
<slidecast file="beginner-perl/exercise-parse-variable-width-fields" youtube="6NoHj4sehWc" />
<p>In this log file I got from some company, there are rows in which the first 16 and last 16 characters
describe some kind of an addresses while everything in between describes several commands.</p>
<p>Each command is built up by a leading character (A, B, C, D, etc) and a number
of digits. The number of digits depend on the leading character.</p>
<p>In this exercise we need to split up the data to commands and count how many times
each command type was given.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/variable_width_fields.log">examples/data/variable_width_fields.log</a></strong></p>
<pre><code class="language-log">1234567890123456A001B0002D00004C0000051234567890123456
1234567890123456A001A002D00004C0000051234567890123456

</code></pre>
<h2 class="title is-4">Tools</h2>
<ul>
<li></li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-parse-variable-width-fields">Perl 5: parse variablew width fields</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: parse INI file</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-31T16:34:40Z</updated>
    <pubDate>2015-10-31T16:34:40Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-parse-ini-file" />
    <id>https://code-maven.com/exercise-parse-ini-file</id>
    <content type="html"><![CDATA[<p>Exercise: parse-ini-file</p>
<slidecast file="beginner-perl/exercise-parse-ini-file" youtube="InGai4vtEhc" />
<p>An INI or Config file looks like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/inifile.ini">examples/data/inifile.ini</a></strong></p>
<pre><code class="language-ini">
# comment
[alpha]
 
base  = moon
ship= alpha 3
 
[earth]
   # ?
base=London   
ship=  x-wing



</code></pre>
<p>It has sections that start with a section name in square brackets and inside section it has key-value pairs separated by an equal sign surrounded
by 0 or more spaces. Empty rows are disregarded. Any line starting with a <code>#</code> is considered a comment and is also disregarded.
In some extended cases we can have key-value pairs before any section was declared and they will belong to an implicit seciton called <code>_</code>.
In other extended cases multi-line values are also allowed.</p>
<p>For our purpuse we can go with simple ini files.</p>
<p>The task is to create a script that can parse such input file and create a hash-of-hashes (dictionary of dictionaries in Python)
where the primary key is the section name, the secondary key is the 'key' and the value is the value in each line.</p>
<p>The Perl dump of the above INI file would look like this:</p>
<pre><code>$VAR1 = {
          'earth' =&gt; {
                       'base' =&gt; 'London',
                       'ship' =&gt; 'x-wing'
                     },
          'alpha' =&gt; {
                       'base' =&gt; 'moon',
                       'ship' =&gt; 'alpha 3'
                     }
        };
</code></pre>
<h2 class="title is-4">Tools</h2>
<ul>
<li></li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Match hexa, octal, binary numbers</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-31T09:01:07Z</updated>
    <pubDate>2015-10-31T09:01:07Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-hexa-octal-binary" />
    <id>https://code-maven.com/exercise-hexa-octal-binary</id>
    <content type="html"><![CDATA[<p>Exercise: Match hexa, octal, binary numbers</p>
<p>Write 3 functions that return &quot;true&quot; if the given value is a</p>
<ul>
<li>Hexadecimal number</li>
<li>Octal number</li>
<li>Binary number</li>
</ul>
<slidecast file="beginner-perl/exercise-hexa-octal-binary" youtube="TUr41AAm0Hg" />
<h2 class="title is-4">Tools</h2>
<ul>
<li><a href="https://perlmaven.com/perl-tutorial">Perl 5: The Regex chapters in the Perl Tutorial</a></li>
</ul>
<h2 class="title is-4">Solution</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-hexa-octal-binary">Perl 5 match hexa, octal, and binary numbers</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Match numbers with regex</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-30T18:01:06Z</updated>
    <pubDate>2015-10-30T18:01:06Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-match-numbers-with-regex" />
    <id>https://code-maven.com/exercise-match-numbers-with-regex</id>
    <content type="html"><![CDATA[<p>Exercise: match a number</p>
<p>Write a function that given a string returns &quot;true&quot; if the string is a number and &quot;false&quot; if it is not a number.
As there might be several definitions of what a number is, you need to create several solutions one for each definition:</p>
<ul>
<li>Non negative integer.</li>
<li>Integer. (Will you also allow + in front of the number or only - ?</li>
<li>Real number. (Do you allow .3 ? What about 2. ?</li>
<li>In scientific notation. (something like this: 2.123e4 )</li>
</ul>
<slidecast file="beginner-perl/exercise-number" youtube="NB5_G3DLVRQ" />
<h2 class="title is-4">Tools</h2>
<ul>
<li><a href="https://perlmaven.com/perl-tutorial">Perl 5: The Regex chapters in the Perl Tutorial</a></li>
</ul>
<h2 class="title is-4">Solution</h2>
<ul>
<li>
<p><a href="https://perlmaven.com/beginner-perl-maven-solution-number">Perl 5 match numbers with regex</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Regexes part 1</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-30T12:10:13Z</updated>
    <pubDate>2015-10-30T12:10:13Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-regexes-part-1" />
    <id>https://code-maven.com/exercise-regexes-part-1</id>
    <content type="html"><![CDATA[<p>Regexes exercise 1</p>
<p>Pick up a file with some text in it. Write a script (one for each item) that prints
out every line from the file that matches the requirement.
You can use the script at the end of the page as a starting point but you will have to change it!</p>
<ul>
<li>has a 'q'</li>
<li>starts with a 'q'</li>
<li>has 'th'</li>
<li>has an 'q' or a 'Q'</li>
<li>has a '*' in it</li>
<li>starts with an 'q' or an 'Q'</li>
<li>has both 'a' and 'e' in it</li>
<li>has an 'a' and somewhere later an 'e'</li>
<li>does not have an 'a'</li>
<li>does not have an 'a' nor 'e'</li>
<li>has an 'a' but not 'e'</li>
<li>has at least 2 consequtive vowels (a,e,i,o,u) like in the word &quot;bear&quot;</li>
<li>has at least 3 vowels</li>
<li>has at least 6 characters</li>
<li>has at exactly 6 characters</li>
<li>all the words with either 'Bar' or 'Baz' in them</li>
<li>all the rows with either 'apple pie' or 'banana pie' in them</li>
<li>for each row print if it was apple or banana pie?</li>
<li>Bonus: Print if the same word appears twice in the same line</li>
<li>Bonus: has a double character (e.g. 'oo')</li>
</ul>
<h2 class="title is-4">Ruby</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/ruby/regex_exercise_1.rb">examples/ruby/regex_exercise_1.rb</a></strong></p>
<pre><code class="language-ruby">
if ARGV.length != 1
    puts &quot;Usage: Needs filename&quot;
    exit
end

fh = open ARGV[0]
fh.each do |line|
    if /REGEX/.match(line)
        print line
    end
end

</code></pre>
<h2 class="title is-4">Python</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/python/regex_exercise_1.py">examples/python/regex_exercise_1.py</a></strong></p>
<pre><code class="language-python">#!/usr/bin/env python
from __future__ import print_function

import sys
import re

if len(sys.argv) != 2:
    print(&quot;Usage:&quot;, sys.argv[0], &quot;FILE&quot;)
    exit()

filename = sys.argv[1]
f = open(filename, 'r')

for line in f:
    print(line, end=&quot; &quot;)

    match = re.search(r'REGEX1', line)
    if match:
       print(&quot;   Matching 1&quot;, match.group(0))

    match = re.search(r'REGEX2', line)
    if match:
       print(&quot;   Matching 2&quot;, match.group(0))

</code></pre>
<h2 class="title is-4">Perl</h2>
<p>For Perl check out the respective <a href="https://perlmaven.com/beginner-perl-maven-exercise-regexes-1">regex exercise</a> page on the Perl Maven site.</p>
<h2 class="title is-4">Solution - Perl 5</h2>
<ul>
<li>
<p><a href="https://perlmaven.com/beginner-perl-maven-solution-regexes-1">Perl 5 regexes 1</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/beginner-perl-maven-solution-regexes-2">Perl 5 regexes 2</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/beginner-perl-maven-solution-regexes-3">Perl 5 regexes 3</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: parse hours log file and create time report</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-30T08:20:01Z</updated>
    <pubDate>2015-10-30T08:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-parse-hours-log-file-and-create-time-report" />
    <id>https://code-maven.com/exercise-parse-hours-log-file-and-create-time-report</id>
    <content type="html"><![CDATA[<p>Exercise: Parse hours log file and create time report.</p>
<slidecast file="beginner-perl/exercise-create-time-report" youtube="ICyJWvVAts4" />
<p>When I was running class-room Perl training courses I've was logging how my course progresses and created
log files like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/timelog.log">examples/data/timelog.log</a></strong></p>
<pre><code class="language-log">09:20 Introduction
11:00 Exercises
11:15 Break
11:35 Scalars
12:30 Lunch Break
13:30 Exercises
14:10 Solutions
14:30 Break
14:40 Arrays
15:40 Exercises
17:00 Solutions
17:30 End

09:30 Advanced Arrays
10:30 Break
10:50 Exercises
12:00 Solutions
12:30 Hash fuction introduction
12:45 Lunch Break
14:15 Exercises
16:00 Solutions
16:15 Break
16:30 Subroutines
17:00 Exercises
17:30 End

</code></pre>
<p>Every row starts with the timestamp when the specific activity started and then the name of the activity.
Empty rows separate the dates.</p>
<p>Some of the activities are the names of the lectures, such as <b>Introduction</b> and <b>Scalars</b>.
Others are the names of the names of the activities: <b>Exercises</b>, <b>Solutions</b>, <b>Break</b>, <b>Lunch Break</b>,
and <b>End</b> marks the end of the training day.</p>
<p>A course lasts several days. In our sample file we have two days.</p>
<p>Once I had these log file I wanted to generate two reports.</p>
<p>One of them was to display the same data, but showing from-to timestamps and removing the <b>End</b> entry.
It would look like this:</p>
<pre><code>09:20-11:00 Introduction
11:00-11:15 Exercises
11:15-11:35 Break
...
</code></pre>
<p>The other one would show the accumulated time spent on various activities
and the lectures detailed.</p>
<pre><code>Lectures:  210 minutes 22%
Solutions:  95 minutes  9%
Break:      65 minutes  6%
...


Lectures: 
Introduction:  23 minutes 2%
...
</code></pre>
<p>This is the exercise, to implement the code that will take the log file and generate the reports.</p>
<h2 class="title is-4">Tools</h2>
<ul>
<li></li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: sort SNMP numbers</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-29T12:20:34Z</updated>
    <pubDate>2015-10-29T12:20:34Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-sort-snmp-numbers" />
    <id>https://code-maven.com/exercise-sort-snmp-numbers</id>
    <content type="html"><![CDATA[<p>Given a file with <a href="https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol">SNMP</a> numbers
(one number on every line) print them in sorted order comparing the first number of each SNMP number first.
If they are equal then comparing the second number, etc...</p>
<p>Actually the format is called <a href="https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One">ASN 1</a>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/snmp.txt">examples/data/snmp.txt</a></strong></p>
<pre><code class="language-txt">1.2.7.6
4.5.7.23
1.2.7
1.12.23
2.3.5.7.10.8.9 

</code></pre>
<slidecast file="beginner-perl/exercise-sort-snmp-numbers" youtube="CF92m6Y8CGQ" />
<h2 class="title is-4">Tools</h2>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-sort-snmp-numbers">Perl 5:</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Count words in a file</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-28T21:20:34Z</updated>
    <pubDate>2015-10-28T21:20:34Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-count-words-in-a-file" />
    <id>https://code-maven.com/exercise-count-words-in-a-file</id>
    <content type="html"><![CDATA[<p>Similar to the exercise in which we <a href="/exercise-count-digits">counted digits</a>, this time we would like to count words.</p>
<p>Give a file that contains lots of line, each line containig words separated by a space, we would like to count how many times
each word appear. For the sake of simplicty in parsing, we can assume that there are no special pnctuations that we might need
to get around. Just words separated by a space.</p>
<p>A small input file might look like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/text.txt">examples/data/text.txt</a></strong></p>
<pre><code class="language-txt">one word another word
a new sentence and a new word

</code></pre>
<h2 class="title is-4">Tools</h2>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="/beginner-perl-maven-counting-words-in-a-file">Counting words in a file</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Sort based on secondary condition</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-28T07:20:34Z</updated>
    <pubDate>2015-10-28T07:20:34Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-sort-based-on-secondary-condition" />
    <id>https://code-maven.com/exercise-sort-based-on-secondary-condition</id>
    <content type="html"><![CDATA[<p>We have a file with strings in it. We would like to sort then according to length. The short strings first.
The result is that within the strings of the same length we see them in random order. How can we sort them according to abc?
So first come the short strings, but within each length we have abc order.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/words_to_sort.txt">examples/data/words_to_sort.txt</a></strong></p>
<pre><code class="language-txt">Foo
Foobar
Bar
Baz
Moo
Another
Reallylong
Shorter

</code></pre>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-sort">Perl 5: How to sort based on secondary condition in Perl</a></li>
<li>TODO: Ruby: How to sort in Ruby based on secondary condition?</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: sort scores</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-27T18:01:25Z</updated>
    <pubDate>2015-10-27T18:01:25Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-sort-scores" />
    <id>https://code-maven.com/exercise-sort-scores</id>
    <content type="html"><![CDATA[<p>Exercise: sort scrores</p>
<p>See other <a href="/exercises">exercises</a>.</p>
<slidecast file="beginner-perl/exercise-sort-scores" youtube="oba286a-F10" />
<p>In this exercise you a file with scores. Each line has a name and a number (a score) separated by a comma.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/score_data.txt">examples/data/score_data.txt</a></strong></p>
<pre><code class="language-txt">Foo,23
Bar,70
Baz,92
Bozo,17
Gozo,52
Dardon,20
Mekodra,23

</code></pre>
<p>The first task is to read in the file and print out the names with their scores ordered by name
givin the following result:</p>
<pre><code>Bar      70
Baz      92
Bozo     17
Dardon   20
Foo      23
Gozo     52
Mekodra  23
</code></pre>
<p>The second task is to print them ordered by scores resulting in:</p>
<pre><code>Baz      92
Bar      70
Gozo     52
Foo      23
Mekodra  23
Dardon   20
Bozo     17
</code></pre>
<h2 class="title is-4">Tools</h2>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-sort-scores">Perl 5: sort scores</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Analyze Apache log file - count every host</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-27T07:20:01Z</updated>
    <pubDate>2015-10-27T07:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-analyze-apache-log-file-count-every-host" />
    <id>https://code-maven.com/exercise-analyze-apache-log-file-count-every-host</id>
    <content type="html"><![CDATA[<p>In this <a href="/exercises">exercise</a> we take a log file generated by a web server, and
extend the previous exercise <a href="/exercise-analyze-apache-log-file-count-localhost">analyzing Apache log files</a>.</p>
<slidecast file="beginner-perl/exercise-improve-apache-analyzer" youtube="oQTSLam_-xE" />
<p>The task is to write a scrip that will count how many requests came from each different IP address and then
print them in descending order.</p>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-improve-apache-analyzer">Perl 5: Counting the number of hits in an Apche log file.</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: sort mixed string</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-27T01:01:40Z</updated>
    <pubDate>2015-10-27T01:01:40Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-sort-mixed-string" />
    <id>https://code-maven.com/exercise-sort-mixed-string</id>
    <content type="html"><![CDATA[<p>Exercise: sort mixed string</p>
<p>In a file we have the following strings: A1 B1 A27 A3 ... each string has a single letter at the beginning and then a number.</p>
<p>Sort them first based on the first letter and among values with the same leading letter sort them according to the numbers so the above values would be in the following order:</p>
<pre><code>A1 A3 A27 B1
</code></pre>
<p>File:</p>
<pre><code>A1 A27 C1 B1 B12 A38 B3 A3
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: display unique rows of a file</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-26T22:20:26Z</updated>
    <pubDate>2015-10-26T22:20:26Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-display-unique-rows-of-a-file" />
    <id>https://code-maven.com/exercise-display-unique-rows-of-a-file</id>
    <content type="html"><![CDATA[<p>Exercise: display unique rows of a file</p>
<p>Given a the following file:</p>
<pre><code>A 1
B 2
A 2
C 3
B 2
D 4
C 1
</code></pre>
<p>Create another file in which the first character is unique:</p>
<pre><code>A 1
B 2
C 3
D 4
</code></pre>
<h2 class="title is-4">Tools</h2>
<h2 class="title is-4">Solutions</h2>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Improve Number guessing game</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-25T20:20:01Z</updated>
    <pubDate>2015-10-25T20:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-improve-number-guessing-game" />
    <id>https://code-maven.com/exercise-improve-number-guessing-game</id>
    <content type="html"><![CDATA[<p>This is an extension of the <a href="">Number guessing game exercise</a>.</p>
<p>This exercise has several steps.</p>
<p>First of all, let the user guess several times (with responses each time), until she finds the hidden number.</p>
<p>Allow various special keys too:</p>
<ul>
<li>n - skip the rest of this game (give up) and start a new game with new hidden number.</li>
<li>s - show the hidden value (cheat).</li>
<li>m - toggle: turn on/off move mode: When the move mode is on, after every guess the number can change by 2 in either direction.</li>
<li>d - toggle: turn on / off debug mode. In debug mode show the hidden number every time before you are asked to supply the guess.</li>
<li>x - exit</li>
</ul>
<p>Now I can tell you that this is actually a 1 dimensional space fight. The number is your distance from the enemy space ship.</p>
<p>For training purposes limit the outer space to be between 0-200 so even when the move mode is on the space-ship won't fly off this area.</p>
<p>Finaly, keep track of the minimum and maximum score (number of guesses till hit) in a file.</p>
<h2 class="title is-4">Tools</h2>
<ul>
<li></li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-number-guessing-game-multiple-guesses">Perl 5: Improve the number guessing game - multiple guesses</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-number-guessing-game-exit">Perl 5: Improve the number guessing game - exit</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-number-guessing-game-s-show">Perl 5: Improve the number guessing game - s for show</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-number-guessing-game-n-next-game">Perl 5: Improve the number guessing game - n for next game</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-number-guessing-game-d-debug-toggle">Perl 5: Improve the number guessing game - d for debug mode</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-number-guessing-game-m-move-toggle">Perl 5: Improve the number guessing game - m for move mode</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: count digits</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-23T23:23:23Z</updated>
    <pubDate>2015-10-23T23:23:23Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-count-digits" />
    <id>https://code-maven.com/exercise-count-digits</id>
    <content type="html"><![CDATA[<p>Exercise: count digits in a file</p>
<p>Given a file like this, that has rows of numbers in it without anything, but a single space in between the numbers.
Our task is to count how many times each digit appears.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/count_digits.txt">examples/data/count_digits.txt</a></strong></p>
<pre><code class="language-txt">23 34 9512341
3 34 2452345 5353 67 22
42136357013412
42 5 65 64 

</code></pre>
<p>Our expected output looks like this:</p>
<pre><code>0 1
1 5
2 9
3 11
4 9
5 8
6 4
7 2
8 0
9 1
</code></pre>
<h2 class="title is-4">Tools for Perl 5</h2>
<ul>
<li>&lt;a href-&quot;<a href="https://perlmaven.com/perl-tutorial%22%3EThe">https://perlmaven.com/perl-tutorial&quot;&gt;The</a> Perl 5 tutorial</a> in general.</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-shift">Perl 5: shift from @ARGV</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-open-or-die">Perl 5: open a file for reading or die</a>.</li>
<li><a href="https://perlmaven.com/perl-arrays">Perl 5: Arrays</a></li>
<li><a href="https://perlmaven.com/chomp">Perl 5: chomp, remove trailing newlines</a>.</li>
<li><a href="https://perlmaven.com/perl-split">Perl 5: split, to cut a string into pieces</a>.</li>
</ul>
<h2 class="title is-4">Tools for Ruby</h2>
<ul>
<li><a href="/argv-the-command-line-arguments-in-ruby">Ruby: ARGV for command line parameters</a></li>
<li><a href="/open-file-and-read-content-in-ruby">Ruby: Open file and read content</a></li>
<li><a href="/ruby-arrays">Ruby: Arrays</a></li>
<li><a href="/for-loop-in-ruby">Ruby: Iterate over elements of a an array</a></li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-count-digits">Perl 5 count digits</a></li>
<li><a href="/count-digits-using-ruby">Ruby: count digits</a></li>
<li><a href="/groovy-count-digits">Groovy: count digits</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Improve the color selector</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-23T16:01:25Z</updated>
    <pubDate>2015-10-23T16:01:25Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-improve-the-color-selector" />
    <id>https://code-maven.com/exercise-improve-the-color-selector</id>
    <content type="html"><![CDATA[<p>Exercise: Improve the <a href="/exercise-color-selector">color selector</a></p>
<p>See other <a href="/exercises">exercises</a></p>
<p>There are several parts of this exercise:</p>
<ul>
<li>The <a href="/exercise-color-selector">color selector</a> created previously shows menu items numbered from 0. Change it so the displayed numbers will start at 1 but that it will still work correctly.</li>
<li>Currently the user can give any value on the command line. Incluing &quot;nonsense&quot;. Check that the given value
is indeed one of the possible values hard-coded in the script. Report an error and quit if it isn't.</li>
<li>Allow the user to supply a flag called --force If this flag is present allow any value as a color. Even &quot;nonsense&quot;.</li>
<li>Read the names of the valid colors from the colors.txt file.</li>
<li>Allow the user to supply a --file flag as in &quot;--file mycolor.txt&quot; and take the name of the file with the colors from there.</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: color selector</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-22T01:01:25Z</updated>
    <pubDate>2015-10-22T01:01:25Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-color-selector" />
    <id>https://code-maven.com/exercise-color-selector</id>
    <content type="html"><![CDATA[<p>Exercise: color selector</p>
<p>See other <a href="/exercises">exercises</a></p>
<p>Given a list of colors (Blue, Yellow, Brown, White) create a script that will display a menu and ask the user to select one of the colors:
For example an interaction would look like this:</p>
<pre><code>$ perl color_selector.pl

Please select a number:
0) Blue
1) Yellow
2) Brown
3) White

2
The selected color is Brown
</code></pre>
<p>or like this:</p>
<pre><code>$ perl color_selector.pl

Please select a number:
0) Blue
1) Yellow
2) Brown
3) White

7
Bad selection
</code></pre>
<h2 class="title is-4">Tools</h2>
<ul>
<li>
<p><a href="https://perlmaven.com/perl-arrays">Arrays in Perl 5</a></p>
</li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-array-indexes">Perl 5: Color selector, menu from array</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: write report to file</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-21T22:01:25Z</updated>
    <pubDate>2015-10-21T22:01:25Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-write-report-to-file" />
    <id>https://code-maven.com/exercise-write-report-to-file</id>
    <content type="html"><![CDATA[<p>Exercise: write report to file</p>
<p>See other <a href="/exercises">exercises</a></p>
<p>Take your solution from the <a href="/exercise-add-more-statistics">Add more statistics</a> exercise, and write the result
into a file.</p>
<h2 class="title is-4">Tools</h2>
<ul>
<li>
<p><a href="https://perlmaven.com/beginner-perl-maven-write-to-file">Write to file in Perl (screencast)</a> and <a href="http://perlmaven.com/writing-to-files-with-perl">writing to file in Perl (article)</a></p>
</li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li>
<p><a href="https://perlmaven.com/beginner-perl-maven-solution-write-report-to-file">Perl 5 - write report to file</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: add more statistics</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-21T07:01:25Z</updated>
    <pubDate>2015-10-21T07:01:25Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-add-more-statistics" />
    <id>https://code-maven.com/exercise-add-more-statistics</id>
    <content type="html"><![CDATA[<p>Exercise: add more statistics</p>
<p>See other <a href="/exercises">exercises</a>.</p>
<p>Take the solution from the <a href="/exercise-sum-of-numbers-in-file">count sum exercise</a> where we added up the numbers in each row of a file,
and add additional statistical values:</p>
<ul>
<li>minumum</li>
<li>maximum</li>
<li>average</li>
</ul>
<p>If you are following the <a href="/exercises">exercises</a> then caluclating median and standard deviation might too difficult at this point, but you can give them a try.</p>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-add-more-statistics">Perl 5 - add more statistics</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Analyze Apache log file - count localhost</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-20T11:20:01Z</updated>
    <pubDate>2015-10-20T11:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-analyze-apache-log-file-count-localhost" />
    <id>https://code-maven.com/exercise-analyze-apache-log-file-count-localhost</id>
    <content type="html"><![CDATA[<p>In this <a href="/exercises">exercise</a> we take a log file generated by a web server, and do some simple analysis on it.</p>
<p>The file looks like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/apache_access.log">examples/data/apache_access.log</a></strong></p>
<pre><code class="language-log">127.0.0.1 - - [10/Apr/2007:10:39:11 +0300] &quot;GET / HTTP/1.1&quot; 500 606 &quot;-&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
127.0.0.1 - - [10/Apr/2007:10:39:11 +0300] &quot;GET /favicon.ico HTTP/1.1&quot; 200 766 &quot;-&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
139.12.0.2 - - [10/Apr/2007:10:40:54 +0300] &quot;GET / HTTP/1.1&quot; 500 612 &quot;-&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
139.12.0.2 - - [10/Apr/2007:10:40:54 +0300] &quot;GET /favicon.ico HTTP/1.1&quot; 200 766 &quot;-&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
127.0.0.1 - - [10/Apr/2007:10:53:10 +0300] &quot;GET / HTTP/1.1&quot; 500 612 &quot;-&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
127.0.0.1 - - [10/Apr/2007:10:54:08 +0300] &quot;GET / HTTP/1.0&quot; 200 3700 &quot;-&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
127.0.0.1 - - [10/Apr/2007:10:54:08 +0300] &quot;GET /style.css HTTP/1.1&quot; 200 614 &quot;http://machine.local/&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
127.0.0.1 - - [10/Apr/2007:10:54:08 +0300] &quot;GET /img/machine-round.jpg HTTP/1.1&quot; 200 17524 &quot;http://machine.local/&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
127.0.0.11 - - [10/Apr/2007:10:54:21 +0300] &quot;GET /unix_sysadmin.html HTTP/1.1&quot; 200 3880 &quot;http://machine.local/&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
217.0.22.3 - - [10/Apr/2007:10:54:51 +0300] &quot;GET / HTTP/1.1&quot; 200 34 &quot;-&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
217.0.22.3 - - [10/Apr/2007:10:54:51 +0300] &quot;GET /favicon.ico HTTP/1.1&quot; 200 11514 &quot;-&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
217.0.22.3 - - [10/Apr/2007:10:54:53 +0300] &quot;GET /cgi/machine.pl HTTP/1.1&quot; 500 617 &quot;http://contact.local/&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
127.0.0.1 - - [10/Apr/2007:10:54:08 +0300] &quot;GET / HTTP/0.9&quot; 200 3700 &quot;-&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
217.0.22.3 - - [10/Apr/2007:10:58:27 +0300] &quot;GET / HTTP/1.1&quot; 200 3700 &quot;-&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
217.0.22.3 - - [10/Apr/2007:10:58:34 +0300] &quot;GET /unix_sysadmin.html HTTP/1.1&quot; 200 3880 &quot;http://machine.local/&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;
217.0.22.3 - - [10/Apr/2007:10:58:45 +0300] &quot;GET /talks/Fundamentals/read-excel-file.html HTTP/1.1&quot; 404 311 &quot;http://machine.local/unix_sysadmin.html&quot; &quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)&quot;

</code></pre>
<p>Every row is a request on a web server. Some are pages, some are images, some are JavaScript files.
That's not the important part now. Currently we are going to focus on the first field of every line
which is the IP address of the requester. We go with a simple exercise.</p>
<p>As you might know, every device uses the IP address 127.0.0.1 to refer to itself. So visitors arriving from
that IP address are based on the same machine.</p>
<p>The task is to write a scrip that will count how many requests came from 127.0.0.1 and how many from elsewhere?</p>
<h2 class="title is-4">Tools</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-open-file">Perl 5: open the file for reading or die</a></li>
<li><a href="https://perlmaven.com/chomp">Perl 5: chomp remove trailing newlines</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-string-functions-index">Perl 5: index</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-substr">Perl 5: substr</a></li>
<li><a href="/argv-the-command-line-arguments-in-ruby">Ruby: ARGV command line parameters</a>.</li>
<li><a href="/open-file-and-read-content-in-ruby">Ruby: open a file for reading and iterate over it</a>.</li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="https://perlmaven.com/beginner-perl-maven-analyze-apache-log-file">Perl 5 - Analyze Apache log file - count localhost</a></li>
<li><a href="/analyze-apache-log-file-count-localhost-in-ruby">Ruby - Analyze Apache log file - count localhost</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Sum of numbers in a file</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-19T00:00:01Z</updated>
    <pubDate>2015-10-19T00:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-sum-of-numbers-in-file" />
    <id>https://code-maven.com/exercise-sum-of-numbers-in-file</id>
    <content type="html"><![CDATA[<p>Let's implement something slightly useful.</p>
<p>In this <a href="/exercises">exercise</a> we have a file called <code>numbers.txt</code> that has numbers in it.
Each line is a number.</p>
<p>Our aim is to add the numbers and print the result.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/data/numbers.txt">examples/data/numbers.txt</a></strong></p>
<pre><code class="language-txt">3
7
23
0
-17
98
12

</code></pre>
<p>Expected result is 126.</p>
<h2 class="title is-4">Tools</h2>
<p>Some of the tools you might need to solve this exercise.</p>
<ul>
<li>
<p>Perl:</p>
  <ul>
</li>
<li>
<p><a href="https://perlmaven.com/beginner-perl-maven-scalar-values-and-variables">Scalar values and variabels in Perl</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/beginner-perl-maven-numerical-operators">Numerical operators in Perl</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/beginner-perl-maven-open-file">Open file in Perl</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/beginner-perl-maven-while-loop">Perl while loop</a></p>
  </ul>
</li>
<li>
<p>Ruby:</p>
  <ul>
</li>
<li>
<p><a href="/open-file-and-read-content-in-ruby">Open file and read content line-by-line in Ruby</a></p>
</li>
<li>
<p>Convert string to number in Ruby</p>
</li>
<li>
<p>For the advanced version:</p>
</li>
<li>
<p>map in Ruby</p>
</li>
<li>
<p>reduce in Ruby</p>
  </ul>
</li>
<li>
<p>Python:</p>
  <ul>
</li>
<li>
<p>Open file in Python</p>
</li>
<li>
  </ul>
</li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="/python-sum-of-numbers-in-file">Python: sum of numbers</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-sum-numbers-in-a-file">Perl 5: sum of numbers in a file</a></li>
<li><a href="/sum-of-numbers-in-file-using-ruby">Ruby: sum of numbers in a file</a></li>
<li><a href="/groovy-sum-of-numbers">Groovy: sum of numbers</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Number guessing game</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-18T09:20:01Z</updated>
    <pubDate>2015-10-18T09:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-number-guessing-game" />
    <id>https://code-maven.com/exercise-number-guessing-game</id>
    <content type="html"><![CDATA[<p>In this <a href="/exercises">exercise</a> we are starting to build a game, called the number guessing game.</p>
<p>The game is that the computer &quot;thinks&quot; about a number and we have to guess it. On every guess, the computer will tell
us if our guess was smaller or bigger than the hidden number. The game ends when we find the number.</p>
<p>This exercise is the first step of this game.</p>
<h2 class="title is-4">Create a simple command line game guessing a whole number.</h2>
<ol>
<li>
<p>Let the computer &quot;think&quot; about a whole number between 1-200.</p>
</li>
<li>
<p>Let the user guess a number.</p>
</li>
<li>
<p>Tell the user if his guess was bigger or smaller than the number the computer &quot;thought&quot; of or tell them if they hit the right number.</p>
</li>
<li>
<p>At this point the user only has one guess, though as a bounus you can allow the user to guess several times.</p>
</li>
</ol>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="/number-guessing-in-ruby">Number guessing in Ruby</a></li>
<li><a href="/number-guessing-in-python">Number guessing in Python</a></li>
<li><a href="https://perlmaven.com/beginner-perl-maven-solution-number-guessing-game">Number guessing in Perl 5</a></li>
<li><a href="http://perl6maven.com/number-guessing-game">Number guessing in Perl 6</a></li>
<li><a href="/groovy-number-guessing-game">Number guessing in Groovy</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Hello World</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-14T09:20:01Z</updated>
    <pubDate>2015-10-14T09:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-hello-world" />
    <id>https://code-maven.com/exercise-hello-world</id>
    <content type="html"><![CDATA[<p>First <a href="/exercises">exercise</a> - checking your environment.</p>
<slidecast file="beginner-perl/exercise-hello-world" youtube="t2ria8wh6Dg" />
<p>Try your environment:</p>
<ul>
<li>
<p>Make sure you have access to the right version of your language. Pick the language you are currently learning from the below list:</p>
   <ul>
</li>
<li>
<p>Perl 5: As of this writing version 5.30 is already out, but most of the material will work on 5.10 and even 5.8, if you cannot upgrade. (See the <a href="https://www.cpan.org/src/README.html">most recent release of Perl 5</a>.)</p>
</li>
<li>
<p>Raku (formerly known as Perl 6): See the <a href="https://rakudo.org/">most recent version of Raku</a> (that was 2019.03 when I updated this).</p>
</li>
<li>
<p>Ruby: 2.5.x will be fine. Check out the <a href="https://www.ruby-lang.org/en/downloads/">most recent version of Ruby</a>.</p>
</li>
<li>
<p>Python: In case you have Python 2 (e.g. 2.7.x) you should strongly consider switching to Python 3. Even though if you need to maintain legacy code then you might need to know Python 2 as well.</p>
</li>
<li>
<p>In the Python 3 series any of 3.8.x is the most recent, but most of the examples will work on older versions of Python 3 as well. See the <a href="https://www.python.org/downloads/">most recent version of Python</a>.</p>
</li>
<li>
<p>Go version go1.12.9 looks fine. The you could get the <a href="https://golang.org/dl/">most recent version of Go</a>.</p>
   </ul>
</li>
<li>
<p>Check you can read the documentation.</p>
</li>
</ul>
<!--
    <ul>
* Perl 5: perldoc
    </ul>
-->
<ul>
<li>Check if you have a good editor with syntax highlighting.</li>
<li>Write a simple script that prints     &quot;Hello world!&quot;.</li>
<li>Add comments to your code.</li>
<li>Add user documentation to your code.</li>
</ul>
<h2 class="title is-4">Solutions</h2>
<ul>
<li><a href="/hello-world-in-java">Java</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Exercise: Calculate the area of a rectangular</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-14T09:16:39Z</updated>
    <pubDate>2015-10-14T09:16:39Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercise-rectangular" />
    <id>https://code-maven.com/exercise-rectangular</id>
    <content type="html"><![CDATA[<p><a href="/exercises">Exercise</a>: Calculate the area of a rectangular</p>
<p>Write a program that computes the area of a rectangular.</p>
<ul>
<li>Start by having two hard coded values. Multiply them and print the result. The result should be 42:</li>
</ul>
<pre><code>$ perl example.pl
42
</code></pre>
<ul>
<li>Then change the code to prompt the user for two numbers. Multiply them and print the result:</li>
</ul>
<pre><code>$ perl example.pl
First number: 7
Second number: 6
42

# ruby example.rb
First number: 3
Second number: 11
33
</code></pre>
<ul>
<li>Further modify the program to warn if one of the numbers given was negative.</li>
</ul>
<pre><code>$ python example.py
First number: 3
Second number: -1
Warning: Invalid input. The side of a rectangular cannot be negative.
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Programming Exercises</title>
    <summary type="html"><![CDATA[Some simple exercises and several project ideas to practice programming.]]></summary>
    <updated>2015-10-14T09:00:01Z</updated>
    <pubDate>2015-10-14T09:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/exercises" />
    <id>https://code-maven.com/exercises</id>
    <content type="html"><![CDATA[<p>When learning a programming language, the most important thing is to practice.
Here are some exercises you can do. For each exercise, as time permits, I am going to
add instructions specific to some programming languages,
but these exercises can be solved in almost any other programming language.</p>
<p>Once you feel comfortable with the exercises you can pick one of the more complex <a href="/projects">projects</a> as well.</p>
<h2 class="title is-4">Introduction</h2>
<ol>
<li>
<p><a href="/exercise-hello-world">Hello World (print, documentation, comments)</a></p>
</li>
</ol>
<h2 class="title is-4">Scalars</h2>
<ol>
<li>
<p><a href="/exercise-rectangular">Calculate Area of Rectangular (Standard I/O, if)</a></p>
</li>
<li>
<p><a href="/exercise-number-guessing-game">Number guessing game (random, prompt, if)</a></p>
</li>
<li>
<p><a href="/exercise-calculator">Create calculator</a></p>
</li>
</ol>
<h2 class="title is-4">Files</h2>
<ol>
<li>
<p><a href="/exercise-sum-of-numbers-in-file">Sum of numbers in a file (open, loop +=)</a></p>
</li>
<li>
<p><a href="/exercise-analyze-apache-log-file-count-localhost">Analyze Apache log file</a> (count localhost vs others, index, substr)</p>
</li>
<li>
<p><a href="/exercise-add-more-statistics">Add more statistics</a></p>
</li>
<li>
<p><a href="/exercise-write-report-to-file">Write report to file</a></p>
</li>
</ol>
<h2 class="title is-4">Lists and Arrays</h2>
<ol>
<li>
<p><a href="/exercise-color-selector">Color selector</a></p>
</li>
<li>
<p><a href="/exercise-add-numbers-from-csv-file">Add numbers taken from CSV file</a></p>
</li>
<li>
<p><a href="/exercise-improve-the-color-selector">Improve the color selector</a></p>
</li>
<li>
<p><a href="/exercise-improve-number-guessing-game">Improve number guessing game</a></p>
</li>
<li>
<p><a href="/exercise-count-digits">Count digits</a></p>
</li>
<li>
<p><a href="/exercise-sort-based-on-secondary-condition">Sort based on secondary condition</a></p>
</li>
<li>
<p><a href="/exercise-display-unique-rows-of-a-file">Display unique rows of a file</a></p>
</li>
<li>
<p><a href="/exercise-sort-mixed-string">Sort mixed strings</a></p>
</li>
<li>
<p><a href="/exercise-queue">Queue at the Doctor</a></p>
</li>
<li>
<p><a href="/exercise-number-is-prime">Check if number is prime</a></p>
</li>
<li>
<p><a href="/exercise-reverse-polish-calculator">Reverse Polish Calculator</a></p>
</li>
</ol>
<h2 class="title is-4">Hashes, Dictionaries</h2>
<ol>
<li>
<p><a href="/exercise-count-words-in-a-file">Count words in a file</a></p>
</li>
<li>
<p><a href="/exercise-parse-http-get-parameters">Parse HTTP GET parameters</a></p>
</li>
<li>
<p><a href="/exercise-sort-scores">Sort scores</a></p>
</li>
<li>
<p><a href="/exercise-analyze-apache-log-file-count-every-host">Analyze Apache log file</a> (count all the hits from all the clients)</p>
</li>
<li>
<p><a href="/exercise-parse-variable-width-fields">Parse file with variable width fields</a></p>
</li>
</ol>
<h2 class="title is-4">Functions and Subroutines</h2>
<ol>
<li>
<p><a href="/exercise-rot13">Implement ROT13</a></p>
</li>
</ol>
<h2 class="title is-4">Regular Expressions, Regexes</h2>
<ol>
<li>
<p><a href="/exercise-regexes-part-1">Regex Exercises - part 1</a></p>
</li>
<li>
<p><a href="/exercise-match-numbers-with-regex.txt">Match numbers with regex</a></p>
</li>
<li>
<p><a href="/exercise-hexa-octal-binary">Match hexa, octal, binary numbers</a></p>
</li>
<li>
<p><a href="/exercise-match-roman-numbers">Match Roman numbers</a></p>
</li>
<li>
<p><a href="/exercise-split-file-path-with-regex">Split file path with regex</a></p>
</li>
<li>
<p><a href="/exercise-sort-snmp-numbers">Sort SNMP numbers</a></p>
</li>
<li>
<p><a href="/exercise-parse-hours-log-file-and-create-time-report">Parse hours log file and create time report</a></p>
</li>
<li>
<p><a href="/exercise-parse-ini-file">Parse INI or Config files.</a></p>
</li>
</ol>
<h2 class="title is-4">Linux</h2>
<ol>
<li>
<p><a href="/exercise-linux-as-a-virtual-environment-nginx">Linux as a Virtual Environment - install + nginx</a></p>
</li>
</ol>
<h2 class="title is-4">Shell</h2>
<h2 class="title is-4">3rd party libraries</h2>
<ol>
<li>
<p>Install Module from CPAN/PyPi/Gems/etc.</p>
</li>
</ol>
<h2 class="title is-4">Simple applications</h2>
<ol>
<li>
<p><a href="/exercise-counter">Counter</a></p>
</li>
<li>
<p><a href="/exercise-implement-linux-wc">Exercise: Implement the wc command of Linux/Unix (word count)</a></p>
</li>
<li>
<p>Traverse directory implementing du</p>
</li>
<li>
<p><a href="/one-dimensional-spacefight">One dimensional spacefight (aka. The spaceship operator)</a></p>
</li>
<li>
<p><a href="/mastermind">MasterMind</a></p>
</li>
</ol>
<h2 class="title is-4">Mix</h2>
<ol>
<li>
<p><a href="/exercise-send-plain-text-email">Send plain text e-mail</a></p>
</li>
<li>
<p><a href="/exercise-send-html-email">Send HTML e-mail</a></p>
</li>
<li>
<p><a href="/exercise-send-email-with-attachment">Send e-mail with attachments</a></p>
</li>
<li>
<p><a href="/compare-wikipedia-translations">Compare Wikipedia translations</a></p>
</li>
<li>
<p><a href="/rss-atom-to-email">RSS/Atom to e-mail</a></p>
</li>
</ol>
<h2 class="title is-4">Web development</h2>
<ol>
<li>
<p><a href="/exercise-web-hello-world">Hello World</a></p>
</li>
<li>
<p><a href="/exercise-web-echo">Echo in a web application</a></p>
</li>
</ol>
<h2 class="title is-4">Web crawlers</h2>
<ol>
<li>
<p><a href="/download-a-web-page">Download a web page, fetch a URL</a></p>
</li>
<li>
<p><a href="/ted">TED</a></p>
</li>
</ol>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>RSS/Atom to e-mail</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-13T15:30:01Z</updated>
    <pubDate>2015-10-13T15:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/rss-atom-to-email" />
    <id>https://code-maven.com/rss-atom-to-email</id>
    <content type="html"><![CDATA[<p>Part of the project ideas for people who would like to <a href="/exercises">practice programming</a>.</p>
<p>Pick and RSS or Atom feed and write a script that will fetch the feed, parse the content and send an e-mail with the extracted content
if it matches some pre-defined expression.</p>
<p>For Ruby try the <a href="http://feeds.feedburner.com/gemcutter-latest">Atom feed</a> of <a href="https://rubygems.org/">Rubygems</a>.
and send an e-mail to yourself listing all the recently uploaded gems that have the letter 'r' in their name.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ruby Tutorial</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-07T08:40:00Z</updated>
    <pubDate>2015-10-07T08:40:00Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ruby-tutorial" />
    <id>https://code-maven.com/ruby-tutorial</id>
    <content type="html"><![CDATA[]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>What is Expect</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-05T08:30:01Z</updated>
    <pubDate>2015-10-05T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/expect" />
    <id>https://code-maven.com/expect</id>
    <content type="html"><![CDATA[<p><a href="https://en.wikipedia.org/wiki/Expect">Expect</a> is tool to automate interaction with an application providing a CLI (Command Line Interface).
This can be anything you would type in on the command line and where you could C<expect> some answer.</p>
<p>Normally when you are using the command line you type in some command. That command prints out something.
You know that the command has finished by the appearance of the prompt. Then you know you can type in
something new to do something else. For example:</p>
<h3 class="title is-5">Local shell</h3>
<pre><code>air:data gabor$ ls -l
total 8
-rw-r--r--  1 gabor  staff  1999 Aug  3 07:45 feeds.url
air:data gabor$ 
</code></pre>
<p>In this case the prompt is <code>air:data gabor$</code></p>
<h3 class="title is-5">Remote shell</h3>
<p>You can use the same to execute commands on a remote machine via ssh. For this you'd type in <code>ssh server</code>
and (assuming you have public key authentication) you'd wait for the prompt of the other machine.</p>
<pre><code>air:data gabor$ ssh server
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 4.1.0-x86_64-linode59 x86_64)

 * Documentation:  https://help.ubuntu.com/

0 packages can be updated.
0 updates are security updates.

Last login: Sun Oct  4 19:28:43 2015 from 102.13.217.111
gabor@server:~$ 
</code></pre>
<p>When accessing the remote server we will have to wait more time for the response. We will get all kind of output, but
we (people) know that we can start typing by the fact that the prompt we <b>expect</b> on the remote machine appears.</p>
<h3 class="title is-5">Remote shell with username/password</h3>
<p>If I did not have public key authentication set up with the remote server, it would have asked me for my username and password:</p>
<p>The interaction would look something like this:</p>
<pre><code>air:data gabor$ ssh server
Username: gabor
Password: *******
...
gabor@server:~$ 
</code></pre>
<p>Where 'gabor' and the text hidden by the stars was typed in by me. The ... represent the same text as we saw in the previous example.</p>
<p>So after typing in <code>ssh server</code>, how did I know I need to type in my password? What was I really <b>expecting</b> when I typed
in <code>ssh server</code>? I was expecting the text <code>Username:</code>. Then after I typed in my username and pressed ENTER, I was expecting
the text <code>Password:</code> to appear. Then once I typed in my password, I knew some text will appear, but I was really expecting the
remote prompt <code>gabor@server:~$</code>. That's what indicates me (a person) that I got in the remote machine and I can type in commands there.</p>
<h3 class="title is-5">CLI applications in general</h3>
<p>In general every CLI application works the same way. We type in something. The applications does something and prints some response.
We will know that it has finished doing its job when a special string appears. In some cases this can be a 'standard' prompt.
In other cases it can be some random data.</p>
<h3 class="title is-5">bc as a CLI</h3>
<p>You might know <code>bc</code> which is a command line calculator. Let's see an interaction with bc (running on the remote server):</p>
<pre><code>
gabor@server:~$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
19+23
42
exit
0
quit
gabor@server:~$ 
</code></pre>
<p>I typed in <code>bc</code>. It printed out some &quot;banner&quot;. After a while it stopped printing. Then I typed in <code>19+23</code> and pressed enter.
It printed 42. Then, when I wanted to leave the application I typed in <code>exit</code> and pressed ENTER. I was <b>expecting</b> to see the prompt
of my shell, but instead of that I saw 0. (Apparently you cannot exit bc by typing in <code>exit</code>.)
Then I typed in <code>quit</code> and pressed ENTER again. I knew I left the application when the prompt
<code>gabor@server:~$</code> appeared.</p>
<p>In this case, within the application, there was no prompt at all. The first time I knew I can type my math expression when the end of the banner appeared.
First time when I tried this I learned that it will print a banner ending with the word 'warranty'. From that point on I was <b>expecting</b>
this word. If it did not appear I'd be confused thinking there is some problem with <code>bc</code>.</p>
<p>Then I typed in <code>19+23</code>. This time, not knowing what the answer is going to be, I was <b>expecting</b> some number to appear.
Though I was not very surprised when it gave <a href="https://en.wikipedia.org/wiki/Phrases_from_The_Hitchhiker's_Guide_to_the_Galaxy#The_number_42">the answer</a>.</p>
<p>Then when I wanted to leave, at first time my expectation was not met.</p>
<h2 class="title is-4">What if something goes wrong?</h2>
<p>In the above interaction almost everything was perfect. Just as we <b>expected</b>. (Except when we typed in <code>exit</code> and it returned 0.)
In the real world however all kinds of things can go wrong and we have to handle those situations as well. For example what if we try to
access the remote server using <code>ssh</code> but the server is down or it is otherwise busy. The ssh client might quite and our own local shell
would print our local prompt without giving any error message. It might give some error message and then show the local prompt. Or it might just wait.
And wait. As humans, after a while we would conclude that the remote server is not responding, press Ctrl-C and leave <code>ssh</code>.</p>
<p>Even if the remote server works it can have several different responses when we try to access it. If we have the appropriate private-key/public-key pair
it will let us in and we'll see the remote banner and remote prompt. Otherwise it will prompt for a <code>Username:</code> and a <code>Password:</code>.
In other cases it might assume the same username we have on our local system and prompt only for <code>Password:</code>.</p>
<p>When writing an automated script we'll have to make sure it can handle all these cases and probably all kinds of other cases I have not thought about.</p>
<h2 class="title is-4">What is Expect then?</h2>
<p>So <code>Expect</code> is a tool that will help us automate the interaction with any application that has a Command Line Interface (CLI).</p>
<p>There are a number of implementation of Expect in a number of programming languages. Their features and their usage differs from each other,
but in general they try to provide an easy automation of CLI apps.</p>
<ul>
<li>
<p><a href="http://www.nist.gov/el/msid/expect.cfm">Original expect in Tcl</a></p>
</li>
<li>
<p><a href="https://metacpan.org/pod/Expect">Expect in Perl</a></p>
</li>
<li>
<p><a href="https://github.com/pexpect/pexpect">pexpect in Python</a></p>
</li>
<li>
<p>Ruby rexpect</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Adventure in crawling and scraping the World</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-10-04T11:30:01Z</updated>
    <pubDate>2015-10-04T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/adventures-in-crawling-and-scraping-the-world" />
    <id>https://code-maven.com/adventures-in-crawling-and-scraping-the-world</id>
    <content type="html"><![CDATA[<p>While the two words <code>crawling</code> and <code>scraping</code> are usually interchangeable - at least when we are talking about the web -
they still might have sime slightly different meaning.  Crawling usually refers to the acto of going from page to page, traversing one or more sites.
Scraping on the other hand usually refers to analyzing one or a very limited set of pages.</p>
<p>Or maybe I am just making up this distinction. Who knows what other means by these words?</p>
<p><code>bots</code>, <code>robots</code>, <code>web spiders</code> usually refer to the software that does the <code>crawling</code> or <code>scraping</code></p>
<h2 class="title is-4">Tasks</h2>
<p>The most simple task is to download a given URL.</p>
<p>Then if the returned thing is an HTML page, we can</p>
<p>Dowload images.</p>
<p>Download certain files. (Images would be of course one of the possibilites, but you might want to download all the JavaScript files,
or all the movies, or ...)</p>
<h2 class="title is-4">Problems encountered</h2>
<p><b>Exclusion</b> There are part of web site you do not want to crawl. Either because you are not
interested, or because you would like to be a good citizen and abide by the requets of the site own
as expressed in the <code>robots.txt</code> file.
<code>robots.txt</code> is a file that describes the preferences of the site owner regarding which bot
can visit which areas of the web site.</p>
<p><b>Depth</b> - how many clicks from the starting page do you want to crawl?</p>
<p><b>Simultaneous pages</b> - On one hand dowloading the pages one after the other might take a lot of time.
on the other hand downloading 100 pages at the same time from the same server might get you banned from that site.
You need to find the right balance.</p>
<p><b>Pause between pages</b> to further ease on the load we generate on the server we might want to pause between downloading pages
from the same server.</p>
<p><b>Starting URLs</b> Some way to describe more than one starting URLs.</p>
<p><b>Loops</b> Avoiding the repeated download of he same page.</p>
<p><b>Terms of Service</b> some web site might have some legal document describing what you are entitled to crawl and what you can do with the
data you've downloaded. For example displaying the same content on another site as it was on the original site
is usually not one of the thing you should do.</p>
<p>Handling JavaScript on the web site. Crawling web sites</p>
<p>Handling parameters in the URLs. <a href="http://examples.org/">http://examples.org/</a>  <a href="http://examples.org/?id=42">http://examples.org/?id=42</a> Are these the same pages? When encountering the latter, should we just remove
the part after the ? mark?</p>
<p>Handling buttons. Should the crawler click on buttons as well, or only on links?</p>
<p>Handling forms. Should our crawler fill forms and click on submit buttons? What values should it fill in?</p>
<p>Cross links: When we would like to crawl one or more specific site we have to make sure linke that lead outside of this
cluster are not followed. OTOH we would want to allow following the links between the sites of the pre-defined list of URLs.</p>
<p>www and without wwww.  There are still some sites that server the same content from both <a href="http://www.example.com">www.example.com</a> and example.com instead of
redirecting one to the other. We have to decide if we would like to treat these two as different site or if we would like to crawl only
one of them. What will we do if there is a link from one of the sites to the other one, or from some other page from the cluster
we are indexing. Will we then replace one of the URLs by the other pretend that they actually redirect?
In other wods if we decided to index example.com but then there is a link leading to <a href="http://www.example.com/abc">http://www.example.com/abc</a>  shall we actually try to
fetch <a href="http://example.com/abc">http://example.com/abc</a> instead?</p>
<h2 class="title is-4">Tools of the trade</h2>
<h3 class="title is-5">JavaScript / NodeJS</h3>
<ul>
<li><a href="https://nodejs.org/api/http.html">http</a> (see how to <a href="/building-a-crawler-in-nodejs">build a crawler in NodeJS</a>)</li>
<li><a href="https://github.com/sylvinus/node-crawler">node-crawler</a></li>
<li><a href="https://www.npmjs.com/package/node-jsdom">node-jsdom</a></li>
<li><a href="https://github.com/virushuo/node-crawler-cheerio">node-crawler-cheerio</a></li>
<li><a href="http://phantomjs.org/">PhantomJS</a></li>
</ul>
<h3 class="title is-5">Python</h3>
<ul>
<li><a href="https://docs.python.org/2/library/urllib.html">urllib</a></li>
<li><a href="https://docs.python.org/2/library/urllib2.html">urllib2</a></li>
<li><a href="http://scrapy.org/">Scrapy</a></li>
</ul>
<h3 class="title is-5">Perl 5</h3>
<ul>
<li><a href="https://metacpan.org/pod/LWP::Simple">LWP::Simple</a></li>
<li><a href="https://metacpan.org/pod/LWP::UserAgent">LWP::UserAgent</a></li>
<li><a href="https://metacpan.org/pod/WWW::Mechanize">WWW::Mechanize</a></li>
<li><a href="https://metacpan.org/pod/WWW::Spyder">WWW::Spyder</a></li>
<li><a href="https://metacpan.org/pod/WWW::Crawler::Lite">WWW::Crawler::Lite</a></li>
<li><a href="https://metacpan.org/pod/WWW::Crawler::Mojo">WWW::Crawler::Mojo</a></li>
<li><a href="https://metacpan.org/pod/Web::Query">Web::Query</a></li>
<li><a href="https://metacpan.org/pod/Mojo::UserAgent">Mojo::UserAgent</a> and <a href="http://blogs.perl.org/users/stas/2013/01/web-scraping-with-modern-perl-part-1.html">mojo-crawler</a> and <a href="https://gist.github.com/creaktive/4607326">yada-crawler</a></li>
<li><a href="https://metacpan.org/pod/Scrappy">Scrappy</a></li>
<li><a href="https://metacpan.org/pod/Web::Scraper">Web::Scraper</a></li>
<li><a href="https://perlmaven.com/pro/web-scraping-with-html-treebuilder">Web scraping with HTML::TreeBuilder</a></li>
<li><a href="https://perlmaven.com/simple-way-to-fetch-many-web-pages">A Simple way to download many web pages using Perl: LWP::Simple and HTTP::Tiny</a></li>
<li><a href="https://perlmaven.com/fetching-several-web-pages-in-parallel-using-anyevent">Fetching several web pages in parallel using AnyEvent</a></li>
</ul>
<h3 class="title is-5">Ruby</h3>
<p>&lt;l&quot;&gt;<a href="https://rubygems.org/gems/mechanize">mechanize</a></p>
<ul>
<li>
<p><a href="https://rubygems.org/gems/excon">excon</a></p>
</li>
<li>
<p><a href="https://rubygems.org/gems/httparty">httparty</a></p>
</li>
<li>
<p><a href="https://www.ruby-toolbox.com/projects/httpclient">httpclient</a></p>
</li>
<li>
<p><a href="https://www.ruby-toolbox.com/projects/curb">curb</a></p>
</li>
<li>
<p><a href="https://www.ruby-toolbox.com/projects/typhoeus">Typhoeus</a></p>
</li>
<li>
<p><a href="https://www.ruby-toolbox.com/projects/patron">Patron</a></p>
</li>
</ul>
<h2 class="title is-4">The alternative: Common Crawl</h2>
<p><a href="http://commoncrawl.org/">Common Crawl</a></p>
<h2 class="title is-4">Books</h2>
<ul>
<li><a href="http://shop.oreilly.com/product/0636920034391.do">Web Scraping with Python</a></li>
<li><a href="http://www.oreilly.com/openbook/webclient/">Web Client Programming with Perl</a></li>
</ul>
<h2 class="title is-4">Other</h2>
<ul>
<li>
<p><a href="http://scrapinghub.com/">Scraping Hub</a> is scraping as a service.</p>
</li>
<li>
<p><a href="https://www.deepcrawl.com/">DeepCrawl</a></p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Show ads to visitors based on referrer using JavaScript only</title>
    <summary type="html"><![CDATA[Show or hide HTML snippets (ads or anything else) to people based on the previously visited site.]]></summary>
    <updated>2015-10-02T18:30:01Z</updated>
    <pubDate>2015-10-02T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/show-ads-to-visitors-based-on-referrer" />
    <id>https://code-maven.com/show-ads-to-visitors-based-on-referrer</id>
    <content type="html"><![CDATA[<p>You might want to treat visitors to your site differently based on where they came from. Especially if they came from another
page on the same site. You can easily achieve this using some JavaScript code and looking at the <code>referrer</code>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/ads_to_selected_visitors.html">examples/js/ads_to_selected_visitors.html</a></strong></p>
<pre><code class="language-html">&lt;h1&gt;Title&lt;/h1&gt;

&lt;div id=&quot;ad_code_maven&quot;&gt;
Internal visitor arriving from another Code-Maven page.
&lt;/div&gt;
&lt;div id=&quot;ad_others&quot;&gt;
This is shown to people arriving from outside of th Code-Maven site.
&lt;/div&gt;



&lt;p&gt;
Text.
&lt;/p&gt;


&lt;script&gt;	
console.log(document.referrer);
console.log(document.referrer.split('/')[2]);

if (document.referrer.split('/')[2] === 'code-maven.com') { 
    document.getElementById('ad_code_maven').style.display = 'block'; 
    document.getElementById('ad_others').style.display = 'none'; 
} else {
    document.getElementById('ad_code_maven').style.display = 'none'; 
    document.getElementById('ad_others').style.display = 'block'; 
}
&lt;/script&gt;

</code></pre>
<p><a href="examples/js/ads_to_selected_visitors.html">view</a></p>
<p>In most browsers the attribute <code>document.referrer</code> contains the page that was visited earlier.
It is normally set by the browser wen you click on a link or when you are somehow forwarded from one page to another.</p>
<p>If you type in a new URL in the address bar and press ENTER them this attriibute will be empty.</p>
<p>We can use this attribute to identify which other site and which page sent the visitor to us.
We can use the full value in <code>document.referrer</code> or we can extract part of if. For example
<code>document.referrer.split('/')[2]</code> will extract the domain name.</p>
<p>We can then locate an HTML element using <code>getElementById</code> and the <code>id</code> of the element and we can
set the <code>display</code> attribute  to either <code>'none'</code> to remove the element  from the DOM and make it disappear,
or we can set it to <code>'block'</code> to show it. (We could also set it to <code>'inline'</code> if you'd like to show it in the
same line as another element. There are a few additional values it can take, but these are the most common.</p>
<p>In our code example we have two <code>div</code> elements. One of them is shown to 'internal visitors', the others to everyone else.
Of course, you could use similar conditions to show specific message to people coming from Google or from any other site.</p>
<h2 class="title is-4">Comments</h2>
<p>not working</p>
<hr />
<p>my bad, works but it must be exactly the same url. Meaning that if you are on <a href="http://www.code-maven.com">www.code-maven.com</a>, this code won't work. It must be changed to code-maven.com (without www prefix).</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Simple pages or tabs using AngularJS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-09-28T13:30:01Z</updated>
    <pubDate>2015-09-28T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/simple-pages-or-tabs-with-angularjs" />
    <id>https://code-maven.com/simple-pages-or-tabs-with-angularjs</id>
    <content type="html"><![CDATA[<p>Even though we are calling this applications <b>&quot;Single Page Applications&quot;</b>, because we let the browser talk to the server behind the
scenes, in the end in many application we'll have multiple &quot;views&quot;. For example Gmail has the &quot;list inbox&quot; view and the &quot;show single email&quot; view
and probably a few other views.</p>
<h2 class="title is-4">Simple page with multiple tabs</h2>
<p>This is probably the most simple implementation:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/simple_pages.html">examples/angular/simple_pages.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;

&lt;div ng-app&gt;
  &lt;div&gt;
      &lt;button ng-click=&quot;page='first'&quot;&gt;First&lt;/button&gt;
      &lt;button ng-click=&quot;page='second'&quot;&gt;Second&lt;/button&gt;
  &lt;/div&gt;
  
  
  &lt;div ng-init=&quot;page='first'&quot;&gt;&lt;/div&gt;
  
  &lt;div ng-show=&quot;page === 'first'&quot;&gt;
  &lt;h2&gt;First&lt;/h2&gt;
  &lt;/div&gt;
  
  &lt;div ng-show=&quot;page === 'second'&quot;&gt;
  &lt;h2&gt;Second&lt;/h2&gt;
  &lt;/div&gt;

&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/simple_pages.html">view</a></p>
<p>We created a variable called <code>page</code> which is actually connected to the <code>$scope</code>, but that's not relevant to us now.</p>
<p>We have two <code>div</code> elements using <code>ng-show</code> with a simple condition to decide if they need to be shown or not. Basically these two div
elements are the two pages or tabs.</p>
<p>There is a single <code>div</code> element with&lt; <code>ng-init</code> that sets the initial value of the <code>page</code> variable, and thus sets the initial page.</p>
<p>Finall, but what comes at the top of the page, are two buttons. Each one with an <code>ng-click</code> directive that will set the <code>page</code> variable
when the user clicks on the button. If you try this page, you'll see you can easily switch between the two pages, or two tabs by clicking on the button.</p>
<p>It is also very easy to add more pages with their appropriate buttons.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Counter in MongoDB client</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-09-25T10:30:01Z</updated>
    <pubDate>2015-09-25T10:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/counter-in-mongodb-client" />
    <id>https://code-maven.com/counter-in-mongodb-client</id>
    <content type="html"><![CDATA[<p>In the <a href="/counter">big counter example</a> mostly we use programming languages, but this time I am going to use the MongoDB client
to implement a counter. Later we can use this example to build counters using some programming language and MongoDB as the storage facility.</p>
<p>Launch the MongoDB client and connect to MongoDB server:</p>
<pre><code>$ mongo
</code></pre>
<p>Switch to a database: (We call it <code>test</code>)</p>
<pre><code>&gt; use test
</code></pre>
<p>List the existing collections (there are none):</p>
<pre><code>&gt; show collections
system.indexes  0.000MB / 0.000MB
</code></pre>
<p>Alternatively, list all the entries in the <code>counter</code> collection: (there are none):</p>
<pre><code>&gt; db.counter.find()
Fetched 0 record(s) in 0ms
</code></pre>
<h2 class="title is-4">Insert a counter</h2>
<p>Insert a document where we decide the <code>_id</code>, this is going to be the key of the counter,
and it has aanother field called 'val' that is set to the initial value of 1.</p>
<pre><code>&gt; db.counter.insert({ '_id' : 'a', 'val' : 1 })
Inserted 1 record(s) in 9ms
WriteResult({
  &quot;nInserted&quot;: 1
})
</code></pre>
<h2 class="title is-4">Retreive a document</h2>
<p>We can retreive the counter by specifying its name:</p>
<pre><code>&gt; db.counter.find( { '_id' : 'a' })
{
  &quot;_id&quot;: &quot;a&quot;,
  &quot;val&quot;: 1
}
Fetched 1 record(s) in 1ms
</code></pre>
<h2 class="title is-4">Increment the counter</h2>
<pre><code>&gt; db.counter.update({ '_id' : 'a'}, {'$inc' : { 'val' : 1 } })
Updated 1 existing record(s) in 3ms
WriteResult({
  &quot;nMatched&quot;: 1,
  &quot;nUpserted&quot;: 0,
  &quot;nModified&quot;: 1
})
</code></pre>
<p>and retreive the new value:</p>
<pre><code>&gt; db.counter.find( { '_id' : 'a' })
{
  &quot;_id&quot;: &quot;a&quot;,
  &quot;val&quot;: 2
}
</code></pre>
<h2 class="title is-4">Insert another counter</h2>
<pre><code>&gt; db.counter.insert({ '_id' : 'b', 'val' : 1 })
</code></pre>
<p>Increment both of them separately:</p>
<pre><code>&gt; db.counter.update({ '_id' : 'a'}, {'$inc' : { 'val' : 1 } })
&gt; db.counter.update({ '_id' : 'a'}, {'$inc' : { 'val' : 1 } })
&gt; db.counter.update({ '_id' : 'a'}, {'$inc' : { 'val' : 1 } })
&gt; db.counter.update({ '_id' : 'b'}, {'$inc' : { 'val' : 1 } })
</code></pre>
<h2 class="title is-4">Retreive the individual counters</h2>
<pre><code>&gt; db.counter.find( { '_id' : 'a' })
{
  &quot;_id&quot;: &quot;a&quot;,
  &quot;val&quot;: 5
}
Fetched 1 record(s) in 1ms
</code></pre>
<pre><code>&gt; db.counter.find( { '_id' : 'b' })
{
  &quot;_id&quot;: &quot;b&quot;,
  &quot;val&quot;: 2
}
Fetched 1 record(s) in 0ms
</code></pre>
<h2 class="title is-4">Retreive all the counters</h2>
<pre><code>&gt; db.counter.find()
{
  &quot;_id&quot;: &quot;a&quot;,
  &quot;val&quot;: 5
}
{
  &quot;_id&quot;: &quot;b&quot;,
  &quot;val&quot;: 2
}
Fetched 2 record(s) in 1ms
</code></pre>
<h2 class="title is-4">findAndModify and upsert</h2>
<p>An even better solution is to use the <code>findAndModify</code> function call, and even include an
<code>upsert</code> field to make sure the docuemnt is created if it does not exist.</p>
<pre><code>&gt; db.counter.findAndModify({ query: { '_id' : 'y' }, update : { '$inc' : { val : 1 } }, new: true, upsert: true })
{
  &quot;_id&quot;: &quot;y&quot;,
  &quot;val&quot;: 1
}
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Node.js</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-09-15T08:04:00Z</updated>
    <pubDate>2015-09-15T08:04:00Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/nodejs" />
    <id>https://code-maven.com/nodejs</id>
    <content type="html"><![CDATA[<ul>
<li><a href="/getting-started-with-nodejs">Getting started with Node.js</a></li>
<li><a href="/reading-a-file-with-nodejs">Reading a file with Node.js - blocking and non-blocking</a></li>
<li><a href="/argv-raw-command-line-arguments-in-nodejs">argv - raw command line arguments in Node.js</a></li>
<li><a href="/how-to-exit-a-nodejs-script">How to exit a Node.js script</a></li>
<li><a href="/system-information-about-a-file-or-directory-in-nodejs">How to get system information of a file or directory in Node.js (stat)</a></li>
<li><a href="/list-content-of-directory-with-nodejs">List content of a directory with Node.js</a></li>
<li><a href="/http-client-request-in-nodejs">HTTP Client request in Node.js (GET request and data from POST request)</a></li>
<li><a href="/building-a-crawler-in-nodejs">Building a web client (a crawler) using Node.js</a></li>
<li><a href="/javascript-function-that-accepts-any-number-of-arguments">JavaScript function that accepts any number of arguments</a></li>
<li><a href="/using-underscore-in-nodejs-and-in-the-borwser">Using Underscore in Node.js and in the browser</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>AngularJS Tutorial</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-08-24T12:30:01Z</updated>
    <pubDate>2015-08-24T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/angularjs" />
    <id>https://code-maven.com/angularjs</id>
    <content type="html"><![CDATA[<p><a href="https://angularjs.org/">AngularJS</a> is a JavaScript framework that enhances HTML.</p>
<p>Here you'll find a few simple examples using AngularJS, slowly building up to become a Tutorial.</p>
<p>For other introductions you might want to look at the <a href="http://www.angularjsbook.com/">AngularJS Book</a> by Chris Smith
or the <a href="https://www.ng-book.com/">ng-book</a> by Ari Lerner. Once you get over the first steps, reading the
<a href="https://docs.angularjs.org/">AngularJS API and documentation</a> becomes quite useful.</p>
<ol>
<li><a href="/getting-started-with-angularjs">Getting Started with AngularJS (expressions)</a></li>
<li><a href="/angularjs-first-binding">AngularJS: First binding</a></li>
<li><a href="/hello-world-with-angular-controller">Hello World with AngularJS module and controller</a></li>
<li><a href="/add-numbers-with-angular">Add numbers with AngularJS</a></li>
<li><a href="/simple-in-memory-counter-with-angularjs">Simple in-memory counter with AngularJS</a></li>
<li><a href="/automatic-counter-using-angularjs">Automatic counter using AngularJS</a></li>
<li><a href="/calculator-in-angularjs">A calculator in AngularJS</a></li>
<li><a href="/todo-in-angularjs">TODO in AngularJS</a> Submit input box on pressing ENTER. ng-repeate and handling duplicate values in ng-repeate.</li>
<li><a href="/dependency-injection-in-angularjs">Dependency Injection in AngularJS - with and without introspection</a></li>
<li><a href="/angular-recursive-template">Almost infinite recursive template in AngularJS for representing tree structures</a></li>
<li><a href="/simple-pages-or-tabs-with-angularjs">Simple pages or tabs using AngularJS</a></li>
</ol>
<h2 class="title is-4">Other</h2>
<ul>
<li><a href="https://perlmaven.com/dancer2-angularjs-single-page-application">Single Page Application with Perl Dancer and AngularJS</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Sites with public API with CORS - Cross-Origin Resource Sharing enabled</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-08-18T10:30:01Z</updated>
    <pubDate>2015-08-18T10:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/cors" />
    <id>https://code-maven.com/cors</id>
    <content type="html"><![CDATA[<p>When learning <a href="/angularjs">AngularJS</a>, or any other <a href="/javascript">JavaScript</a>
framework for building Single Page Web Applications you can go only so far without a back-end to
access.</p>
<p>There are tons of web sites with public API that we could access, but most of them use the default
CORS security setting (by not setting <b>Access-Control-Allow-Origin</b>) which means we can only
access their API from the command line or from the server and not from the browser.</p>
<p>On this page you'll find a collection of web sites that provide public APIs with Access-Control-Allow-Origin
enabled. You can access them to fetch data via Ajax requests.</p>
<pre><code>&lt;script src=&quot;/javascripts/angular.min.js&quot;&gt;&lt;/script&gt;

&lt;script&gt;
angular.module('CORSApp', [])
    .controller('CORSController', function($scope, $http) {
        //var url = '';
        // XMLHttpRequest cannot load http://www.imdb.com/xml/find?json=1&amp;nr=1&amp;nm=on&amp;q=jeniffer+garner.
        // No 'Access-Control-Allow-Origin' header is present on the requested resource.
        //var url = 'https://en.wikipedia.org/w/api.php?action=query&amp;titles=Main%20Page&amp;prop=revisions&amp;rvprop=content&amp;format=json';
        //var url = 'https://api.smartsheet.com/2.0/sheets';
        //var url = 'http://public-api.wordpress.com/rest/v1/sites';
        $scope.clear = function() {
            console.log('clear');
            $scope.data = '';
            $scope.error = 0;
        }
        $scope.try = function() {
            $http.get($scope.url).then(
                function(response) {
                    console.log(response);
                    $scope.data = response.data;
                },
                function(response) {
                    console.log(&quot;error&quot;);
                    console.log(response);
                    $scope.error = 1;
                }
            );
        }
    });
&lt;/script&gt;

&lt;div ng-app=&quot;CORSApp&quot; ng-controller=&quot;CORSController&quot;&gt;
    &lt;select ng-model=&quot;url&quot; ng-change=&quot;clear()&quot;&gt;
        &lt;option value=&quot;http://www.imdb.com/xml/find?json=1&amp;nr=1&amp;nm=on&amp;q=jeniffer+garner&quot;&gt;IMDB (does not work)&lt;/option&gt;
        &lt;option value=&quot;https://api.github.com&quot;&gt;GitHub&lt;/option&gt;
        &lt;option value=&quot;http://api.metacpan.org/v0/release/_search?size=10&quot;&gt;MetaCPAN&lt;/option&gt;
        &lt;option value=&quot;http://api.openweathermap.org/data/2.5/weather?q=Budapest&quot;&gt;OpenWeatherMap&lt;/option&gt;
        &lt;option value=&quot;https://api.flickr.com/services/rest/?&amp;method=flickr.people.getPublicPhotos&amp;format=json&amp;api_key=6f93d9bd5fef5831ec592f0b527fdeff&amp;user_id=9395899@N08&quot;&gt;Flickr&lt;/option&gt;
    &lt;select&gt;
    &lt;button ng-click=&quot;try()&quot;&gt;Try&lt;/button&gt;
    URL: {{url}}
    &lt;hr&gt;
    Result: {{ data }}
    &lt;div ng-show=&quot;error&quot; id=&quot;error&quot;&gt;Failed&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p>The Flickr an example is</p>
<p><a href="https://api.flickr.com/services/rest/?&amp;method=flickr.people.getPublicPhotos&amp;format=json&amp;api_key=API_KEY&amp;user_id=USER_ID">https://api.flickr.com/services/rest/?&amp;method=flickr.people.getPublicPhotos&amp;format=json&amp;api_key=API_KEY&amp;user_id=USER_ID</a>
You can get an API Key from the <a href="https://www.flickr.com/services/">App Garden</a>, and you can find the user_id
based on a username via the <a href="https://www.flickr.com/services/api/explore/flickr.people.findByUsername">Flickr username finder</a>.</p>
<p>There lots of <a href="http://www.programmableweb.com/apis/directory">stes with public APIs</a>, but many of those will refuse to work
if we try to access them from the browser. (The don't set Access-Control-Allow-Origin)</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>TODO in AngularJS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-08-07T16:50:01Z</updated>
    <pubDate>2015-08-07T16:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/todo-in-angularjs" />
    <id>https://code-maven.com/todo-in-angularjs</id>
    <content type="html"><![CDATA[<p>Trailing closely the <a href="/getting-started-with-angularjs">Hello world</a>,
the <a href="/angularjs-first-binding">Echo</a>, and the <a href="/calculator-in-angularjs">simple calculator</a>
examples, creating a TODO list is one of the rite of passage entering the world of whatever
language or environment. Let's see how to implement a TODO using AngularJS.</p>
<h2 class="title is-4">Simple TODO list</h2>
<p>After loading <code>angular.min.js</code> we create an Angular JS module called <code>todoApp</code> and
a controller called <code>todoController</code>. Inside the controller we set up an empty array
called <code>tasks</code> that will hold the todo list.
We make it an attribute of the current <code>$scope</code> in order to make it accessible form the HTML.</p>
<p>We also declare a function called <code>add</code> (also an attribute of the <code>$scope</code>) that takes the
value of <code>title</code> (we'll later see this is the name of the <code>input</code> box), and appends it
to the list of tasks using <code>push</code>. That's all the JavaScript code we need for a simple TODO list.</p>
<p>In the HTML part we have a <code>div</code> element that defined the area of the
AngularJS Application <code>ng-app</code> and the Angular JS controller <code>ng-controller</code>.</p>
<p>Inside the controller in the HTML we have two parts. The first part is an <code>input</code> element
connected to the <code>$scope.title</code> attribute using <code>ng-model</code> and a button that uses
<code>ng-click</code> to launch the <code>$scope.add</code> method when the button is clicked.</p>
<p>The second part uses the <code>ng-repeat</code> directive to iterate over the elements of the <code>$scope.tasks</code>
array and display them one-by-one as list items.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/todo1.html">examples/angular/todo1.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
angular.module('todoApp', [])
    .controller('todoController', function($scope){
        $scope.tasks = [];
        $scope.add = function() {
            $scope.tasks.push($scope.title);
        }
    })
&lt;/script&gt;
&lt;div ng-app=&quot;todoApp&quot; ng-controller=&quot;todoController&quot;&gt;
    &lt;input ng-model=&quot;title&quot;&gt;&lt;button ng-click=&quot;add()&quot;&gt;Add&lt;/button&gt;
    &lt;ul&gt;
        &lt;li ng-repeat=&quot;t in tasks&quot;&gt;{{ t }}&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/todo1.html">view</a></p>
<h2 class="title is-4">Submit input box on pressing ENTER</h2>
<p>It is a bit cumbersome that for every additional item we need to click on the button.
It would be much better if we could just press ENTER. In order to do that we had to wrap
the <code>input</code> element in a <code>form</code> and in the form add an <code>ng-submit</code>
directive calling the <code>$scope.add</code> function. At the same time, in order to eliminate
duplicate calling of the <code>$scope.add</code> function.</p>
<pre><code class="language-html">  &lt;form ng-submit=&quot;add()&quot;&gt;
  &lt;input ng-model=&quot;title&quot;&gt;&lt;button&gt;Add&lt;/button&gt;
  &lt;/form&gt;
</code></pre>
<h2 class="title is-4">Duplicate values in ng-repeat</h2>
<p>If yo have tried the above example, you might have noticed that adding the same element twice
will crash the application. The reason is that by default the <code>ng-repeat</code> directive
assumes unique values in an array. I am not sure if having the same value in a TODO list
is actually desirable, but for now I'd like to be able to allow the user to enter the same value
twice. To do so we can tell <code>ng-repeat</code> to use the <code>$index</code> of the array for tracking
values like this:</p>
<pre><code class="language-html">&lt;li ng-repeat=&quot;t in tasks track by $index&quot;&gt;{{ t }}&lt;/li&gt;
</code></pre>
<h2 class="title is-4">Deleting an element from the TODO list</h2>
<p>While for most of us the reality is that we have an ever growing TODO list, but sometime
we get lucky and manage to finish an item. (Or maybe it just gets cancelled.) We would like
to have a way to remove an element. For that we are going to add a button next to each item,
and clicking on that button will remove the specific element from the array of tasks.</p>
<p>Adding the button is simple:</p>
<pre><code class="language-html">&lt;button ng-click=&quot;delete()&quot;&gt;x&lt;/button&gt;
</code></pre>
<p>The appropriate <code>delete</code> function made me scratch my head a bit, but finally I
got it:</p>
<pre><code class="language-javascript">$scope.delete = function() {
    $scope.tasks.splice(this.$index, 1);
}
</code></pre>
<p>When running the <code>delete</code> function <code>this</code> contains an attribute called <code>$index</code> that
seems to indicated the index in the current list. We can use that to locate the element in the
<code>tasks</code> array. Using the plain JavaScript `splice</a> function we remove one element from
the array that immediately updates the list displayed on the HTML page.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/todo2.html">examples/angular/todo2.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
angular.module('todoApp', [])
    .controller('todoController', function($scope) {
        $scope.tasks = [];
        $scope.add = function() {
            $scope.tasks.push($scope.title);
        }
        $scope.delete = function() {
            $scope.tasks.splice(this.$index, 1);
        }
    })
&lt;/script&gt;
&lt;div ng-app=&quot;todoApp&quot; ng-controller=&quot;todoController&quot;&gt;
    &lt;form ng-submit=&quot;add()&quot;&gt;
    &lt;input ng-model=&quot;title&quot;&gt;&lt;button&gt;Add&lt;/button&gt;
    &lt;/form&gt;
    &lt;ul&gt;
        &lt;li ng-repeat=&quot;t in tasks track by $index&quot;&gt;{{ t }} &lt;button ng-click=&quot;delete()&quot;&gt;x&lt;/button&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/todo2.html">view</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>A simple calculator in AngularJS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-08-07T07:30:01Z</updated>
    <pubDate>2015-08-07T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/calculator-in-angularjs" />
    <id>https://code-maven.com/calculator-in-angularjs</id>
    <content type="html"><![CDATA[<p>Not long ago I have written an example <a href="/add-numbers-with-angular">adding numbers with AngularJS</a>,
but then I found left-overs from a previous attempt to write a AngularJS examples and slides where I found
this example. A simple calculator in AngularJS.</p>
<p>If you have followed the <a href="/angularjs">previous articles</a> then you'll see in this case
I've separated the HTML part and the JavaScript part.</p>
<h2 class="title is-4">The HTML</h2>
<p>You'll also see that the HTML part is fairly simple though it contains another new element.
In this examples the declarations of <code>ng-app</code> and <code>ng-controller</code> are in the same
HTML element. Why create an extra level if we can do it in a single <code>div</code> element?</p>
<p>Besides that we have 2 <code>input</code> boxes and a <code>select</code> element.
Each one has its own <code>ng-model</code>.</p>
<p>The last part of the HTML is the</p>
<pre><code>{{ result() }}
</code></pre>
<p>directive.
I think this is also the first time we have a function call in the directive.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/calculator.html">examples/angular/calculator.html</a></strong></p>
<pre><code class="language-html">&lt;script src= &quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;script src= &quot;calculator.js&quot;&gt;&lt;/script&gt;

&lt;div ng-app=&quot;CalculatorApp&quot; ng-controller=&quot;CalculatorController&quot;&gt;
  &lt;p&gt;&lt;input type=&quot;number&quot; ng-model=&quot;a&quot;&gt;&lt;/p&gt;
  &lt;p&gt;&lt;input type=&quot;number&quot; ng-model=&quot;b&quot;&gt;&lt;/p&gt;
  &lt;p&gt;&lt;select ng-model=&quot;operator&quot;&gt;
        &lt;option&gt;+&lt;/option&gt;
        &lt;option&gt;*&lt;/option&gt;
        &lt;option&gt;-&lt;/option&gt;
        &lt;option&gt;/&lt;/option&gt;
     &lt;/select&gt;&lt;/p&gt;
  &lt;p&gt;{{ result() }}&lt;/p&gt;
 &lt;/div&gt;

</code></pre>
<p><a href="examples/angular/calculator.html">view</a></p>
<h2 class="title is-4">The JavaScript</h2>
<p>In the JavaScript part we create the <code>Angular module and controller</code> and
we declare the <code>result</code> function as an attribute of the current <code>$scope</code>.
This is what allows us to use the function in the Angular directive inside the HTML.</p>
<p>The JavaScript code calculating the result of the simple math operations is straight forward
albeit a bit boring.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/calculator.js">examples/angular/calculator.js</a></strong></p>
<pre><code class="language-js">angular.module('CalculatorApp', [])
    .controller('CalculatorController', function($scope) {
        $scope.result = function() {
            if ($scope.operator == '+') {
                return $scope.a + $scope.b;
            }
            if ($scope.operator == '-') {
                return $scope.a - $scope.b;
            }
            if ($scope.operator == '*') {
                return $scope.a * $scope.b;
            }
            if ($scope.operator == '/') {
                return $scope.a / $scope.b;
            }
        };
    });

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Automatic counter using AngularJS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-08-06T21:00:01Z</updated>
    <pubDate>2015-08-06T21:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/automatic-counter-using-angularjs" />
    <id>https://code-maven.com/automatic-counter-using-angularjs</id>
    <content type="html"><![CDATA[<p>We have seen <a href="/simple-in-memory-counter-with-angularjs">how to create a counter in AngularJS</a> in which we incremented (or deceremented) the counter by clicking
on a button. In this example we'll automatically increased the counter as time passes.</p>
<p>Don't forget to check out the other <a href="/counter">counter examples</a>!</p>
<h2 class="title is-4">Schedule future execution using $timeout</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/automatic_counter.html">examples/angular/automatic_counter.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
angular.module('CounterApp', [])
    .controller('CounterController', function($scope, $timeout) {
        $scope.counter = 0;
        var updateCounter = function() {
            $scope.counter++;
            $timeout(updateCounter, 1000);
        };
        updateCounter();
    });
&lt;/script&gt;
&lt;div ng-app=&quot;CounterApp&quot;&gt;
   &lt;div ng-controller=&quot;CounterController&quot;&gt;
   {{counter}}
   &lt;/div&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/automatic_counter.html">view</a></p>
<p>In this example the controller function expects two parameters, the <code>$scope</code>
that contains the attributes we interact with in our HTML page and<code>$timeout</code>
which is a function similar to the plain JavaScript <code>setTimeout</code> function.
(Atually this is called <b>dependency injection</b> and not parameters, but let's not worry about that now.
Especially as I don't understand it yet.)</p>
<p><code>$timeout</code> is a function that receives two parameters: a callback function object and a time expressed in millisecond.
It schedules the execution of the function object delayed by the time given. Passing 1000 as the second parameter
means we want the callback function to run 1 second after this call was made.</p>
<p>Inside the controller function the first thing is that we create an attribute called <code>counter</code> and
set the default value of it to 0. We want to start counting from 0.</p>
<p>Then we create a function called <code>updateCounter</code> that, when called, will increment the <code>counter</code> and use <code>$timeout</code>
to schedule itself 1 second later as well. Effectively this means that every time <code>updateCounter</code> runs,
it increments the counter and asks the system to run it again 1 second later. This means the function will run every 1 second.</p>
<p>Then the last step is to call <code>updateCounter</code> for the first time to initiate the endless loop.</p>
<h2 class="title is-4">Counter with stop button</h2>
<p>this timer will be executed every second, but if we would like to stop it?
We'll see an example with an additional button, that will stop the counter.</p>
<p><code>$timeout</code> returns a <code>promise</code> object we can later use to cancel the timer.
In order to have that <code>promise</code> available to us when needed, I've created a variable
called <code>timer</code> and assigned the return value of <code>$timeout</code> to it.
(Of course I could have used any name here.)</p>
<p>Then I've added a button to the HTML and using <code>ng-click</code> configured it to run then
<code>stopCounter</code> method when clicked.</p>
<p>The only thing left was to create the <code>stopCounter</code> method.</p>
<p>At first I created it using <code>var stopCounter = function() { ... }</code>
just as the <code>updateCounter</code>, but that did not work. Because we want to
call it from the HTML, we need to add this method to the <code>$scope</code>. Hence
I had to change the definition to be:
<code>$scope.stopCounter = function() { ... }</code>.</p>
<p>Inside we have the statement <code>$timeout.cancel(timer);</code> that will cancel the
timer. Go ahead. Try it!</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/automatic_counter_with_stop.html">examples/angular/automatic_counter_with_stop.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
angular.module('CounterApp', [])
    .controller('CounterController', function($scope, $timeout) {
        var timer;
        $scope.counter = 0;
        $scope.stopCounter = function() {
            $timeout.cancel(timer);
        };
        var updateCounter = function() {
            $scope.counter++;
            timer = $timeout(updateCounter, 1000);
        };
        updateCounter();
    });
&lt;/script&gt;
&lt;div ng-app=&quot;CounterApp&quot;&gt;
   &lt;div ng-controller=&quot;CounterController&quot;&gt;
   {{counter}}
   &lt;button ng-click=&quot;stopCounter()&quot;&gt;Stop&lt;/button&gt;
   &lt;/div&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/automatic_counter_with_stop.html">view</a></p>
<h2 class="title is-4">Counter with stop and start buttons</h2>
<p>As an extra feature I wanted to see how can I add another button, to start the counter again.</p>
<p>The first version was simple. I just added a button and a new function:</p>
<pre><code class="language-javascript">$scope.startCounter = function() {
    updateCounter();
};
</code></pre>
<p>and the corresponding HTML button to call it.</p>
<p>The problem with this solution was that it allowed me to click the start button
several times in a row and the counter started to go much faster and sometimes jumped by 2 or by 3.
What actually happened that every time I clicked on the <code>start</code> button, a new timer
was created and I had several timers waiting in parallel.</p>
<p>I had to somehow make sure that only one timer exists at any given time. Either by disabling
the <code>start</code> button after it was clicked or by checking if there is already a live
timer and launching a new one only if there was no live counter.</p>
<p>I picked this solution as I was more interested in the JavaScript/AngularJS solution.
I had to make two changes. One in the <code>stopCounter</code> function. I've added</p>
<pre><code class="language-javascript">timer = null;
</code></pre>
<p>After all once we have cancelled the timer, there is no point in having an unusable
object around.</p>
<p>Then in the <code>startCounter</code> I could check if <code>timer</code> is not <code>null</code>
and create the new $timeout object only if the timer was <code>null</code>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/automatic_counter_with_stop_start.html">examples/angular/automatic_counter_with_stop_start.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
angular.module('CounterApp', [])
    .controller('CounterController', function($scope, $timeout) {
        var timer;
        $scope.counter = 0;
        $scope.stopCounter = function() {
            $timeout.cancel(timer);
            timer = null;
        };
        $scope.startCounter = function() {
            if (timer === null) {
                updateCounter();
            }
        };
        var updateCounter = function() {
            $scope.counter++;
            timer = $timeout(updateCounter, 1000);
        };
        updateCounter();
    });
&lt;/script&gt;
&lt;div ng-app=&quot;CounterApp&quot;&gt;
   &lt;div ng-controller=&quot;CounterController&quot;&gt;
   {{counter}}
   &lt;button ng-click=&quot;stopCounter()&quot;&gt;Stop&lt;/button&gt;
   &lt;button ng-click=&quot;startCounter()&quot;&gt;Start&lt;/button&gt;
   &lt;/div&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/automatic_counter_with_stop_start.html">view</a></p>
<h2 class="title is-4">Comments</h2>
<p>Is it possible to add a save button and save the elapsed (time) count in the above script? Maybe make the elapsed time counter value a variable in an ionic application?</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Simple in-memory counter with AngularJS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-08-05T21:10:01Z</updated>
    <pubDate>2015-08-05T21:10:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/simple-in-memory-counter-with-angularjs" />
    <id>https://code-maven.com/simple-in-memory-counter-with-angularjs</id>
    <content type="html"><![CDATA[<p>In the <a href="/counter">big counter example</a> we see a number of implementations of counters.
Here is one using <a href="/angularjs">AngularJS</a>.</p>
<h2 class="title is-4">Simple button to increment counter</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/in_memory_counter.html">examples/angular/in_memory_counter.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app&gt;
    &lt;button ng-init=&quot;counter = 0&quot; ng-click=&quot;counter = counter + 1&quot;&gt;Increment&lt;/button&gt;
    {{counter}}
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/in_memory_counter.html">view</a></p>
<p>In this example we have an HTML button that has two Angular attributes.
<code>ng-init</code> will be executed once when the page loads. It gives the initial value to the
attribute <code>counter</code>.</p>
<p>The content of <code>ng-click</code> will be executed every time we click on the button. That will increment the counter by 1.
(<code>counter++</code> does not work here)</p>
<p>When we load the page we can see the button &quot;Increment&quot; and the number 0. Then as we click on the button the number
gets incremented.</p>
<h2 class="title is-4">Increment and decrement buttons</h2>
<p>In the next example we have added another button to decrement the counter by 1.
In addition, in order to make the step clearly separated, we have moved the <code>ng-init</code> attribute to
a separate <code>div</code> element which is not going to be displayed at all.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/in_memory_counter_with_decrement.html">examples/angular/in_memory_counter_with_decrement.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app&gt;
    &lt;div ng-init=&quot;counter = 0&quot;&gt;&lt;/div&gt;
    &lt;button ng-click=&quot;counter = counter + 1&quot;&gt;Increment&lt;/button&gt;
    &lt;button ng-click=&quot;counter = counter - 1&quot;&gt;Decrement&lt;/button&gt;
    {{counter}}
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/in_memory_counter_with_decrement.html">view</a></p>
<h2 class="title is-4">In-memory counter with controller</h2>
<p>In preparation from some more substantial actions behind the counter,
in the third example we have move the code decrementing the counter to a controller.
(The button incrementing the counter was left as it was before.)</p>
<p>This time we've created an <a href="/hello-world-with-angular-controller">Angular module and controller</a>,
in which we set the default value of <code>$scope.counter</code> to 0 and we have also defined a method called
<code>decrement</code>. As this is already plain JavaScript, here we can already use the autoincrement and autodecrement
expression like this one: <code>counter--</code>.</p>
<p>In the HTML we set <code>ng-click=&quot;decrement()&quot;</code> which means the <code>decrement</code>
method will be called every time a button is pressed.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/in_memory_counter_with_controller.html">examples/angular/in_memory_counter_with_controller.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
angular.module(&quot;CounterApp&quot;, [])
    .controller(&quot;CounterController&quot;, function($scope) {
        $scope.counter = 0;
        $scope.decrement = function() {
            $scope.counter--;
        };
})
&lt;/script&gt;
&lt;div ng-app=&quot;CounterApp&quot;&gt;
    &lt;div ng-controller=&quot;CounterController&quot;&gt;
        &lt;button ng-click=&quot;counter = counter + 1&quot;&gt;Increment&lt;/button&gt;
        &lt;button ng-click=&quot;decrement()&quot;&gt;Decrement&lt;/button&gt;
        {{counter}}
    &lt;/div&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/in_memory_counter_with_controller.html">view</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Add numbers with AngularJS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-08-04T21:30:01Z</updated>
    <pubDate>2015-08-04T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/add-numbers-with-angular" />
    <id>https://code-maven.com/add-numbers-with-angular</id>
    <content type="html"><![CDATA[<p>After writing the most basic examples, I wanted to create a small calulator with Angular. It is one of the simplest
code examples I can imagine after the &quot;Hello World&quot; and &quot;Echo&quot; examples.</p>
<p>So I set out to create a page using <a href="/angularjs">AngularJS</a> that will add two numbers.</p>
<h2 class="title is-4">Add naive</h2>
<p>The naive solution, that did not work was to have two <code>input</code> elements with <code>ng-model</code> for 'a' and 'b'
and then to have an expression adding the two values.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/add.html">examples/angular/add.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app&gt;
  &lt;input ng-model=&quot;a&quot;&gt;
  &lt;input ng-model=&quot;b&quot;&gt;
  &lt;h1&gt;{{ a + b }}&lt;/h1&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/add.html">view</a></p>
<p>Unfortunately JavaScript and thus Angular handles the input values as strings, even if they are really numbers
in those strings and then using the <code>+</code> operator on the strings acts as concatenation. Thus, if we try
the above examples and type 2 and 3 in the two boxes, we'll see 23 as output.</p>
<h2 class="title is-4">Add numbers with controller</h2>
<p>First, just like in the <a href="/hello-world-with-angular-controller">Hello User</a> example,
we <a href="/hello-world-with-angular-controller">create a module and a controller</a>
Within the controller we create a function called <code>AddNumbers</code> attached to the
<code>$scope</code>. In that function we take the values from the two <code>input</code> elements
and convert them to <code>Number</code> with plain JavaScript function call. (In order to aviod using
and <code>undefined</code> value we default both numbers to 0.) Then we add the values and
assign it to the newly created <code>sum</code> attribute.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/add_numbers_controller.js">examples/angular/add_numbers_controller.js</a></strong></p>
<pre><code class="language-js">angular.module('AddNumbersApp', [])
    .controller('AddNumbersController', function($scope) {
        $scope.AddNumbers = function() {
            var a = Number($scope.a || 0);
            var b = Number($scope.b || 0);
            $scope.sum = a+b;
        }
});

</code></pre>
<p>In the HTML file we can then use that <code>sum</code> attribute as part of a simple expression.
In order to trigger the <code>AddNumbers</code> function, we also add <code>ng-keyup</code> attributes
to both of the <code>input</code> elements:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/add_numbers_controller.html">examples/angular/add_numbers_controller.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;add_numbers_controller.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app=&quot;AddNumbersApp&quot;&gt;
    &lt;div ng-controller=&quot;AddNumbersController&quot;&gt;
        &lt;input ng-model=&quot;a&quot; ng-keyup=&quot;AddNumbers()&quot;&gt;
        &lt;input ng-model=&quot;b&quot; ng-keyup=&quot;AddNumbers()&quot;&gt;
        &lt;h1&gt;{{ sum }}&lt;/h1&gt;
    &lt;/div&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/add_numbers_controller.html">view</a></p>
<p>Try it! It works great!</p>
<p>While I was writing this I had this thought that there must be a more simple solution,
that this might be over-engineering this problem and indeed there is a much easier solution.</p>
<h2 class="title is-4">Add numbers</h2>
<p>As it turns out it is quite easy to tell Angular that we would like to treat the values as numbers.
We only need to add <code>type=&quot;number&quot;</code> to each one of <code>input</code> elements:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/add_numbers.html">examples/angular/add_numbers.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app&gt;
  &lt;input ng-model=&quot;a&quot; type=&quot;number&quot;&gt;
  &lt;input ng-model=&quot;b&quot; type=&quot;number&quot;&gt;
  &lt;h1&gt;{{ a + b }}&lt;/h1&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/add_numbers.html">view</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Hello World with AngularJS module and controller</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-08-04T13:00:01Z</updated>
    <pubDate>2015-08-04T13:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/hello-world-with-angular-controller" />
    <id>https://code-maven.com/hello-world-with-angular-controller</id>
    <content type="html"><![CDATA[<p>In <a href="/getting-started-with-angularjs">getting started with AngularJS</a> we saw how simple expressions work,
and then we created our <a href="/angularjs-first-binding">first binding</a>. This time we look
at two simple examples using AngularJS modules and controllers.</p>
<h2 class="title is-4">Hello World Controller</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/hello_world_controller.html">examples/angular/hello_world_controller.html</a></strong></p>
<pre><code class="language-html">
&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;hello_world_controller.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app=&quot;HelloWorldApp&quot;&gt;
    &lt;div ng-controller=&quot;HelloWorldController&quot;&gt;
        &lt;h1&gt;{{greeting}}&lt;/h1&gt;
    &lt;/div&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/hello_world_controller.html">view</a></p>
<p>After loading <code>angular.js</code> we include some more JavaScript code.
We can do that embedded in the HTML file using a pair of <code>script</code> tags or,
as usually is recommended and as we did it in this examples, we can put that code
in an external JavaScript file. The only requirement is that we load that file <b>after</b>
we load <code>angular.js</code>.</p>
<p>The JavaScript code looks like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/hello_world_controller.js">examples/angular/hello_world_controller.js</a></strong></p>
<pre><code class="language-js">angular.module('HelloWorldApp', [])
   .controller('HelloWorldController', function($scope) {
       $scope.greeting = &quot;Hello World&quot;;
});

</code></pre>
<p>First we create an <code>angular.module</code> and attached to it we create a <code>controller</code>.
The <code>module</code> gets two parameters: The first is the name we select for this module. It can be any
string, but as this is the name of the Angular Application  it might be a good idea to call it some &quot;App&quot;.</p>
<p>We are going to use this name in our HTML file as the value of the <code>ng-app</code> attribute.
(Earlier we did not provide a name to this attribute and thus it used the default application.)</p>
<p>The second parameter of the <code>module</code> is a list of dependencies. For now we leave that empty.</p>
<p>The <code>controller</code> itself also has two parameters. The first one is its name. Usually it is some
word ending with &quot;Controller&quot;. The second parameter is a function that implements the controller.
It will be executed once when the controller is loaded. The environment is passed in the <code>$scope</code>
variable. The models and the &quot;variables&quot; in the Angular expressions we used earlier are attributes of this
object. Hence as we create a new attribute called <code>$scope.greeting</code>, and assign a value to it,
we'll be able to access this value from our HTML file.</p>
<p>In order for Angular to connect our module and controller we need to create an HTML element with an
<code>ng-app</code> attribute that equals to the name of the module, and inside that HTML element we
need to add another HTML element with an attribute called <code>ng-controller</code> that equals to the
name of our controller.</p>
<p>These two mark the area in which the <code>$scope</code> is relevant.</p>
<p>This was a fairly simple example with a hard-coded value assigned to an attribute and used in an expression.</p>
<h2 class="title is-4">Hello user Controller</h2>
<p>Let's see a slightly more complex example in which we handle input from the user and process that input in
the controller. The processing will be very simple, just concatenating with a fixed string.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/hello_user_controller.js">examples/angular/hello_user_controller.js</a></strong></p>
<pre><code class="language-js">angular.module('HelloUserApp', [])
      .controller('HelloUserController', function($scope) {
          $scope.NameChange = function () {
              $scope.greeting = &quot;Hello &quot; + $scope.name;
          };
      });

</code></pre>
<p>In this case, the attribute <code>NameChange</code> we add to the <code>$scope</code> is a function
and that function will create the <code>$scope.greeting</code> attribute using the value from the
<code>$scope.name</code> attribute.</p>
<p>In the HTML</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/hello_user_controller.html">examples/angular/hello_user_controller.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;hello_user_controller.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app=&quot;HelloUserApp&quot;&gt;
    &lt;div ng-controller=&quot;HelloUserController&quot;&gt;
        &lt;input ng-model=&quot;name&quot; ng-keyup=&quot;NameChange()&quot;&gt;
        &lt;h1&gt;{{greeting}}&lt;/h1&gt;
        &lt;h2&gt;{{name}}&lt;/h2&gt;
    &lt;/div&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/hello_user_controller.html">view</a></p>
<p>The <code>ng-model=&quot;name&quot;</code> connects the input element to the <code>$scope.name</code>.</p>
<p>The <code>ng-keyup=&quot;NameChange()&quot;</code> connects the keyup event of the HTML page to
the function defined as <code>$scope.NameChange</code> which means the function will be
called every time the content of the input box has changed.</p>
<p>The two expression in the HTML code</p>
<pre><code>{{name}}
</code></pre>
<p>and</p>
<pre><code>{{greeting}}
</code></pre>
<p>will display the content of <code>$scope.name</code> and <code>$scope.greeting</code> respectively.</p>
<p>The result is that as we type &quot;Foo&quot; in the input box, our page will display &quot;Hello Foo&quot; in <code>h1</code>
tags and <code>Foo</code> in <code>h2</code> tags.</p>
<h2 class="title is-4">Comments</h2>
<p>hey, thanks Gabor</p>
<hr />
<p>it is absolutely Great Tutorial to get started with angular js Thanks :)</p>
<hr />
<p>Great tutorial for beginners, thanks for posting!</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Open JavaScript Console</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-08-02T14:20:01Z</updated>
    <pubDate>2015-08-02T14:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/open-javascript-console" />
    <id>https://code-maven.com/open-javascript-console</id>
    <content type="html"><![CDATA[<p>In this page I am collecting the ways you can open the JavaScript Console on various operating systems in various browsers.</p>
<p>If you'd like to try it, just use this example:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/console.html">examples/js/console.html</a></strong></p>
<pre><code class="language-html">&lt;script&gt;

console.log(&quot;Hello World&quot;);

&lt;/script&gt;


</code></pre>
<p><a href="examples/js/console.html">view</a></p>
<h2 class="title is-4">Apple Mac OSX</h2>
<ul>
<li>Open JavaScript Console of Chrome on Apple Mac OSX</li>
</ul>
<p>Command-Option-J</p>
<ul>
<li>Open JavaScript Console of Firefox on Apple Mac OSX</li>
</ul>
<p>Command-Option-K</p>
<ul>
<li>Open JavaScript Console of Opera on Apple Mac OSX</li>
</ul>
<p>Command-Option-I   and the click on &quot;Console&quot;</p>
<ul>
<li>Safari on Apple Mac OSX</li>
</ul>
<ol>
<li>
<p>First enabled the developer tools</p>
</li>
<li>
<p>Safari Preference (or press Command ,)</p>
</li>
<li>
<p>Click on &quot;Advanced&quot; setting</p>
</li>
<li>
<p>Check the box of &quot;Show Develop menu in menu bar&quot;</p>
</li>
<li>
<p>As explained <a href="https://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/GettingStarted/GettingStarted.html">here</a> Then <strong>Command-Option-C</strong> will open the console.</p>
</li>
</ol>
<h2 class="title is-4">MS Windows</h2>
<ul>
<li>Open JavaScript Console of Chrome on MS Windows</li>
</ul>
<p>Ctrl-Shift-J</p>
<ul>
<li>Open JavaScript Console of Firefox on MS Windows</li>
</ul>
<p>Ctrl-Shift-K</p>
<ul>
<li>Open JavaScript Console of Internet Explorer</li>
</ul>
<p>F12 then click on the &quot;Console&quot; tab.</p>
<p>Ctrl-`   (backtick) will open a smaller console.</p>
<h2 class="title is-4">Linux</h2>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>AngularJS - first binding</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-07-24T07:30:01Z</updated>
    <pubDate>2015-07-24T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/angularjs-first-binding" />
    <id>https://code-maven.com/angularjs-first-binding</id>
    <content type="html"><![CDATA[<p>Now that we have created our very <a href="/getting-started-with-angularjs">first expressions in AngularJS</a>,
its time to make another step, this time with something much more interesting. We are going to connect an
input field with an expression that will automatically display whatever we type in.</p>
<h2 class="title is-4">Minimal Hello User</h2>
<p>The Hello World examples are usually quite boring as they are one-way. Just display some
string that was part of the code. In this example we have an <code>input</code> element
in which we declare the <code>ng-model</code> with a value <code>name</code>.</p>
<pre><code class="language-html">&lt;input ng-model=&quot;name&quot;&gt;
</code></pre>
<p>Once we do that we can use the <code>name</code> attribute in Angular expressions:</p>
<pre><code>{{ name }}
</code></pre>
<p>for example in order to show the content:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/minimal_hello_user.html">examples/angular/minimal_hello_user.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app&gt;
  &lt;input ng-model=&quot;name&quot;&gt;
  &lt;h1&gt;Hello, {{name}}&lt;/h1&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/minimal_hello_user.html">view</a></p>
<p>If you open this example, you'll see an input box. As you type in the input box
the text you type in will also appear after the word <b>Hello</b>.</p>
<p>With this we see how can we <b>bind</b> input elements to attributes of AngularJS
that can be used in expressions.</p>
<h2 class="title is-4">Full Hello User example</h2>
<p>The above was probably the smallest possible example using data binding in AngularJS.
A full, or at least &quot;fuller&quot; example can be found here:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/hello_user.html">examples/angular/hello_user.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html ng-app&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, user-scalable=yes&quot;&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
      &lt;input ng-model=&quot;name&quot; type=&quot;text&quot; placeholder=&quot;Your name please&quot;&gt;
      &lt;h1&gt;Hello, {{name}}&lt;/h1&gt;
  &lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/angular/hello_user.html">view</a></p>
<p>In this version we have a &quot;real&quot; HTML 5 page, the <code>ng-app</code> marks the whole
<code>html</code> file to be our Angular Application, and the <code>input</code> element
is also better described with <code>type</code> and a <code>placeholder</code> to give
a hint to the user what to do with the HTML form.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Getting started with AngularJS</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-07-20T23:30:01Z</updated>
    <pubDate>2015-07-20T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/getting-started-with-angularjs" />
    <id>https://code-maven.com/getting-started-with-angularjs</id>
    <content type="html"><![CDATA[<p><a href="/angularjs">AngularJS</a> is a JavaScript framework that enhances HTML.</p>
<p>In order to get started with AngularJS we need to have an HTML page with 3 things:</p>
<h2 class="title is-4">1) Loading angular.js</h2>
<p>We need to load the angular.js file from one of the CDNs or from the local disk.</p>
<p>If you'd like to load it from Google CDN then put this in your HTML:</p>
<pre><code>&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/angularjs/1.4.2/angular.min.js&quot;&gt;&lt;/script&gt;
</code></pre>
<p>If you'd like to use the Cloudflare CDNjs, use this entry:</p>
<pre><code>&lt;script src=&quot;http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.min.js&quot;&gt;&lt;/script&gt;
</code></pre>
<p>You can also download the angular.min.js file, put it on your server and serve it from there:</p>
<pre><code>&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
</code></pre>
<p>In the above examples I used version 1.4.2 of AngularJS, but by the time you read this
Angular might have a newer releases in the 1.x series and you might want to use that version.</p>
<h2 class="title is-4">2) Add ng-app</h2>
<p>Add <code>ng-app</code> to one of the HTML elements in our page. Anything within this element will be seen
as part of our AngularJS code. We can add this to the <code>html</code> element, to the <code>body</code>, or even
a <code>div</code> as it has been done in our first example.</p>
<h2 class="title is-4">3) Add an AngularJS expression.</h2>
<p>AngularJS has various elements. An <b>expression</b> is a code snipped wrapped
in the followin:</p>
<pre><code>{{ }}
</code></pre>
<p>It can contain a limited set of JavaScript expressions.</p>
<p>That brings us to our first example. Even before writing a Hello</p>
<h2 class="title is-4">Hello World with AngularJS</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/hello_world.html">examples/angular/hello_world.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app&gt;
  Hello {{ &quot;World&quot; }}
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/hello_world.html">view</a></p>
<p>In our very first example, the expression is a hard-coded string. Nothing fancy.
Even a bit insulting.</p>
<p>The result is <code>Hello World</code>.</p>
<h2 class="title is-4">Simple AngularJS expression</h2>
<p>In our next example, the expression is a hard-coded computation.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/first_expression.html">examples/angular/first_expression.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app&gt;
  Hello Angular {{ 19 + 23 }}
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/first_expression.html">view</a></p>
<p>The result is <code>Hello Angular 42</code>.</p>
<p>Angular executed the expression and displayed the result.</p>
<p>Remember, this runs in the browser, so if you click on &quot;view source&quot;, you'll
see the code as it was in the html file.</p>
<h2 class="title is-4">Variables in AngularJS expressions</h2>
<p>In the next, still very simple example, we can see that we can assign values
to variables, and then we can use those variables in the expression.</p>
<p>Note: we don't use the <code>var</code> for variable assignment here because these
are actually attributes on an internal object of AngularJS.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/variables_in_expressions.html">examples/angular/variables_in_expressions.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app&gt;
  {{ x = 23; y= 19; x + y }}
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/variables_in_expressions.html">view</a></p>
<h2 class="title is-4">Separate variable assignment and usage into two expressions.</h2>
<p>We can even have the assignment in one expression and use those variables in
another expression. Not only that, but the location of those expressions in the HTML
file does not matter. As we can see in the following example, we can use the
variables even before the assignment:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/assignment_and_expression.html">examples/angular/assignment_and_expression.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app&gt;
  &lt;div&gt;
  Result
  {{ x + y }}
  &lt;/div&gt;
  &lt;div&gt;
    Assignment:
    {{ x = 23; y= 19 }}
  &lt;/div&gt;
  &lt;div&gt;
    Result
    {{ x + y }}
  &lt;/div&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/assignment_and_expression.html">view</a></p>
<p>The result will be:</p>
<pre><code>Result 42
Assignment: 19
Result 42
</code></pre>
<p>There is a slight problem though, the last result of the expression where we had the assignment
is also displayed. That's why we see the 19 on the page.</p>
<p>The solution is to add another statement to the assignment expression that does
not return any visible value. It can be <code>null</code> or <code>''</code> (the empty string).</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/angular/assignment_and_expression_fixed.html">examples/angular/assignment_and_expression_fixed.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;angular.min.js&quot;&gt;&lt;/script&gt;
&lt;div ng-app&gt;
    &lt;div&gt;
    Result
    {{ x + y }}
    &lt;/div&gt;
  &lt;div&gt;
    Assignment:
    {{ x = 23; y= 19; null}}
  &lt;/div&gt;
  &lt;div&gt;
    Result
    {{ x + y }}
  &lt;/div&gt;
&lt;/div&gt;

</code></pre>
<p><a href="examples/angular/assignment_and_expression_fixed.html">view</a></p>
<p>The result will be:</p>
<pre><code>Result 42
Assignment:
Result 42
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>JavaScript module to run both in a browser and in Node.js</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-25T09:15:01Z</updated>
    <pubDate>2015-06-25T09:15:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/javascript-module-to-run-in-browser-and-in-node" />
    <id>https://code-maven.com/javascript-module-to-run-in-browser-and-in-node</id>
    <content type="html"><![CDATA[<p>One of the selling points of using Node.js to write the back-end of your application is that in that case you use the same programming
language in the back-end as you use in the front-end. Then it is easy to share code between the two.</p>
<p>The question then, how can one write a library in JavaScript that can be used both in Node.js and in the web client.</p>
<p>This is a simple library with two methods: <code>add</code> and <code>div</code>, and an attribute <code>version</code>
It uses <code>this</code> which refers to the Window object when running in the browser and to the global object when running under Node.js</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/node_and_web/calc.js">examples/js/node_and_web/calc.js</a></strong></p>
<pre><code class="language-js">(function(){
    &quot;use strict&quot;;

    this.Calc = function () {
        return Object.freeze({
            add: function(x, y) { return x + y; },
            div: function(x, y) { return x / y; },
            version: 0.01,
        });
        
    }();

}).call(this);


</code></pre>
<p>We can see it working in Node:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/node_and_web/calc_test_node.js">examples/js/node_and_web/calc_test_node.js</a></strong></p>
<pre><code class="language-js">console.log('calc_test_node');
var c = require('./calc');
console.log(c.Calc.add(2, 5)); // 7
console.log(c.Calc.div(8, 2)); // 4
console.log(c.Calc.version);   // 0.01


</code></pre>
<pre><code>$  node calc_test_node.js
calc_test_node
7
4
0.01
</code></pre>
<p>We can see it working in the web as well. For that we need to write some JavaScript code:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/node_and_web/calc_test_web.js">examples/js/node_and_web/calc_test_web.js</a></strong></p>
<pre><code class="language-js">console.log('calc_test_web');
console.log(Calc.add(2, 3));    // 5
console.log(Calc.div(14, 2));   // 7
console.log(Calc.version);      // 0.01


</code></pre>
<p>and then we have to load first the <code>calc.js</code> and then the JAvaScript file that uses the <code>Calc</code> object:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/node_and_web/calc_test_web.html">examples/js/node_and_web/calc_test_web.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;calc.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;calc_test_web.js&quot;&gt;&lt;/script&gt;

</code></pre>
<p><a href="examples/js/node_and_web/calc_test_web.html">view</a></p>
<p>If you click on &quot;Try&quot; you will see it working. Just remember you need to open the JavaScript console to see anything.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Using Underscore in Node.js and in the browser</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-20T11:00:01Z</updated>
    <pubDate>2015-06-20T11:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/using-underscore-in-nodejs-and-in-the-borwser" />
    <id>https://code-maven.com/using-underscore-in-nodejs-and-in-the-borwser</id>
    <content type="html"><![CDATA[<p><a href="http://underscorejs.org/">Underscore.js</a> provides lots of small functions to
help you use JavaScript as a functional programming language. Besides the actual functions it provides,
it can also be great for learning more JavaScript as it provides an annotated version of its source code
and it also allows us to use it both as a Node.js module and in the browser.</p>
<p>Let's see how is that done.</p>
<h2 class="title is-4">Use Underscore in Node.js</h2>
<p>Install Underscore.js using <code>npm install underscore</code>, that will install it
locally in the <code>node_modules</code> subdirectory. Then write the following code:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/node_underscore.js">examples/js/node_underscore.js</a></strong></p>
<pre><code class="language-js">var _ = require('underscore');


var numbers = [1, 2, 5, -3];
var squares = _.map(numbers, function(x) { return x*x; });
console.log(squares);


</code></pre>
<p>and run it <code>node node_underscore.js</code></p>
<p>The output is</p>
<pre><code>[ 1, 4, 25, 9 ]
</code></pre>
<p>We loaded the module using the <code>require</code> function and assigned it to the <code>_</code>.
Actually we could have used any variable name, but because this is the &quot;underscore&quot; module
we use the underscore <code>_</code>.</p>
<p>Then we could use the <code>map</code> method of this new, <code>_</code> object.</p>
<h2 class="title is-4">Use Underscore in the Browser</h2>
<p>For this we can download Underscore, or we can use a copy of it from a CDN.
In either case we need to create an HTML file that will load the underscore library
and then it will load our own script:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/web_underscore.html">examples/js/web_underscore.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;web_underscore.js&quot;&gt;&lt;/script&gt;

</code></pre>
<p><a href="examples/js/web_underscore.html">view</a></p>
<p>We could have added the HTML header and body, but non of those are required for this to work.</p>
<p>Our script then can look like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/web_underscore.js">examples/js/web_underscore.js</a></strong></p>
<pre><code class="language-js">var numbers = [1, 2, 5, -3];
var squares = _.map(numbers, function(x) { return x*x; });
console.log(squares);


</code></pre>
<p>It looks exactly the same as the code in Node.js, except that we've already loaded the
Underscore module in the HTML file and it automatically assigned it to the <code>_</code> variable.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Improving JavaScript code with JSLint</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-17T07:30:01Z</updated>
    <pubDate>2015-06-17T07:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/improving-javascript-code-with-jslint" />
    <id>https://code-maven.com/improving-javascript-code-with-jslint</id>
    <content type="html"><![CDATA[<p>In the <a href="/javascript-function-that-accepts-any-number-of-arguments">previous article</a> we had a few small JavaScript files. I was wondering how well
were they written so I've installed <a href="http://www.jslint.com/">JSLint</a> using <code>npm install -g jslint</code>
and then I ran it on the files:</p>
<h2 class="title is-4">spaces around operators</h2>
<pre><code>$ jslint add_2_numbers.js 

add_2_numbers.js
 #1 Missing 'use strict' statement.
    return x+y; // Line 2, Pos 5
 #2 Missing space between 'x' and '+'.
    return x+y; // Line 2, Pos 13
 #3 Missing space between '+' and 'y'.
    return x+y; // Line 2, Pos 14
</code></pre>
<p>JSLint found 3 issues with this code. Issues #2 and #3 are fairly trivial. Instead of writing
<code>x+y</code> it is better to leave some spaces around operators and write <code>x + y</code>.</p>
<h2 class="title is-4">use strict</h2>
<p>The first one, on the other hand is slightly more involved. Just as in <a href="https://perlmaven.com/">Perl</a>,
JavaScript also allows a lot of bad practices, and just as with Perl, the developers of JavaScript cannot just
eliminate the features that allow these bad practices. Such move would break tons of code that worked earlier.</p>
<p>So in ECMAScript 5 a new feature was added. You can include a string <code>&quot;use strict&quot;;</code> at the beginning of a
file or the beginning of a function and that will turn on the strict mode for the whole file or
for that specific function, respectively. Because the construct is a string literal and because JavaScript has the
strange behavior of disregarding string literals floating around the code, this snippet will be disregarded in
any browser that does not support it. Which is not that interesting any more as by today virtually
every browser on the market supports it.</p>
<p><a href="http://ejohn.org/">John Reisig</a>, the author of <a href="http://jquery.com/">jQuery</a>,
and former <a href="https://metacpan.org/author/JERESIG">Perl developer</a>
has an article on <a href="http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/">ECMAScript 5 strict mode</a>.</p>
<p>So we add <code>&quot;use strict&quot;;</code> to the top of our script.</p>
<p>The resulting script</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/add_2_numbers_fixed.js">examples/js/add_2_numbers_fixed.js</a></strong></p>
<pre><code class="language-js">&quot;use strict&quot;;
function add(x, y) {
    return x + y;
}
console.log(add(2, 3));      // 5
console.log(add(-1, 1));     // 0

console.log(add(1, 1, 1));   // 2

</code></pre>
<p>works as the original one: <code>node add_2_numbers_fixed.js</code>
and it is JSLint error free: <code>jslint add_2_numbers_fixed.js</code></p>
<h2 class="title is-4">Redefining function is not captured</h2>
<p>Once I was done with the <code>add_2_numbers.js</code> script I moved on to check <code>add_3_numbers.js</code>.
The error were similar, we just had more of them. I added <code>&quot;use strict&quot;;</code> and added spaces around
the operators. This eliminated all the JSLint complaint, but it left my baffled a bit.
Neither <code>JSLint</code>, nor <code>&quot;use strict&quot;;</code> complained about the multiple definition of the
<code>add</code> function while clearly it is a problem in the code.</p>
<p>I guess this means redefining functions is a common and even recommended practice in JavaScript.</p>
<p>I'll get back to you when I digest this idea.</p>
<h2 class="title is-4">Move 'var' declarations to the top of the function.</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/sum_numbers.js">examples/js/sum_numbers.js</a></strong></p>
<pre><code class="language-js">function sum() {
    var s = 0;
    for (var i=0; i &lt; arguments.length; i++) {
        s += arguments[i];
    }
    return s;
}

console.log(sum(2, 3));         // 5
console.log(sum(-10, 1));       // -9
console.log(sum(1, 1, 1, 1));   // 4
console.log(sum());             // 0


</code></pre>
<p>Once I was done with that script I ran <code>jslint sum_numbers.js</code> It gave me the following report:</p>
<pre><code> #1 Missing 'use strict' statement.
    var s = 0; // Line 2, Pos 5
 #2 Move 'var' declarations to the top of the function.
    for (var i=0; i &lt; arguments.length; i++) { // Line 3, Pos 10
 #3 Stopping. (21% scanned).
     // Line 3, Pos 10
</code></pre>
<p>We are already familiar with the first one, but the second one took me by surprise.</p>
<p>A little thinking and research later I found out, that unlike in Perl the <code>for</code>
loop does not create a separate context and thus the variable declared in the <code>for</code>
loop is scoped to the global environment, or to the function if the loop is in a function.</p>
<p>So this code might give the impression, especially to Perl developers, that <code>i</code>
is only defined in the loop.</p>
<pre><code class="language-javascript">    for (var i=0; i &lt; arguments.length; i++) {
        s += arguments[i];
    }
</code></pre>
<h2 class="title is-4">Scope of JavaScript variable in a loop</h2>
<p>In reality, even if we declare the variable <code>i</code> inside the <code>for</code>-loop
it is still available after the loop has ended.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/scope_of_variable_in_loop.js">examples/js/scope_of_variable_in_loop.js</a></strong></p>
<pre><code class="language-js">&quot;use strict&quot;;
var values = [2, 3];
var s = 0;
for (var i = 0; i &lt; values.length; i++) {
    s += values[i];
}
console.log(i);
console.log(s);

</code></pre>
<p>So it is better to declare all the variables at the top of the function, or if they are global then
at the top of the file. (But you should not use global.)</p>
<p>I fixed that, added <code>&quot;use strict&quot;;</code> to the top and an the script again on this version:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/sum_numbers_step1.js">examples/js/sum_numbers_step1.js</a></strong></p>
<pre><code class="language-js">&quot;use strict&quot;;
function sum() {
    var s = 0;
    var i;
    for (i=0; i &lt; arguments.length; i++) {
        s += arguments[i];
    }
    return s;
}

console.log(sum(2, 3));         // 5
console.log(sum(-10, 1));       // -9
console.log(sum(1, 1, 1, 1));   // 4
console.log(sum());             // 0


</code></pre>
<p>The result was this:</p>
<pre><code> #1 Combine this with the previous 'var' statement.
    var i = 0; // Line 4, Pos 9
 #2 Missing space between 'i' and '='.
    for (i=0; i &lt; arguments.length; i++) { // Line 5, Pos 11
 #3 Missing space between '=' and '0'.
    for (i=0; i &lt; arguments.length; i++) { // Line 5, Pos 12
 #4 Unexpected '++'.
    for (i=0; i &lt; arguments.length; i++) { // Line 5, Pos 38
</code></pre>
<p>#2 and #3 are the usual complaints about lack of spaces around operators. It is funny, because when I write Perl
I always put spaces around operators. I am not sure why have I started to avoid them in JavaScript.
I guess I learned JavaScript that way. It's time to unlearn that.</p>
<p>So let's see the first one:</p>
<h2 class="title is-4">Combine this with the previous 'var' statement.</h2>
<p>There is an excellent site explaining the <a href="https://jslinterrors.com/">JSLint errors</a>. For example
this error:
<a href="https://jslinterrors.com/combine-this-with-the-previous-var-statement">Combine this with the previous 'var' statement</a>.</p>
<p>It wants me to write</p>
<pre><code class="language-javascript">    var s = 0,
        i;
</code></pre>
<p>instead of</p>
<pre><code class="language-javascript">    var s = 0;
    var i;
</code></pre>
<h2 class="title is-4">Unexpected '++'</h2>
<p>The remaining error is about <a href="https://jslinterrors.com/unexpected-plus-plus">Unexpected '++'</a>.
I know that Python does not have <code>++</code>, and I've just listened to a presentation by
<a href="http://crockford.com/">Douglas Crockford</a>, author of JSLint explaining why he does not use <code>++</code>,
but I wonder if it needs to be banned from this situation as well? A <code>for</code> loop is a fairly simple and standard
expression.</p>
<p>There is a way to tell JSLint to not complain about <code>++</code>, but I think in many other cases it might be justified
to avoid it. So I'd like to turn it off on this specific line of code. Because I could not find how to that,
I went with the slightly cumbersome solution and replaced <code>i++</code> by <code>i += 1</code>.</p>
<p>This brought me to this result:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/sum_numbers_fixed.js">examples/js/sum_numbers_fixed.js</a></strong></p>
<pre><code class="language-js">&quot;use strict&quot;;
function sum() {
    var s = 0, i;
    for (i = 0; i &lt; arguments.length; i += 1) {
        s += arguments[i];
    }
    return s;
}

console.log(sum(2, 3));         // 5
console.log(sum(-10, 1));       // -9
console.log(sum(1, 1, 1, 1));   // 4
console.log(sum());             // 0


</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>JavaScript function that accepts any number of arguments</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-08T13:30:01Z</updated>
    <pubDate>2015-06-08T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/javascript-function-that-accepts-any-number-of-arguments" />
    <id>https://code-maven.com/javascript-function-that-accepts-any-number-of-arguments</id>
    <content type="html"><![CDATA[<p>How can you create a function in JavaScript that will accept an unknown number of arguments? For example like a <code>sum</code> function to <code>add</code> numbers?</p>
<p>For the solution look at the end of the article.</p>
<h2 class="title is-4">Add 2 numbers</h2>
<p>Let's start by creating a function called <code>add</code> that can accept 2 arguments and that returns their sum.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/add_2_numbers.js">examples/js/add_2_numbers.js</a></strong></p>
<pre><code class="language-js">function add(x, y) {
    return x+y;
}
console.log(add(2, 3));      // 5
console.log(add(-1, 1));     // 0

console.log(add(1, 1, 1));   // 2

</code></pre>
<p>We can use Node.js to run the code <code>node add_2_numbers.js</code> and the result will the the numbers seen next to each row.</p>
<p>As you can observe, the first two calls gave the correct result. The third one, where we passed 3 numbers return 2,
which might be surprising to someone who does not know the implementation of the <code>add</code> function,  but which is correct.
The bigger issue is that it did not issue any warning or error complaining about the unused third parameter.</p>
<h2 class="title is-4">Add 3 numbers</h2>
<p>We can try to create another <code>add</code> function that will accept 3 parameters and will return the sum of all 3.
The results are next to the lines:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/add_3_numbers.js">examples/js/add_3_numbers.js</a></strong></p>
<pre><code class="language-js">function add(x, y) {
    return x+y;
}
function add(x, y, z) {
    return x+y+z;
}

console.log(add(2, 3));      // NaN
console.log(add(-1, 1));     // NaN

console.log(add(1, 1, 1));   // 3

</code></pre>
<p>JavaScript does not allow us to define the same function more than once with different signatures. It just silently
overrides the previous function with the new function of the same name. So we would get the same results even
if we remove the declaration with the 2 parameters.</p>
<p>What happens here is that in the first two cases, because we only passed 2 arguments, the third argument is <code>undefined</code>
and when we add two numbers and <code>undefined</code> our result is <code>NaN</code> - <b>not a number</b>.</p>
<p>The third case, when we pass 3 arguments works as expected.</p>
<p>Clearly this is not the solution.</p>
<h2 class="title is-4">arguments, the object holding the passed arguments</h2>
<p>The correct solution is to define a function with empty signature, as if it did not accept
any parameters, and then to look at the <code>arguments</code> object that holds all the parameters.</p>
<p>We can iterate over the element using a <code>for</code> loop and add them all to an internal variable.</p>
<p>As you can see from the results this works even if the user did not pass any argument.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/sum_numbers.js">examples/js/sum_numbers.js</a></strong></p>
<pre><code class="language-js">function sum() {
    var s = 0;
    for (var i=0; i &lt; arguments.length; i++) {
        s += arguments[i];
    }
    return s;
}

console.log(sum(2, 3));         // 5
console.log(sum(-10, 1));       // -9
console.log(sum(1, 1, 1, 1));   // 4
console.log(sum());             // 0


</code></pre>
<p>For further details check out the
<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#Using_the_arguments_object">documentation of arguments</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>TODO in HTML5 and plain JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-04T19:30:01Z</updated>
    <pubDate>2015-06-04T19:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/todo-in-html-and-javascript" />
    <id>https://code-maven.com/todo-in-html-and-javascript</id>
    <content type="html"><![CDATA[<p>Creating a TODO list can be considered just a little bit further from &quot;Hello World&quot;, the &quot;standard&quot; example people use when
learning a new language. In this example we'll build a very basic TODO application using some HTML5 features and JavaScript.</p>
<p>The very first thing we need is to create an HTML page. We could get by with just the following 3 lines, as those are the important lines,
but I thought adding a few extra lines of HTML would make it more &quot;correct&quot;.</p>
<p>The 3 important lines are the following:</p>
<pre><code class="language-html">&lt;input id=&quot;task&quot;&gt;&lt;button id=&quot;add&quot;&gt;Add&lt;/button&gt;
&lt;div id=&quot;todos&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;todo.js&quot;&gt;&lt;/script&gt;
</code></pre>
<p>At first we have an <code>input</code> element where we'll be able to enter text and it has a button that we'll be able to click.</p>
<p>In the second row we have an empty <code>div</code> element. We are going to display the current list in that element.</p>
<p>Finally we load an external JavaScript file called <code>todo.js</code></p>
<p>The reason we load the JavaScript file at the end is that we wanted to make sure the other elements are already in the browser by
the time the JavaScript file is loaded and by the time it starts to run.</p>
<p>The full version can be seen here, and you can even try it by clicking on the link below.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/todo.html">examples/js/todo.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, user-scalable=yes&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;input id=&quot;task&quot;&gt;&lt;button id=&quot;add&quot;&gt;Add&lt;/button&gt;
&lt;hr&gt;
&lt;div id=&quot;todos&quot;&gt;&lt;/div&gt;

&lt;script src=&quot;todo.js&quot;&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;



</code></pre>
<p><a href="examples/js/todo.html">view</a></p>
<p>In the JavaScript code we have 4 function, and after the declaration of those 3 function we have the following code:</p>
<pre><code class="language-javascript">document.getElementById('add').addEventListener('click', add);
show();
</code></pre>
<p>The first line locates the HTML element that has the id &quot;add&quot; using the <a href="/javascript-hello-world-change-the-dom">getElementById</a>
method. On the returned object we call the <a href="/handling-events-in-javascript">addEventListener</a> method and assign the
<code>add</code> function to the <code>click</code> event. This code will make sure then whenever the user clicks on the &quot;Add&quot; button, the <code>add</code> function
will be called.</p>
<p>Finally we run the <code>show</code> function.</p>
<p>The 4 function we have in our code are the following:</p>
<p><code>show</code> will display the current list of TODO items.</p>
<p><code>add</code> will take the text from the <code>input</code> box and save it in our &quot;database&quot;.</p>
<p><code>remove</code> will remove the selected item from the list of TODO items in our &quot;database&quot;.</p>
<p><code>get_todos</code> is the function that will retrieve the list of TODO items from our &quot;database&quot;.</p>
<h2 class="title is-4">The &quot;database&quot;</h2>
<p>I put the word in quotes as it is not really a database in the same way most people consider databases,
but then any place we can persistently store data could be called a &quot;database&quot;.</p>
<p>Specifically we are going to use the <a href="/on-load-counter-with-javascript-and-local-storage">localStorage</a>
facility. It is a key-value pair database in the browser. We can store any string in it and that data will be available to us
when we return to the same page later. We just have to remember, the information stored in <code>localStorage</code> is not going to
be sent to the server and it won't be available on the same page if we visit it from another computer, or even from the same computer,
but a different browser.</p>
<p>For our TODO list we are going to use a single key in the <code>localStorage</code> and the value will be the stringified version of the list of TODO items we have.</p>
<h2 class="title is-4">Fetching from the database: get_todos</h2>
<p>As this function used by all the other functions, let's see the <code>get_todos</code> function first. It does not get any parameter.
It just fetches the content of the <code>todo</code> key of the <code>localStorage</code> using the <code>getItem</code> method.
If this is the first time ever the function is called, the specific localStorage entry will be empty and the <code>localStorage.getItem</code>
call will return <code>null</code>. In that case we return the newly created empty <code>Array</code>.</p>
<p>If the returned value is not <code>null</code> then it must be the stringified data we stored earlier. We use <code>JSON.parse</code> to
convert the JSON string back to JavaScript data and return that.</p>
<pre><code class="language-javascript">function get_todos() {
    var todos = new Array;
    var todos_str = localStorage.getItem('todo');
    if (todos_str != null) {
        todos = JSON.parse(todos_str); 
    }
    return todos;
}
</code></pre>
<h2 class="title is-4">Adding a new TODO entry</h2>
<p>The second function we might want to take a look at is the one called <code>add</code> which is called when the user has
clicked on the <code>All</code> button. At first, using <code>getElementById</code> it locates the HTML element with the id <code>task</code> which is the
<code>input</code> box and then it retrieves the <code>value</code> the user has typed in.</p>
<p>Then, calling <code>get_todos</code> we retrieve the already existing list of TODO items from the &quot;database&quot;. As explained above,
at the first time this function will return an empty <code>Array</code>.</p>
<p>We append the new task to the <code>Array</code> using the <code>push</code> method and then save the new list of TODO items
in the &quot;database&quot;. For this we first stringify the <code>Array</code> using the <code>JSON.stringify</code> method and then
we store the returned string using the <code>localStorage.setItem</code> method.</p>
<p>In the next step we call the <code>show()</code> function that will update the list of TODOs displayed on the web page.</p>
<p>Finally we <code>return false;</code> to avoid any further actions generated by the 'click' event.</p>
<pre><code class="language-javascript">function add() {
    var task = document.getElementById('task').value;

    var todos = get_todos();
    todos.push(task);
    localStorage.setItem('todo', JSON.stringify(todos));

    show();

    return false;
}
</code></pre>
<h2 class="title is-4">show the TODO list</h2>
<p>The <code>show</code> function will display the current TODO list stored in the &quot;database&quot;.
First thing it calls <code>get_todos</code> to get the (possibly empty) <code>Array</code> of
TODO items.</p>
<p>Then we manually create an HTML snippet in the, otherwise arbitrarily named <code>html</code> variable.
This is a <code>ul</code> element (and unordered list), with a <code>li</code> (list item) for each TODO entry.
In addition to the content of the <code>todos</code> array we also add a button to each list item.
Each button belongs to a class called 'remove' and each button has an id containing the index of the
todo item in the list retrieved from the &quot;database&quot;. We'll use these buttons to allow the user to remove
an item from the list.</p>
<p>The call <code>document.getElementById('todos').innerHTML = html;</code> insert the newly generated HTML
snippet in the original document loaded from the server. It actually replaces the content of the
element with the id &quot;todos&quot;. This means in subsequent calls it will just show the new list
regardless of what was there earlier.</p>
<p>In the next 4 lines we use the <code>getElementsByClassName</code> method to fetch all the buttons
that are in the 'remove' class. These are the buttons we have just added to each todo item.
To each button we assign a <code>event listener</code> that will be called if the user clicks on
either of those buttons. The call to <code>addEventListener</code> connects the 'click' event to the
<code>remove</code> function.</p>
<pre><code class="language-javascript">function show() {
    var todos = get_todos();

    var html = '&lt;ul&gt;';
    for(var i=0; i&lt;todos.length; i++) {
        html += '&lt;li&gt;' + todos[i] + '&lt;button class=&quot;remove&quot; id=&quot;' + i  + '&quot;&gt;x&lt;/button&gt;&lt;/li&gt;';
    };
    html += '&lt;/ul&gt;';

    document.getElementById('todos').innerHTML = html;

    var buttons = document.getElementsByClassName('remove');
    for (var i=0; i &lt; buttons.length; i++) {
        buttons[i].addEventListener('click', remove);
    };
}
</code></pre>
<h2 class="title is-4">remove a TODO item</h2>
<p>Finally we arrive to the <code>remove</code> function that will be called when the user clicks on any of
the remove buttons. (The remove buttons have an X on them.)</p>
<p><code>this</code> represents the current DOM-object which is the remove-button the user just clicked.
We retrieve the value of its <code>id</code> attribute using the <code>getAttribute</code> method. This is
the index of the specific TODO item among the TODO items in the &quot;database&quot;.</p>
<p>After retrieving the current list of TODO items, we use the <code>splice</code> method to remove
a specific element from the JavaScript array, and then we store the new list back the database.</p>
<p>Then, just as in the <code>add</code> function we call the <code>show</code> function to update the list in the
browser as well and we <code>return false;</code> to stop the propagation of the 'click' event.</p>
<pre><code class="language-javascript">function remove() {
    var id = this.getAttribute('id');
    var todos = get_todos();
    todos.splice(id, 1);
    localStorage.setItem('todo', JSON.stringify(todos));

    show();

    return false;
}
</code></pre>
<h2 class="title is-4">Full JavaScript code for TODO list</h2>
<p>That's it all the code for the JavaScript based TODO list.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/todo.js">examples/js/todo.js</a></strong></p>
<pre><code class="language-js">function get_todos() {
    var todos = new Array;
    var todos_str = localStorage.getItem('todo');
    if (todos_str !== null) {
        todos = JSON.parse(todos_str); 
    }
    return todos;
}

function add() {
    var task = document.getElementById('task').value;

    var todos = get_todos();
    todos.push(task);
    localStorage.setItem('todo', JSON.stringify(todos));

    show();

    return false;
}

function remove() {
    var id = this.getAttribute('id');
    var todos = get_todos();
    todos.splice(id, 1);
    localStorage.setItem('todo', JSON.stringify(todos));

    show();

    return false;
}

function show() {
    var todos = get_todos();

    var html = '&lt;ul&gt;';
    for(var i=0; i&lt;todos.length; i++) {
        html += '&lt;li&gt;' + todos[i] + '&lt;button class=&quot;remove&quot; id=&quot;' + i  + '&quot;&gt;x&lt;/button&gt;&lt;/li&gt;';
    };
    html += '&lt;/ul&gt;';

    document.getElementById('todos').innerHTML = html;

    var buttons = document.getElementsByClassName('remove');
    for (var i=0; i &lt; buttons.length; i++) {
        buttons[i].addEventListener('click', remove);
    };
}

document.getElementById('add').addEventListener('click', add);
show();

</code></pre>
<h2 class="title is-4">Comments</h2>
<p>thanks for sharing its so helpful..</p>
<hr />
<p>It is useful to develop in my project. Thanks..</p>
<hr />
<pre><code>&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;input id=&quot;task&quot;&gt;&lt;button class=&quot;btn&quot; id=&quot;add&quot;&gt;Add&lt;/button&gt;
        &lt;ul id=&quot;todos&quot; class=&quot;collection&quot;&gt;&lt;/ul&gt;
    &lt;/div&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
        var add = document.getElementById('add');
        add.addEventListener('click',function() {
            var task = document.getElementById('task').value;
            var list = [];
            list.push(task);
            localStorage.setItem('todo', JSON.stringify(list))
            var todo_str = localStorage.getItem('todo');
            var todos = JSON.parse(todo_str);
            var html = '';
            for(var i=0; i&lt;todos.length; i++)=&quot;&quot; {=&quot;&quot; html=&quot;&quot; +=&quot;&amp;lt;li class=&quot;collection-item&quot;&amp;gt;&quot; +=&quot;&quot; todos[i]=&quot;&quot; +=&quot;&quot; '&lt;=&quot;&quot; li=&quot;&quot;&gt;';
            }
            document.getElementById('todos').innerHTML = html;
        })
    &lt;/script&gt;
&lt;/body&gt;
</code></pre>
<p>Why isn't this code storing the values in localStorage?</p>
<hr />
<p>how to store and retrieve tasks as javascript objects?</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Handlebars with dynamically loaded and cached template</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-03T18:30:01Z</updated>
    <pubDate>2015-06-03T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/handlebars-with-dynamically-loaded-template" />
    <id>https://code-maven.com/handlebars-with-dynamically-loaded-template</id>
    <content type="html"><![CDATA[<p>In the earlier examples in the <a href="/handlebars">Handlebars tutorial</a> we
always had the templates, which are themselves small HTML snippets,
embedded in the HTML file as a script tag. That makes it hard to edit them
and get confusing. It might be better to load the templates dynamically
as they are needed.</p>
<p>Then of course if the same template is needed more than once, it would save time
if we could cache the already compiled template.</p>
<h2 class="title is-4">The HTML file</h2>
<p>The HTML file for this example is fairly simple.
We load <code>handlebars.min.js</code> from the CDN.
We also load <code>jQuery</code> from its CDN. Instead of the plain JavaScript
Ajax call we used earlier, we are going to use the Ajax functionality of jQuery.</p>
<p>Finally we load <code>handlebars_dynamic_loader.js</code> that holds our JavaScript code.</p>
<p>The <code>body</code> of the HTML page contains a <code>button</code> and an empty <code>div</code>,
waiting for us to fill.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_dynamic_load.html">examples/js/handlebars_dynamic_load.html</a></strong></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Handlebars load template&lt;/title&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, user-scalable=yes&quot;&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.3/handlebars.min.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;http://code.jquery.com/jquery-1.11.3.min.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;handlebars_dynamic_loader.js&quot;&gt;&lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
&lt;button id=&quot;show&quot;&gt;Show&lt;/button&gt;
&lt;div id=&quot;msg&quot;&gt;&lt;/div&gt;

  &lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="/examples/js/handlebars_dynamic_load.html">view</a></p>
<h2 class="title is-4">The Template</h2>
<p>The template we use in this examples is the most simple template there can
be. In this article we are only interested how we can dynamically load the
templates from the server.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_template_show.htm">examples/js/handlebars_template_show.htm</a></strong></p>
<pre><code class="language-html">Handlebars template loaded at {{time}}.

</code></pre>
<h2 class="title is-4">The JavaScript code gluing it all together</h2>
<p>This is the main part of the example.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_dynamic_loader.js">examples/js/handlebars_dynamic_loader.js</a></strong></p>
<pre><code class="language-js">var templates = {};

function display_template(tmpl, data) {
    console.log('display');
    if (templates[tmpl] === undefined) {
      return;
    }

    var template = templates[tmpl];
    var html    = template(data);
   $(&quot;#msg&quot;).html(html);
}

$(document).ready(function() {
    $(&quot;#show&quot;).click(function () {
      console.log('click');
      var name = 'show';
      var data = { time: new Date };

       if (templates[name] === undefined) {
         console.log(&quot;need&quot;);
         jQuery.get(&quot;/try/examples/js/handlebars_template_&quot; + name + &quot;.htm&quot;, function(resp) {
             console.log(resp);
             templates[name] = Handlebars.compile(resp);
             display_template(name, data);
         });
       } else {
          display_template(name, data);
       }
   });
});

</code></pre>
<p>We have a global object called <code>templates</code> that will hold the compiled templates.
Each template has a name. The name will be the key in the object, and the value will be the
content of the template.</p>
<p>The <code>display_template</code> function expects the name of a template, and the data that
needs to be sent to the template. After making sure, the template actually exists,
it will copy the template to the variable also called <code>template</code></p>
<pre><code class="language-javascript">var template = templates[tmpl];
</code></pre>
<p>Then it will run this template filling it with the data it received:</p>
<pre><code class="language-javascript">template(data);
</code></pre>
<p>Remember, we are planning to store the already compiled version of the template
that is actually a JavaSCript function object.</p>
<p>The final step of the <code>display_template</code> function is injecting the generated
HTML in the DOM.</p>
<h2 class="title is-4">The click event handler</h2>
<p>In the callback of the jQuery document ready we attach an event handler to the button we have
on the page. In order to make the code more generic, I put the name of the template in the
<code>name</code> variable, and the data I'd like to show in the <code>data</code> object.</p>
<p>Then if the <code>templates[name]</code> is empty, that is, if this is the first time we would like
to use the given template, we need to fetch it from the server with an Ajax request.
When the response arrives, we can compile it using</p>
<pre><code class="language-javascript">Handlebars.compile(resp);
</code></pre>
<p>and assign that value to the <code>templates[name]</code> for later reuse.</p>
<p>Then we can call the <code>display_template</code> function.</p>
<p>In case we already had the template in the memory, we can directly call the <code>display_template</code>
function.</p>
<h2 class="title is-4">Improved JavaScript code</h2>
<p>After writing all that down I had an idea for improvement. After all, in a real application
I'll have several jQuery callbacks that will trigger the use of templates. Each one of them
will need to load the template from server. So better hide all that in a single function,
the <code>display_template</code> function:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_dynamic_loader_improved.js">examples/js/handlebars_dynamic_loader_improved.js</a></strong></p>
<pre><code class="language-js">var templates = {};

function display_template(tmpl, data) {
    console.log('display');

    if (templates[tmpl] === undefined) {
      console.log(&quot;need&quot;);
      jQuery.get(&quot;/try/examples/js/handlebars_template_&quot; + tmpl + &quot;.htm&quot;, function(resp) {
          console.log(resp);
          templates[tmpl] = Handlebars.compile(resp);
          display_template(tmpl, data);
      });
      return;
    }

    var template = templates[tmpl];
    var html    = template(data);
   $(&quot;#msg&quot;).html(html);
}

$(document).ready(function() {
    $(&quot;#show&quot;).click(function () {
      console.log('click');
      var name = 'show';
      var data = { time: new Date };
      display_template(name, data);
   });
});

</code></pre>
<p>In this solution, the code fetching the raw template from the server was
moved inside the <code>display_template</code> function. It is called if the
template is not in the <code>templates</code> object.</p>
<h2 class="title is-4">Comments</h2>
<p>Do you think its beneficial to rend a new file with a 2/3 same partials and the middle partial missing or doing what you do here?</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Add code snippets to Atom - the text editor</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-03T14:30:01Z</updated>
    <pubDate>2015-06-03T14:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/add-code-snippets-to-atom" />
    <id>https://code-maven.com/add-code-snippets-to-atom</id>
    <content type="html"><![CDATA[<p>Snippets are a great feature of any editor or IDE and in <a href="https://atom.io/">Atom</a>
they are quite simple to use.</p>
<h2 class="title is-4">How to use a snippet in Atom</h2>
<p>In a file you start typing the &quot;prefix&quot; of an existing snippet.
Atom will show you a list of snippets that match the text you started to write.
If you stop typing you can select one of the entries using the up and down arrow.</p>
<img src="/img/atom_snippet_use.png" alt="Atom snippets in use" />
<p>When you press TAB or ENTER, Atom will insert the code snippet in the place where you started
to type.</p>
<p>There are many snippets that come with Atom pre-installed and you can easily create
your own snippets as well.</p>
<h2 class="title is-4">Add your own snippet to Atom</h2>
<p>You own snippets need to be defined in the <code>snippets.cson</code> file which is located
in your home directory. For me it was in the <code>~/.atom/</code> directory, though I don't
even have to know that, if I open the &quot;Atom&quot; menu, it has an entry to <code>Open Your Snippets</code>
that will open the <code>snippets.cson</code> in your favorite editor.</p>
<img src="/img/atom_snippet_editor.png" alt="Atom menu to open snippet editor" />
<p>In that file you need to add an entry like this</p>
<pre><code>'.text.html':
  'HTML 5':
    'prefix': 'html'
    'body': '''
    &lt;!DOCTYPE html&gt;
    &lt;html&gt;
      &lt;head&gt;
        &lt;meta charset=&quot;utf-8&quot;&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, user-scalable=yes&quot;&gt;
        &lt;title&gt;&lt;/title&gt;
        &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.3/handlebars.min.js&quot;&gt;&lt;/script&gt;
        &lt;script src=&quot;http://code.jquery.com/jquery-1.11.3.min.js&quot;&gt;&lt;/script&gt;

        &lt;link href=&quot;style.css&quot; rel=&quot;stylesheet&quot;&gt;
      &lt;/head&gt;
      &lt;body&gt;

      &lt;/body&gt;
    &lt;/html&gt;
'''
</code></pre>
<p>This will work for html files.</p>
<p>The first string describes the 'scope' of where this will work.</p>
<p>Each file-type has a scope and each file extension is mapped to a scope.
Specifically the scope of the HTML files is <code>text.html.basic</code>
and the following extensions are considered HTML files:
<code>htm, html, kit, shtml, tmpl, tpl, xhtml</code></p>
<p>I know this because I opened the <code>Settings</code> (Actually the <code>Atom / Preferences</code> menu option)
and among the <code>Packages</code> looked for the one handling HTML files. This is how it looks like:</p>
<img src="img/atom_html_file_type.png" alt="HTML file type in Atom" />
<h2 class="title is-4">Comments</h2>
<p>Exactly what I was looking for to bet a long ad code snippet working. Thanks..</p>
<hr />
<p>How can i stop auto-complete to mess with my snippets? When i tab, it does code completation instead of my snippet! Is it possible to do bind it in another key?</p>
<hr />
<p>Thank you! This was helpful. Do you know of a community site where snippet examples and shared? Maybe a github repo?</p>
<hr />
<p>This was super-helpful! Thank you!!</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Snippets for text files in Atom - the text editor</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-03T13:30:01Z</updated>
    <pubDate>2015-06-03T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/snippets-for-text-files-in-atom" />
    <id>https://code-maven.com/snippets-for-text-files-in-atom</id>
    <content type="html"><![CDATA[<p>Plain text files, with an extension of <code>txt</code> have a scope <code>text.plain</code> in the configuration
of the Atom editor.</p>
<p>If you'd like to create a snippet, you need to put it in the <code>text.plain</code> as in the next example:</p>
<pre><code>'.text.plain':
  'Copyright information':
    'prefix': 'copyright'
    'body' : 'Copyright (c) 2015 Foo Bar'
</code></pre>
<p>The second line is the human readable description of the snippet.
On the 3rd line we define the &quot;prefix&quot; that will trigger the snippet.
The 4th line shows the content of the snippet. The string that eventually needs to be inserted.</p>
<h2 class="title is-4">Multiple snippets for text files</h2>
<p>If you'd like to add another snippet in the same scope, you should include it within the same tree:</p>
<pre><code>'.text.plain':
  'Copyright information':
    'prefix': 'copyright'
    'body' : 'Copyright (c) 2015 Foo Bar'

  'x.y.z.':
    'prefix': 'xyz'
    'body' : 'add x and y and z'
</code></pre>
<p>Now you can type either 'copyright' or 'xyz' and invoke the respective snippet.</p>
<h2 class="title is-4">Multiline snipptes</h2>
<p>If you'd like to have a snippet insert more than one line, you need to use 'raw'
strings with triple-quotes. For example like in the next snippet:</p>
<pre><code>'.text.plain':
  'xyz':
    'prefix': 'xyz'
    'body' : '''
    add x
    and y
    and z
    '''
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Handlebars Tutorial</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-03T09:37:00Z</updated>
    <pubDate>2015-06-03T09:37:00Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/handlebars" />
    <id>https://code-maven.com/handlebars</id>
    <content type="html"><![CDATA[<p><a href="http://handlebarsjs.com/">Handlebars</a> is a HTML templating system written in JavaScript. It can be used both on the client-side
and on the server side in applications written in <a href="/node">Node.js</a>.</p>
<ol>
<li><a href="/introduction-to-handlebars-javascript-templating-system">Getting Started with Handlebars</a></li>
<li><a href="/handlebars-with-slightly-complex-data">Handlebars with (slightly) complex data</a></li>
<li><a href="/handlebars-helpers">Handlebars helpers</a></li>
<li><a href="/handlebars-conditionals">Handlebars conditional</a></li>
<li><a href="/handlebars-with-dynamically-loaded-template">Handlebars with dynamically loaded and cached template</a></li>
</ol>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-03T08:01:00Z</updated>
    <pubDate>2015-06-03T08:01:00Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/javascript" />
    <id>https://code-maven.com/javascript</id>
    <content type="html"><![CDATA[<p>Articles about Vanilla JavaScript</p>
<ul>
<li><a href="/introduction-to-javascript">Introduction to JavaScript - basic output</a></li>
<li><a href="/javascript-input-with-prompt-and-confirm">JavaScript input with prompt and confirm</a></li>
<li><a href="/functions-in-javascript">Functions in JavaScript</a></li>
<li><a href="/on-load-counter-with-javascript-and-local-storage">On-load counter with JavaScript and local storage</a></li>
<li><a href="/javascript-hello-world-change-the-dom">JavaScript Hello World - changing the DOM with getElementById and innerHTML</a></li>
<li><a href="/handling-events-in-javascript">Handling user events in JavaScript</a></li>
<li><a href="/input-output-in-plain-javascript">Input Output in plain JavaScript</a></li>
<li><a href="/ajax-request-for-json-data">Ajax request for JSON data with vanilla JavaScript</a></li>
<li><a href="/todo-in-html-and-javascript">TODO in HTML5 and plain JavaScript</a></li>
<li><a href="/improving-javascript-code-with-jslint">Improving JavaScript code with JSLint</a></li>
<li><a href="/open-javascript-console">Open JavaScript Console</a></li>
<li><a href="/show-ads-to-visitors-based-on-referrer">Show ads to visitors based on referrer using JavaScript only</a></li>
</ul>
<!--
* <a href=""></a>
-->
<p>Additional JavaScript related articles for the front-end can be found in the <a href="/handlebars">Handlebars</a> series
and in the <a href="/angularjs">AngularJS</a> series.</p>
<p>The <a href="/nodejs">Node.js</a> series provides some insight to JavaScript on the server side.</p>
<p><a href="/javascript-module-to-run-in-browser-and-in-node">JavaScript module to run both in a browser and in Node.js</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>The Spaceship Operator</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-06-01T12:06:01Z</updated>
    <pubDate>2015-06-01T12:06:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/the-spaceship-operator" />
    <id>https://code-maven.com/the-spaceship-operator</id>
    <content type="html"><![CDATA[<p>A long time ago, in a country far, far away, when I was still a teenager, at the dawn of the personal computing age,
my parents bought me a <a href="http://en.wikipedia.org/wiki/Casio_FX-702P">Casio FX-702P</a>.</p>
<p>I've made my first steps programming on this device. I did not understand it back then, but the feeling that I can
make that thing do what I want was enormous. I taught myself programming by writing a game. A very simple game.</p>
<p>This game turned into a career and a hobby. I am one of the lucky people who makes a living with something I really enjoy.</p>
<p>Programming and teaching programming.</p>
<p>In this series of articles I plan to show you how to build that game in a modern computing environment in the hope
that you will also fall in love with it.</p>
<h2 class="title is-4">Prerequisites</h2>
<p>The prerequisites of this series is deliberately minimal: You need to have access to a computer.</p>
<p>That's it.</p>
<h2 class="title is-4">The Game</h2>
<p>I call the game <strong>The Spaceship operator</strong> partially as a wink to the similarly named operators in some of the programming languages.
But never mind.</p>
<p>The game is very simple, you might imaging something I could build on that device, but in this series we are going to extend it in all
kinds of directions.</p>
<p>The core of the game is that there is a spaceship out there and you need to shoot it down. You know that the spaceship is between 1-200
units away. You aim, shoot, and the computer tells you if you have hit the target, if your shot was too short or too long.
If you have not hit the target you can adjust and shoot again till you hit the target.
The objective is to shoot down the spaceship with the smallest number of shots.
Luckily the spaceship is not moving. At least not in the initial version of the game.</p>
<p>In a less space-oriented description: the computer &quot;thinks&quot; about a whole number between 1-200 and hides it. You have to guess the number.
After every guess the computer tells you if the guess was correct, if it was smaller or larger than the hidden number.
Then you can guess again.</p>
<p>What is the best strategy? Is there a strategy that can always win?</p>
<p>The naive way to find the other space-ship is to shoot one-by-one from 1 to 200. In worst case, if the computer thought 200,
it will require 200 shots.  If you play a lot, on average you'll hit the target in 100 shots.</p>
<p>There is a much better strategy though.
You can shoot in the middle of the range. If the shot was short we know that the spaceship in the second half of the space. If
the shot was too long, we know the spaceship is in the first half of the space. In either case, in one shot we halved the space we need
to check. We can then repeat this on the half where the spaceship can be found until the (search-)space is reduced to only one spot and
then we hit the space-ship. In worst case, if we don't get lucky in one of our shots, we can reduce the space to 1 place in just 8 steps:
The size of the space after each shot: 200 -&gt; 100 -&gt; 50 -&gt; 25 -&gt; 12 -&gt; 6 -&gt; 3 -&gt; 1</p>
<p>This strategy is called <strong>binary-search</strong> and it can be very important in computer programming, but outside of it as well.
For example, if you need to shoot down space-ships.</p>
<h2 class="title is-4">Outline</h2>
<p>I don't have the full outline of the series. I'll make it up as we go.
But I know some of the steps:</p>
<ol>
<li>
<p><a href="/html-basics">Basics of HTML to show a page</a></p>
</li>
<li>
<p>Basics of JavaScript to play the game</p>
</li>
<li>
<p>HTML5/CSS3 to make the game more persistent</p>
</li>
<li>
<p>Some backend-language to store the data on a server</p>
</li>
</ol>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Getting started with Vagrant to set up a virtual environment</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-05-28T10:05:01Z</updated>
    <pubDate>2015-05-28T10:05:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/setting-up-vagrant" />
    <id>https://code-maven.com/setting-up-vagrant</id>
    <content type="html"><![CDATA[<p><a href="https://www.vagrantup.com/">Vagrant</a> makes it very easy to install and manage virtual environments on your computer.
With just a few commands it can launch a Virtual Private Server on your desktop/laptop computer in which you can
freely install anything without interfering with other environments. Then you can as easily clean up and
remove that virtual environment.</p>
<h2 class="title is-4">To Set up a Virtual Environment</h2>
<p>Install <a href="https://www.vagrantup.com/">Vagrant</a> and <a href="https://www.virtualbox.org/">VirtualBox</a>
then go back to the <a href="https://www.vagrantup.com/">home page of Vagrant</a> and follow the Getting Started instructions.</p>
<p>I have the following versions:</p>
<pre><code>$ vagrant -v
Vagrant 1.7.2
</code></pre>
<pre><code>$ VBoxManage -v
4.3.24r98716
</code></pre>
<p>Once I installed those two I run the following:</p>
<p>Create the directory where I am going to have the configuration files for this Vagrant instance.</p>
<pre><code>mkdir ~/work/try
cd ~/work/try
</code></pre>
<p>Create a file called <code>Vagrant</code> in the current directory with some default parameters and indicate that you want to
have your environment based on the <code>hashicorp/precise32</code> which is a generic environment you can start with.
(If you'd like to have a more Perl-specific environment check out the article on
<a href="/pro/vagrant-perl-development-environment">Vagrant Perl Development Environment</a>.</p>
<pre><code>vagrant init hashicorp/precise32
</code></pre>
<p>Launch the server. The first time we run this, it will download the necessary VirtualBox image file which can take some time.</p>
<pre><code>vagrant up
</code></pre>
<p>ssh to the machine running on your desktop:</p>
<pre><code>vagrant ssh
</code></pre>
<h2 class="title is-4">Do your experiments</h2>
<p>Now you are inside the VirtualBox image. You can freely install stuff, make changes everywhere except in the <code>/vagrant</code> directory.
With that directory you need to be careful becase that is mapped to the directory where you set Vagrant up. (In our case that is the <code>~/work/try</code>
directory.)</p>
<p>This virtual environment is based on Ubuntu.</p>
<p>As Ubuntu gets security and other fixes almost on daily basis, the first thing you might want to do is to update all the packages:</p>
<pre><code>vagrant@precise32:~$ sudo aptitude update
vagrant@precise32:~$ sudo aptitude -y safe-upgrade
</code></pre>
<p>For me it has installed 181 packages.</p>
<p>Once this is done, you'd need to restart the virtual environment for all the changes to take effect.
(I have not checked, but I am quite sure there is at least one update that really requires a reboot.)</p>
<p>Exit the ssh session:</p>
<pre><code>vagrant@precise32:~$ exit
</code></pre>
<p>Stop your virtual instance:</p>
<pre><code>vagrant halt
</code></pre>
<p>Start it again:</p>
<pre><code>vagrant up
</code></pre>
<p>ssh to it again:</p>
<pre><code>vagrant ssh
</code></pre>
<p>Then install whatever you'd need</p>
<pre><code>vagrant@precise32:~$ sudo aptitude install ....
</code></pre>
<p>A few things that I usually need:</p>
<pre><code>vagrant@precise32:~$ sudo aptitude -y install curl vim
</code></pre>
<h2 class="title is-4">Destroy</h2>
<p>After you are done using the virtual environment you can leave the box by typing</p>
<pre><code>vagrant@precise32:~$ exit
</code></pre>
<p>Then you can completely remove all traces of your changes using the following command:</p>
<pre><code>vagrant destroy
</code></pre>
<p>This will still keep the original <code>hashicorp/precise32</code> image, taking up some space
on your hard disk, but it means next time you runt <code>vagrant up</code> it will be much faster
as it won't need to donwload any files.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Handlebars conditional</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-04-22T10:00:01Z</updated>
    <pubDate>2015-04-22T10:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/handlebars-conditionals" />
    <id>https://code-maven.com/handlebars-conditionals</id>
    <content type="html"><![CDATA[<p>The <a href="http://handlebarsjs.com/">Handlebars JavaScript</a> templating engine provide a single <code>if</code>-conditional with an optional <code>else</code>,
but that <code>if</code>-statement can only handle a single value, not an expression. You can write</p>
<pre><code>{{#if name}}
..
{{/if}}
</code></pre>
<p>but you cannot write</p>
<pre><code>{{#if name == 'Foo'}}
..
{{/if}}
</code></pre>
<p>Let's create a <a href="/handlebars-helpers">Handlebars helper</a> that will provide this functionality.</p>
<h2 class="title is-4">if conditional</h2>
<p>Before creating the helper though, let's see a full example using the plain <code>if</code> statement.
There are two values in the data object: cond1 and cond2, true and false respectively. The rest of the
JavaScript code is just fetching the template and letting Handlebars process the data.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_if.js">examples/js/handlebars_if.js</a></strong></p>
<pre><code class="language-js">var data = {
   'cond1'  : true,
   'cond2'  : false,
};

document.getElementById('show').addEventListener('click', function () {
    var source = document.getElementById('text-template').innerHTML;
    var template = Handlebars.compile(source);
    var html = template(data);
    document.getElementById('content').innerHTML = html;
});


</code></pre>
<p>The template itself has two entries like this using each one of the variables:</p>
<pre><code>{{#if cond1}}
    true
{{else}}
    false
{{/if}}
</code></pre>
<p>The full html code is this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_if.html">examples/js/handlebars_if.html</a></strong></p>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Handlebars conditionals&lt;/title&gt;

  &lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
    &lt;br&gt;#if cond1 (expected true)
    {{#if cond1}}
       true
    {{else}}
      false
    {{/if}}

    &lt;br&gt;#if cond2 (expected false)
    {{#if cond2}}
      true
    {{else}}
      false
    {{/if}}
  &lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;
&lt;button id=&quot;show&quot;&gt;Show&lt;/button&gt;
&lt;hr&gt;
&lt;div id=&quot;content&quot;&gt;&lt;/div&gt;


&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/try/examples/js/handlebars_helpers_if_eq.js&quot;&gt;&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;



</code></pre>
<p><a href="examples/js/handlebars_if.html">view</a></p>
<p>You can try it by clicking on the Try link. In the new page the &quot;show&quot; button will trigger the process.</p>
<h2 class="title is-4">if_eq</h2>
<p>In the next example we have implemented a <a href="/handlebars-helpers">Handlebars helper</a> called
<code>if_eq</code>. It expects two parameters and will compare them using <code>==</code>.
The helper itself looks like this:</p>
<pre><code class="language-javascript">Handlebars.registerHelper('if_eq', function(a, b, opts) {
    if (a == b) {
        return opts.fn(this);
    } else {
        return opts.inverse(this);
    }
});
</code></pre>
<p>The template using this looks like this: (<code>name</code> is an attribute passed to the <code>template</code> function.)</p>
<pre><code>{{#if_eq name 'Foo'}}
      true
{{else}}
      false
{{/if_eq}}
</code></pre>
<p>The full JavaScript file also contains the data object and the
code we had earlier combining the template with the data:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_helpers_if_eq.js">examples/js/handlebars_helpers_if_eq.js</a></strong></p>
<pre><code class="language-js">var data = {
   'name'   : 'Foo',
};

document.getElementById('show').addEventListener('click', function () {
    var source = document.getElementById('text-template').innerHTML;
    var template = Handlebars.compile(source);
    var html = template(data);
    document.getElementById('content').innerHTML = html;
});

Handlebars.registerHelper('if_eq', function(a, b, opts) {
    if (a == b) {
        return opts.fn(this);
    } else {
        return opts.inverse(this);
    }
});


</code></pre>
<p>The full HTML file including the template looks like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_helpers_if_eq.html">examples/js/handlebars_helpers_if_eq.html</a></strong></p>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Handlebars conditionals&lt;/title&gt;

  &lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
    &lt;br&gt;#if_eq name Foo (expected true)
    {{#if_eq name 'Foo'}}
      true
    {{else}}
      false
    {{/if_eq}}
    
    &lt;br&gt;#if_eq name 'Bar' (expected false)
    {{#if_eq name 'Bar'}}
       true
    {{else}}
       false
    {{/if_eq}}
  &lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;
&lt;button id=&quot;show&quot;&gt;Show&lt;/button&gt;
&lt;hr&gt;
&lt;div id=&quot;content&quot;&gt;&lt;/div&gt;


&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/try/examples/js/handlebars_helpers_if_eq.js&quot;&gt;&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;


</code></pre>
<p><a href="examples/js/handlebars_helpers_if_eq.html">view</a></p>
<p>You can try it after clicking on the &quot;Try&quot; link.</p>
<h2 class="title is-4">Uncaught Error: if_eq doesn't match if - 3:7</h2>
<p>When I encountered this error it took me quite a while to figure out what went wrong.
It might have been just something blocking my mind, I am not sure. Can you spot the  problem in the next example:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_helpers_if_eq_typo.html">examples/js/handlebars_helpers_if_eq_typo.html</a></strong></p>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Handlebars conditionals&lt;/title&gt;

  &lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
    &lt;br&gt;#if_eq name Foo (expected true)
    {{#if_eq name 'Foo'}}
      true
    {{else}}
      false
    {{/if}}
    
    &lt;br&gt;#if_eq name 'Bar' (expected false)
    {{#if_eq name 'Bar'}}
       true
    {{else}}
       false
    {{/if_eq}}
  &lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;
&lt;button id=&quot;show&quot;&gt;Show&lt;/button&gt;
&lt;hr&gt;
&lt;div id=&quot;content&quot;&gt;&lt;/div&gt;


&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/try/examples/js/handlebars_helpers_if_eq.js&quot;&gt;&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;


</code></pre>
<p><a href="examples/js/handlebars_helpers_if_eq_typo.html">view</a></p>
<p>This happened when I started to convert my <code>if</code> conditional to an <code>if_eq</code> conditional, but I only changed the opening
expression from</p>
<pre><code>{{#if ...}}
</code></pre>
<p>to</p>
<pre><code>{{#if_eq ...}}
</code></pre>
<p>but not the closing expression that was left as</p>
<pre><code>{{/if}}
</code></pre>
<p>.
Hence the error telling us that <code>if_eq</code> does not match <code>if</code>. Maybe if the error message had the keywords stand out,
it would have been easier.</p>
<p>Anyway, look out for such typos. They are a waste of time. Make some more interesting bugs!</p>
<h2 class="title is-4">iff - for other conditionals</h2>
<p>Finally we got to build the more generic helper for conditional expressions. I called it <code>iff</code>. I am aware of the mathematical
meaning of it, but it just looked cute and short to be used for a generic comparision helper. The idea is that I'd like to
be able to write expressions like these:</p>
<pre><code>    {{#iff name '==' 'Foo'}}
</code></pre>
<p>and like this:</p>
<pre><code>    {{#iff answer '&gt;' 40}}
</code></pre>
<p>In the sample I've created two templates. In the first template I used there are 3 such conditionals.
In the second template there is a single conditional:</p>
<pre><code>{{#iff 4 '*' 5}}
</code></pre>
<p>that I included just to
show what will happen if we supply an operator that is not supported by the <code>iff</code> helper. I also added two buttons,
one to process and show the first template and one to process and show the second template.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_conditionals.html">examples/js/handlebars_conditionals.html</a></strong></p>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Handlebars conditionals&lt;/title&gt;

  &lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
    &lt;br&gt;#iff name '==' 'Foo' (expected true)
    {{#iff name '==' 'Foo'}}
      true
    {{else}}
      false
    {{/iff}}

    &lt;br&gt;#iff 42 &amp;gt; 40 (expected true)
    {{#iff answer '&gt;' 40}}
      true
    {{else}}
      false
    {{/iff}}

    &lt;br&gt;#iff 42 &amp;gt; 50 (expected false)
    {{#iff answer '&gt;' 50}}
      true
    {{else}}
      false
    {{/iff}}
  &lt;/script&gt;

  &lt;script id=&quot;text2-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
    &lt;br&gt;Exception!
    {{#iff 4 '*' 5}}
       true
    {{else}}
       false
    {{/iff}}
  &lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;
&lt;button id=&quot;show&quot;&gt;Show&lt;/button&gt;
&lt;button id=&quot;show2&quot;&gt;Try invalid&lt;/button&gt;
&lt;hr&gt;
&lt;div id=&quot;content&quot;&gt;&lt;/div&gt;


&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/try/examples/js/handlebars_conditionals.js&quot;&gt;&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;


</code></pre>
<p><a href="examples/js/handlebars_conditionals.html">view</a></p>
<p>The JavaScript file has the data, the code reacting to clicks and processing the templates and the the partial(!)
implementation of the <code>iff</code> helper. Basically it is just a giant <code>switch</code> statement with a separate
<code>case</code> for each valid operator. The <code>default</code> behavior, when the given operator is not handled
by any of the <code>case</code> statements, is to <code>throw</code> an exception.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_conditionals.js">examples/js/handlebars_conditionals.js</a></strong></p>
<pre><code class="language-js">var data = {
   'cond1'  : true,
   'cond2'  : false,
   'name'   : 'Foo',
   'answer' : 42
};

document.getElementById('show').addEventListener('click', function () {
    var source = document.getElementById('text-template').innerHTML;
    var template = Handlebars.compile(source);
    var html = template(data);
    document.getElementById('content').innerHTML = html;
});

document.getElementById('show2').addEventListener('click', function () {
    document.getElementById('content').innerHTML = 'Look at the console!';
    var source = document.getElementById('text2-template').innerHTML;
    var template = Handlebars.compile(source);
    var html = template(data);
    document.getElementById('content').innerHTML = html;
});


Handlebars.registerHelper('iff', function(a, operator, b, opts) {
    var bool = false;
    switch(operator) {
       case '==':
           bool = a == b;
           break;
       case '&gt;':
           bool = a &gt; b;
           break;
       case '&lt;':
           bool = a &lt; b;
           break;
       default:
           throw &quot;Unknown operator &quot; + operator;
    }

    if (bool) {
        return opts.fn(this);
    } else {
        return opts.inverse(this);
    }
});



</code></pre>
<h2 class="title is-4">compare</h2>
<p>After reaching this point I found out that there is already an implementation of such a helper called <code>#compare</code>.
It can be found among the <a href="http://assemble.io/helpers/helpers-comparison.html">comparison helpers</a>.</p>
<p>In any case I think it was interesting to see how to build and use this.</p>
<h2 class="title is-4">Comments</h2>
<p>Handlebars is pretty useless, how difficult can it be to include support for expressions? That you have to declare so much code for this kind of basic behaviour...</p>
<hr />
<p>Thank you so much for this! Spent ages looking online for an example of 'if_eq' and yours is the first one that clicked for me.</p>
<hr />
<p>Thank you for the Uncaught Error section, saved me several hours :)</p>
<hr />
<p>Thanks for this great post! But for the first example, where true is expected false is returned. please verify and correct it. I ma facing the same issue in my project.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Handlebars helpers</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-04-02T23:30:01Z</updated>
    <pubDate>2015-04-02T23:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/handlebars-helpers" />
    <id>https://code-maven.com/handlebars-helpers</id>
    <content type="html"><![CDATA[<p>Besides the template language <a href="http://handlebarsjs.com/">Handlebars</a> offers it also allows us to create handlers.
I think in other environments these might be called macros, or you can think about them as subroutine.</p>
<p>They allow us to create a reusable expression.</p>
<p>There are a number of examples of <a href="http://handlebarsjs.com/block_helpers.html">block helpers</a> on the Handlebars site,
but I think I am going to show a few others. Let's start with probably the most basic possible helper. One that returns a static
HTML snippet.</p>
<h2 class="title is-4">Static HTML helper</h2>
<p>The full code looks like this and  you can try it by clicking on the <code>Try!</code> button.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_helpers_static.html">examples/js/handlebars_helpers_static.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.min.js&quot;&gt;&lt;/script&gt;
&lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
    &lt;h3&gt;{{greeting}}&lt;/h3&gt;
&lt;/script&gt;

&lt;button id=&quot;show&quot;&gt;Show&lt;/button&gt;
&lt;div id=&quot;content&quot;&gt;&lt;/div&gt;

&lt;script&gt;
Handlebars.registerHelper('greeting', function() {
    return new Handlebars.SafeString( '&lt;i&gt;Hello World&lt;/i&gt;' );
});

document.getElementById('show').addEventListener('click', function () {
    var source = document.getElementById('text-template').innerHTML;
	var template = Handlebars.compile(source);
	var html = template();

    document.getElementById('content').innerHTML = html;
});

&lt;/script&gt;



</code></pre>
<p><a href="examples/js/handlebars_helpers_static.html">view</a></p>
<p>The helper is a snippet of JavaScript code. A string (in our case <code>greeting</code>) mapped to a function.
That function can return a plain string that will be HTML escaped, or it can return a <code>SafeString</code>
object which will left  as it is. In our case, because we want to return an HTML snippet, we used the
<code>SafeString</code> object. Normally this code will go to an external JavaScript file. Probably
one shared by several projects.</p>
<pre><code class="language-javascript">Handlebars.registerHelper('greeting', function() {
    return new Handlebars.SafeString( '&lt;i&gt;Hello World&lt;/i&gt;' );
});
</code></pre>
<p>Now that we have a helper called <code>greeting</code> we can use it in our template code:</p>
<pre><code class="language-javascript">    &lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
        &lt;h3&gt;{{greeting}}&lt;/h3&gt;
    &lt;/script&gt;
</code></pre>
<p>A template is just an HTML snippet with a few place holders.</p>
<p>The rest of the code in the example is just the regular Handlebars code that extracts the template from the
HTML code, compiles it and then generates the HTML snippet.</p>
<p>Of course showing Hello World is not that interesting, but maybe if the helper returned copyright information for a web site,
or if return the menu, then it might be more interesting.</p>
<h2 class="title is-4">Link handler</h2>
<p>The next example is base on one of the examples from the web site of <a href="http://handlebarsjs.com/block_helpers.html">Handlebars</a>.
This one already accepts a parameter. A JavaScript object that is expected to have an attribute called <code>url</code> and and optional
attribute called <code>text</code>. Given such an object, this handler will return an HTML link using the text as the anchor of the link.
If the 'text' is missing from the object then it will use the URL as the anchor.</p>
<p>The Full example looks like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_helpers_link.html">examples/js/handlebars_helpers_link.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.min.js&quot;&gt;&lt;/script&gt;
&lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
    {{link home}}&lt;br&gt;
    {{link perlmaven}}&lt;br&gt;
&lt;/script&gt;

&lt;button id=&quot;show&quot;&gt;Show&lt;/button&gt;
&lt;div id=&quot;content&quot;&gt;&lt;/div&gt;

&lt;script&gt;
Handlebars.registerHelper('link', function(obj) {
    var url  = obj.url;
    var text = obj.text;
    if (text == undefined) {
        text = url;
    }
    return new Handlebars.SafeString( '&lt;a href=&quot;' + url + '&quot;&gt;' + text + '&lt;/a&gt;' );
});

document.getElementById('show').addEventListener('click', function () {
    var source = document.getElementById('text-template').innerHTML;
    var template = Handlebars.compile(source);
    var html = template({
        'home' : {
           'url'  : '/',
           'text' : 'Code Maven'
        },
        'perlmaven' : {
            'url' : 'http://perlmaven.com/'
        }
    });

    document.getElementById('content').innerHTML = html;
});

&lt;/script&gt;




</code></pre>
<p><a href="examples/js/handlebars_helpers_link.html">view</a></p>
<p>The Handler looks like this:</p>
<pre><code class="language-javascript">Handlebars.registerHelper('link', function(obj) {
    var url  = obj.url;
    var text = obj.text;
    if (text == undefined) {
        text = url;
    }
    return new Handlebars.SafeString( '[' + text + '](' + url + ')' );
});
</code></pre>
<p>Here we map the 'link' string to a function that accepts a single parameter. We copy the <code>url</code> and the <code>text</code>
attributes to the appropriate variables, but we use the <code>url</code> as text if no text was given.</p>
<p>Then we manually construct the HTML. This seems to set us back a bit to the age of HTML concatenation, but remember this
will be placed in an external JavaScript file and will be reused throughout a project, or even more projects. We could have use
the Handlebars templating system recursively here, but that seems a bit unnecessary.</p>
<p>Once we have created this Handler, we can use it in our template:</p>
<pre><code class="language-javascript">    &lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
        {{link home}}&lt;br&gt;
        {{link perlmaven}}&lt;br&gt;
    &lt;/script&gt;
</code></pre>
<p>As opposed to the static case we saw earlier this time we use the new <code>link</code> keyword along with a parameter.
Once the parameter is 'home', and once it is 'perlmaven'. These are the place holders that will be replaced by data
passed to the <code>template()</code> function.</p>
<p>Finally, let's see the call to the <code>template()</code> function along with the data we pass to it.
Here you can see that we pass an object with two attributes, 'home' and 'perlmaven'. These will be mapped
to the appropriate place holders in the template. Note, that for 'home' we provided both the 'url' and the 'text',
while for 'perlmaven' we only provided 'url'.</p>
<pre><code class="language-javascript">    var html = template({
        'home' : {
           'url'  : '/',
           'text' : 'Code Maven'
        },
        'perlmaven' : {
            'url' : 'https://perlmaven.com/'
        }
    });
</code></pre>
<p>The result you an see for yourself will be</p>
<p><a href="/">Code Maven</a><br>
<a href="https://perlmaven.com/">http://perlmaven.com/</a><br></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Handlebars with (slightly) complex data</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-04-01T21:00:01Z</updated>
    <pubDate>2015-04-01T21:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/handlebars-with-slightly-complex-data" />
    <id>https://code-maven.com/handlebars-with-slightly-complex-data</id>
    <content type="html"><![CDATA[<p>In the article where we looked at <a href="/introduction-to-handlebars-javascript-templating-system">Handlebars the JavaScript templating engine</a> for the first time,
there was a working example, but it was probably not very convincing as to why using Handlebars is much better than concatenating the HTML snippet
together in plain JavaScript.</p>
<p>Then there was this example with an <a href="/ajax-request-for-json-data">Ajax request returning JSON data</a>.
There too we used plain JavaScript code but that was already quite unpleasant. Let's now see how can we do the same using Handlebars.</p>
<p>In the earlier example we received a JSON response with the following content:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/data.json">examples/js/data.json</a></strong></p>
<pre><code class="language-json">{
   &quot;title&quot; : &quot;Code Maven&quot;,
   &quot;description&quot; : &quot;Coding is fun!&quot;,
   &quot;articles&quot; : [
       {
          &quot;title&quot; : &quot;Handling user events in JavaScript&quot;,
          &quot;url&quot;   : &quot;http://code-maven.com/handling-events-in-javascript&quot;
       },
       {
          &quot;title&quot; : &quot;On-load counter with JavaScript and local storage&quot;,
          &quot;url&quot;   : &quot;http://code-maven.com/on-load-counter-with-javascript-and-local-storage&quot;
       }
   ]
}

</code></pre>
<p>We used this code:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/ajax.js">examples/js/ajax.js</a></strong></p>
<pre><code class="language-js">function ajax_get(url, callback) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 &amp;&amp; xmlhttp.status == 200) {
            console.log('responseText:' + xmlhttp.responseText);
            try {
                var data = JSON.parse(xmlhttp.responseText);
            } catch(err) {
                console.log(err.message + &quot; in &quot; + xmlhttp.responseText);
                return;
            }
            callback(data);
        }
    };

    xmlhttp.open(&quot;GET&quot;, url, true);
    xmlhttp.send();
}

ajax_get('/try/examples/js/data.json', function(data) {
    document.getElementById(&quot;title&quot;).innerHTML = data[&quot;title&quot;];

    var html = &quot;&lt;h2&gt;&quot; + data[&quot;title&quot;] + &quot;&lt;/h2&gt;&quot;;
    html += &quot;&lt;h3&gt;&quot; + data[&quot;description&quot;] + &quot;&lt;/h3&gt;&quot;;
    html += &quot;&lt;ul&gt;&quot;;
       for (var i=0; i &lt; data[&quot;articles&quot;].length; i++) {
           html += '&lt;li&gt;&lt;a href=&quot;' + data[&quot;articles&quot;][i][&quot;url&quot;] + '&quot;&gt;' + data[&quot;articles&quot;][i][&quot;title&quot;] + &quot;&lt;/a&gt;&lt;/li&gt;&quot;;
       }
    html += &quot;&lt;/ul&gt;&quot;;
    document.getElementById(&quot;text&quot;).innerHTML = html;
});



</code></pre>
<p><a href="/try/examples/js/ajax.html">Try it here!</a></p>
<h2 class="title is-4">Using Handlebars</h2>
<p>The <code>ajax_get</code> function remained the same. It is explained in the article
about <a href="/ajax-request-for-json-data">Ajax request</a>.</p>
<p>The change is in lines 23-25, where instead of concatenating the HTML piece-by-piece, we
fetch the template from the <code>text-template</code> tag, compile this template-source into
a function called <code>template</code> and then we just pass the data we have received by
the Ajax request to this <code>template()</code> function. Much cleaner than earlier
when we had to think about using single-quotes outside so they won't interfere with the
double-quotes we wanted to use for the HTML attributes.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/ajax_handlebars.js">examples/js/ajax_handlebars.js</a></strong></p>
<pre><code class="language-js">function ajax_get(url, callback) {
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 &amp;&amp; xmlhttp.status == 200) {
            console.log('responseText:' + xmlhttp.responseText);
            try {
                var data = JSON.parse(xmlhttp.responseText);
            } catch(err) {
                console.log(err.message + &quot; in &quot; + xmlhttp.responseText);
                return;
            }
            callback(data);
        }
    };

    xmlhttp.open(&quot;GET&quot;, url, true);
    xmlhttp.send();
}

ajax_get('/try/examples/js/data.json', function(data) {
    document.getElementById(&quot;title&quot;).innerHTML = data[&quot;title&quot;];

    var source   = document.getElementById('text-template').innerHTML;
    var template = Handlebars.compile(source);
    var html    = template(data);

    document.getElementById(&quot;text&quot;).innerHTML = html;
});




</code></pre>
<p>The template itself is located in the HTML file in a <code>script</code> tag.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/ajax_handlebars.html">examples/js/ajax_handlebars.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.min.js&quot;&gt;&lt;/script&gt;
 
  &lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
    &lt;h2&gt;{{title}}&lt;/h2&gt;
    &lt;h3&gt;{{description}}&lt;/h3&gt;
    &lt;ul&gt;
    {{#each articles}}
        &lt;li&gt;&lt;a href=&quot;{{url}}&quot;&gt;{{title}}&lt;/a&gt;&lt;/li&gt;
    {{/each}}
    &lt;/ul&gt;
  &lt;/script&gt;

&lt;h1 id=&quot;title&quot;&gt;&lt;/h1&gt;
&lt;hr&gt;
&lt;div id=&quot;text&quot;&gt;&lt;/div&gt;

&lt;script src=&quot;ajax_handlebars.js&quot;&gt;&lt;/script&gt;


</code></pre>
<p><a href="examples/js/ajax_handlebars.html">view</a></p>
<p>The place-holders for</p>
<pre><code>{{title}}
</code></pre>
<p>and</p>
<pre><code>{{description}}
</code></pre>
<p>are simple values that we have already seen
in the <a href="/introduction-to-handlebars-javascript-templating-system">introduction to Handlebars</a>, but there is also a loop
to go over the elements of an array.</p>
<pre><code>{{#each articles}}
</code></pre>
<p>starts a loop on the elements of the array in the <code>articles</code> key.
The loop ends when we encounter</p>
<pre><code>{{/each}}
</code></pre>
<p>Inside the loop we can use the keys of the objects that are the elements of the <code>articles</code> array.</p>
<p>This makes the template much clearer than what we had in the HTML concatenation earlier.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Ajax request for JSON data with vanilla JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-03-31T16:00:01Z</updated>
    <pubDate>2015-03-31T16:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/ajax-request-for-json-data" />
    <id>https://code-maven.com/ajax-request-for-json-data</id>
    <content type="html"><![CDATA[<p>One of the cornerstones of modern web application is the behind-the-scenes, asynchronous data communication between
the server and the JavaScript code running in the browsers. While in Ajax, the X stands for XML, in reality many applications
send data formatted as JSON. In most cases it is more convenient than sending XML.</p>
<p>In order to make this example simple, I've created a JSON file on the server and we will ask the server for that file.
In more real world situation, the server would generate this JSON file on-demand based on information in its database,
but currently we are only interested in the part that is in the browser.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/data.json">examples/js/data.json</a></strong></p>
<pre><code class="language-json">{
   &quot;title&quot; : &quot;Code Maven&quot;,
   &quot;description&quot; : &quot;Coding is fun!&quot;,
   &quot;articles&quot; : [
       {
          &quot;title&quot; : &quot;Handling user events in JavaScript&quot;,
          &quot;url&quot;   : &quot;http://code-maven.com/handling-events-in-javascript&quot;
       },
       {
          &quot;title&quot; : &quot;On-load counter with JavaScript and local storage&quot;,
          &quot;url&quot;   : &quot;http://code-maven.com/on-load-counter-with-javascript-and-local-storage&quot;
       }
   ]
}

</code></pre>
<p>We have an HTML page, with an <code>h1</code> element we are going to fill with the value of the &quot;title&quot; key, and we also
have a <code>div</code> element for which we'll construct a whole HTML snippet.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/ajax.html">examples/js/ajax.html</a></strong></p>
<pre><code class="language-html">&lt;h1 id=&quot;title&quot;&gt;&lt;/h1&gt;
&lt;hr&gt;
&lt;div id=&quot;text&quot;&gt;&lt;/div&gt;

&lt;script src=&quot;ajax.js&quot;&gt;&lt;/script&gt;

</code></pre>
<p><a href="examples/js/ajax.html">view</a></p>
<p>The JavaScript code looks like this:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/ajax.js">examples/js/ajax.js</a></strong></p>
<pre><code class="language-js">function ajax_get(url, callback) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 &amp;&amp; xmlhttp.status == 200) {
            console.log('responseText:' + xmlhttp.responseText);
            try {
                var data = JSON.parse(xmlhttp.responseText);
            } catch(err) {
                console.log(err.message + &quot; in &quot; + xmlhttp.responseText);
                return;
            }
            callback(data);
        }
    };

    xmlhttp.open(&quot;GET&quot;, url, true);
    xmlhttp.send();
}

ajax_get('/try/examples/js/data.json', function(data) {
    document.getElementById(&quot;title&quot;).innerHTML = data[&quot;title&quot;];

    var html = &quot;&lt;h2&gt;&quot; + data[&quot;title&quot;] + &quot;&lt;/h2&gt;&quot;;
    html += &quot;&lt;h3&gt;&quot; + data[&quot;description&quot;] + &quot;&lt;/h3&gt;&quot;;
    html += &quot;&lt;ul&gt;&quot;;
       for (var i=0; i &lt; data[&quot;articles&quot;].length; i++) {
           html += '&lt;li&gt;&lt;a href=&quot;' + data[&quot;articles&quot;][i][&quot;url&quot;] + '&quot;&gt;' + data[&quot;articles&quot;][i][&quot;title&quot;] + &quot;&lt;/a&gt;&lt;/li&gt;&quot;;
       }
    html += &quot;&lt;/ul&gt;&quot;;
    document.getElementById(&quot;text&quot;).innerHTML = html;
});



</code></pre>
<p>All the code that is relevant to sending the asynchronous request was placed in a function called <code>ajax_get</code>.
This function expects two parameters. The first one is the URL we request. It can be a URL like <code>http://somesite.com/some/page</code>,
or it can be without the hostname just <code>/some/page</code> if we want to send the request to the same server where our JavaScript
code came from. In either case we can also send parameters by attaching them after the requested URL. Something like this:
<code>http://somesite.com/some/page?fname=Foo&amp;lname=Bar</code></p>
<p>The second parameter is expected to be a function which will be called when the response arrives from the server.</p>
<p>In our example we expect the response to be a valid JSON string.</p>
<p>Just to quickly go over the function: First we create an <code>XMLHttpRequest()</code> object. Then we attach a function
call to <code>onreadystatechange</code> attribute of the object. This function will be executed when the successful response arrives.
Then we call <code>open</code>, this is where we use the <code>url</code> and finally we <code>send</code> the request. This will finish our function
call and our application can go on doing its business until...</p>
<p>Until the server responds, at which point the function that was attached to <code>onreadystatechange</code> will be called.
Inside the function we check if this was really a successful request and then we look at the <code>responseText</code> attribute
that will contain the response as plain text. In this example we paste it to the console, just to make it easier to see
what do we get back. Then there is the <code>try-catch</code> block wrapping the call to <code>JSON.parse</code>.
This can save you quite some time if and when the server returns a string that is not properly formatted JSON string.
(For example an extra or a missing comma.) Then comes the interesting part <code>callback(data)</code> we call the function
<code>ajax_get</code> got as the second parameter and we pass the data to it already as a JavaScript object.</p>
<p>That's about the implementation of the <code>ajax_get</code> function, but how should we use it?</p>
<pre><code class="language-javascript">ajax_get('/try/examples/js/data.json', function(data) {
    document.getElementById(&quot;title&quot;).innerHTML = data[&quot;title&quot;];
});
</code></pre>
<p>We call the <code>ajax_get</code>, pass to it a url (in this example relative to the current server), and we also pass
a function that accepts a single variable. This is the callback function and the parameter will have the
data we received from the server. Then we can access attributes of this JavaScript object as we access any other JavaScript object
and we set the <code>innerHTML</code> of the HTML element with the id &quot;title&quot;.</p>
<p>That's how we can use the ajax request.</p>
<h2 class="title is-4">Building up the HTML</h2>
<p>In our example code we have a longer function though. After setting the title element, there is a demonstration on how
to create and html string from various parts of this data object. This is not really necessary for this example, but
I am going to use this opportunity to show a more convincing reason to use Handlebars that I had in the
<a href="/introduction-to-handlebars-javascript-templating-system">introduction to Handlebars</a></p>
<h2 class="title is-4">Comments</h2>
<p>Awesome</p>
<hr />
<p>how do you fetch and render the entire json file content instead of fetching individual element values? i was thinking about something like below...</p>
<p>document.getElementById(&quot;TEXTAREA_ID&quot;).innerHTML = <code>${data}</code>;</p>
<h2 class="title is-4">but it doesnt work...</h2>
<p>Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at <a href="https://www.google.fr/">https://www.google.fr/</a>. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).</p>
<hr />
<p>why xmlhttp.readyState == 4, and xmlhttp.status == 200 ?</p>
<hr />
<p>Good Question, see here <a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState">https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState</a></p>
<p>This should give you an idea why.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Introduction to Handlebars, the JavaScript templating system</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-03-31T12:50:01Z</updated>
    <pubDate>2015-03-31T12:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/introduction-to-handlebars-javascript-templating-system" />
    <id>https://code-maven.com/introduction-to-handlebars-javascript-templating-system</id>
    <content type="html"><![CDATA[<p>In the article about <a href="/input-output-in-plain-javascript">input and output with JavaScript</a>
you could see the the problem of creating HTML snippet on-the-fly to be included in the rest of the page.</p>
<p><a href="http://handlebarsjs.com/">Handlebars</a> is a templating system for JavaScript that provides
help to reduce anxiety over the creation of such pages.</p>
<p>Let's convert the plain JavaScript example to use Handlebars.</p>
<h2 class="title is-4">Pure JavaScript version</h2>
<p>This is the example from the <a href="/input-output-in-plain-javascript">input and output with JavaScript</a> article:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/pure_js_greating.html">examples/js/pure_js_greating.html</a></strong></p>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Hello World&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

First name: &lt;input id=&quot;first_name&quot;&gt;
Last name: &lt;input id=&quot;last_name&quot;&gt;
&lt;button id=&quot;say&quot;&gt;Say hi!&lt;/button&gt;

&lt;hr&gt;
&lt;div id=&quot;result&quot;&gt;&lt;/div&gt;

&lt;script&gt;
function say_hi() {
    var fname = document.getElementById('first_name').value;
    var lname = document.getElementById('last_name').value;

    var html = 'Hello &lt;b&gt;' + fname + '&lt;/b&gt; ' + lname;

    document.getElementById('result').innerHTML = html;
}

document.getElementById('say').addEventListener('click', say_hi);
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;


</code></pre>
<p><a href="examples/js/pure_js_greating.html">view</a></p>
<h2 class="title is-4">Switching to Handlebars</h2>
<p>This is the solution using Handlebars:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/handlebars_greating.html">examples/js/handlebars_greating.html</a></strong></p>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Hello World&lt;/title&gt;

  &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.min.js&quot;&gt;&lt;/script&gt;

  &lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
    Hello &lt;b&gt;{{first_name}}&lt;/b&gt; {{last_name}}
  &lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;

First name: &lt;input id=&quot;first_name&quot;&gt;
Last name: &lt;input id=&quot;last_name&quot;&gt;
&lt;button id=&quot;say&quot;&gt;Say hi!&lt;/button&gt;

&lt;hr&gt;
&lt;div id=&quot;result&quot;&gt;&lt;/div&gt;

&lt;script&gt;
function say_hi() {
    var fname = document.getElementById('first_name').value;
    var lname = document.getElementById('last_name').value;

    var source   = document.getElementById('text-template').innerHTML;
    var template = Handlebars.compile(source);
    var context = {first_name: fname, last_name: lname};
    var html    = template(context);

    document.getElementById('result').innerHTML = html;
}

document.getElementById('say').addEventListener('click', say_hi);
&lt;/script&gt;


&lt;/body&gt;
&lt;/html&gt;

</code></pre>
<p><a href="examples/js/handlebars_greating.html">view</a></p>
<p>In order to use Handlebars, first we need to load the Handlebars library. We can use it directly from
<a href="https://cdnjs.com/">CDN JS</a>:</p>
<pre><code>&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/3.0.1/handlebars.min.js&quot;&gt;&lt;/script&gt;
</code></pre>
<p>or we could download the same file to our server and load it from there.</p>
<p>We create an HTML snippet and put place holders in double curly braces in it:</p>
<pre><code>Hello &lt;b&gt;{{first_name}}&lt;/b&gt; {{last_name}}
</code></pre>
<p>We can deliver the template to the HTML in several ways, but one of the recommended ways is to embed
it in the <code>head</code> of the HTML file withing <code>script</code> tags with a unique <code>id</code>.
This way we can easily include several templates and it is much clearer how we would like the final HTML
to look like.</p>
<pre><code>&lt;script id=&quot;text-template&quot; type=&quot;text/x-handlebars-template&quot;&gt;
   Hello &lt;b&gt;{{first_name}}&lt;/b&gt; {{last_name}}
&lt;/script&gt;
</code></pre>
<p>Then we arrive to JavaScript part. In the JavaScript code we replaced the single line
combining the content of <code>fname</code>, <code>lname</code> with some HTML that looked like this:</p>
<pre><code>var html = 'Hello &lt;b&gt;' + fname + '&lt;/b&gt; ' + lname;
</code></pre>
<p>with new code:</p>
<pre><code>var source   = document.getElementById('text-template').innerHTML;
var template = Handlebars.compile(source);
var context = {first_name: fname, last_name: lname};
var html    = template(context);
</code></pre>
<p>I know, it looks more complex than we had earlier, and indeed in such a simple case
when we only need to embed the content of two varaibles in a simple HTML snippet,
this might be overengineering, but as your application grows you'll see that
the complexity of the pure JavaScript version would increase while for Handlebar,
basically that's the whole complexity.</p>
<p>Let's go over those 4 lines.</p>
<p>In the first line we access the <code>script</code> element with the id <code>text-template</code> where we put the template and using <code>innerHTML</code>
we copy its content to the variable called <code>source</code>.</p>
<p>In the second line we compile this template and create a Handlebars object using the <code>Handlebars.compile()</code> method. Actually
what the <code>compile</code> method returns is a function that we'll call later.</p>
<p>In the third line we create a mapping from keys that will match the place holders to the values that will replace the place holders.
These are the values we got from the <code>input</code> elements. This is just a plain JavaScript object. Nothing special.
(You'd call it a hash, associated array or dictionary depending on which other language you are familiar with.)</p>
<p>Finally we ask the template to replace the place holders by the respective values and assign the generated string to the variable <code>html</code></p>
<p>After that we can go back to what we also had in the plain JavaScript code and embed the new HTML in the existing DOM using</p>
<pre><code>document.getElementById('result').innerHTML = html;
</code></pre>
<p>That's it about the basics of Handlebars. If you'd like to learn more, you can check out the
documentation on the web site of <a href="http://handlebarsjs.com/">Handlebars</a></p>
<h2 class="title is-4">Comments</h2>
<p>Hello!! Your article is excellent it has provided me with good information. I need your help in solving one problem I am using handlebarjs for templating. I have three templates in one single file and a singal json object (ie array of objects within array of objects) depending on the condition in one of my helper function i am trying to nest a template into parent template. I can share the piece of code with you.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Input Output in plain JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-03-31T09:30:01Z</updated>
    <pubDate>2015-03-31T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/input-output-in-plain-javascript" />
    <id>https://code-maven.com/input-output-in-plain-javascript</id>
    <content type="html"><![CDATA[<p>In the first article we saw <a href="/javascript-hello-world-change-the-dom">how to change the DOM to display something</a>,
and then we saw how to <a href="/handling-events-in-javascript">handle user events</a>. This time we are going to see how to
get input from the user and combine that with the other two, to create a simple page that can great you.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/pure_js_greating.html">examples/js/pure_js_greating.html</a></strong></p>
<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Hello World&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

First name: &lt;input id=&quot;first_name&quot;&gt;
Last name: &lt;input id=&quot;last_name&quot;&gt;
&lt;button id=&quot;say&quot;&gt;Say hi!&lt;/button&gt;

&lt;hr&gt;
&lt;div id=&quot;result&quot;&gt;&lt;/div&gt;

&lt;script&gt;
function say_hi() {
    var fname = document.getElementById('first_name').value;
    var lname = document.getElementById('last_name').value;

    var html = 'Hello &lt;b&gt;' + fname + '&lt;/b&gt; ' + lname;

    document.getElementById('result').innerHTML = html;
}

document.getElementById('say').addEventListener('click', say_hi);
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;


</code></pre>
<p><a href="examples/js/pure_js_greating.html">view</a></p>
<p>In this example we have a bit more HTML than earlier. In addition to having a <code>button&lt;/h&gt;, and a </code>div<code>element where we'll show our results, we also have two</code>input` elements. Each one with its own ID.</p>
<p>If you click on the Try link, you'll see two input boxes and a button:</p>
<img src="/img/input_form.png" alt="Input form" />
<p>In the JavaScript code we have a function called <code>say_hi</code>. It used the <code>getElementById</code> we have already
seen to locate the DOM element representing the input element with the id <code>first_name</code>. The object returned
has a method <code>value</code> that will return the text the user has typed in that field.</p>
<p>We use this technique to retrieve the content of both <code>input</code> fields and assign their content to two variables:
<code>fname</code> and <code>lname</code>.</p>
<p>Then, using these variable we create an HTML snippet and assign it to a new variable called <code>html</code>.</p>
<p>Then we set the <code>innerHTML</code> attribute as <a href="/javascript-hello-world-change-the-dom">earlier</a> to show the
HTML we generated. The result might look like this:</p>
<img src="/img/input_form_and_output.png" alt="Input form and output" />
<h2 class="title is-4">Creating HTML is cumbersome</h2>
<p>Even in such a simple HTML we wanted to create we had to use <code>+</code> several time and the code is quite unreadable.
Imagine what would happen if we wanted to build a more complex application where we might want to build a list of items,
or even a table. Building the HTML on the fly and the inserting in the DOM would be quite nasty.</p>
<p>In the back-end systems written in Perl, Python or Ruby, people have encountered the same problem and the solution was
the creation of various templating engines. Basically a template would be an HTML snippet with some place holders
and then a function call that gets the HTML snippet (the template) as a parameter, and gets several key-value pairs.
The function then returns a new HTML snippet in which the place holders were replaced by the value of the appropriate key.</p>
<p>In a similar way, there are many templating system for JavaScript as well. We are going to look at
<a href="/introduction-to-handlebars-javascript-templating-system">HandlebarsJS, the JavaScript templating engine</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Handling user events in JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-03-29T16:50:01Z</updated>
    <pubDate>2015-03-29T16:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/handling-events-in-javascript" />
    <id>https://code-maven.com/handling-events-in-javascript</id>
    <content type="html"><![CDATA[<p>In the previous article we saw how can we <a href="/javascript-hello-world-change-the-dom">change the DOM</a>
and update the HTML page, but when should we do that? In the previous example the code updating the HTML
page ran immediately as it was loaded in the browser.</p>
<p>This time we would like to capture an event generated by the user - a click on a button - and we would like
to update the HTML page when that happens.</p>
<p>In JavaScript we can attach various, so called &quot;event listeners&quot; to every DOM element and we can even specify
to which event should the specific listener react to.</p>
<p>For this we can use the <code>addEventListener</code> method of a DOM element, that will get two parameters. The first one
is the name of the event, such as <code>click</code> or <code>keyup</code>, or <code>change</code>. The second one is a function.
(I might need to explain how can you pass a function as a parameter to another function.)</p>
<p>Here is the full expression:</p>
<p><code>document.getElementById('btn').addEventListener('click', clicked);</code></p>
<p>This means that when the browser detects a 'click' on the HTML element with the id 'btn', then it will execute the function called 'clicked'.</p>
<p>What does the 'clicked' function do?</p>
<p>It changes the DOM (the HTML) by inserting the text 'Hello World' in the element with the id 'display'. This operation was explained
in the article about <a href="/javascript-hello-world-change-the-dom">changing the DOM</a>.</p>
<p>Go ahead try the example by clicking on the <code>Try</code> link.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/event_listener.html">examples/js/event_listener.html</a></strong></p>
<pre><code class="language-html">&lt;button id=&quot;btn&quot;&gt;Click me&lt;/button&gt;

&lt;div id=&quot;display&quot;&gt;&lt;/div&gt;

&lt;script&gt;
function clicked() {
    document.getElementById('display').innerHTML = 'Hello World';
}

document.getElementById('btn').addEventListener('click', clicked);

&lt;/script&gt;


</code></pre>
<p><a href="examples/js/event_listener.html">view</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>JavaScript Hello World - changing the DOM with getElementById and innerHTML</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-03-29T14:02:01Z</updated>
    <pubDate>2015-03-29T14:02:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/javascript-hello-world-change-the-dom" />
    <id>https://code-maven.com/javascript-hello-world-change-the-dom</id>
    <content type="html"><![CDATA[<p>In the <a href="/introduction-to-javascript">introduction to JavaScript</a> we saw <code>document.write</code>
that will change the content of the web page the user sees, but it has very little control over the location
where the it changed the HTML page.  More specifically it writes to the same place where it is executed
within the HTML page. That makes it very inflexible.</p>
<p>We can do better by fetching an object representing a DOM element and using the <code>innerHTML</code> on that DOM
element to changes its content.</p>
<p>First of all, the DOM - <a href="http://en.wikipedia.org/wiki/Document_Object_Model">Document Object Model</a>
is basically the representation of the HTML page by JavaScript objects. It is the heart of the interaction between
plain JavaScript and the HTML in the browser. When we used <code>document.write</code> in <a href="/introduction-to-javascript">introduction</a>
we changed the HTML, which also changed the DOM.</p>
<p>In this example we change the DOM, which will change the HTML that appears in the browser.</p>
<p>The advantage of this is that regardless the location of our JavaScript we can access and change
any part of the DOM and thus and part of the HTML. The only thing that is important regarding the relative
location of the HTML we want to change and the JavaScript that will change it is that the HTML already has to
be loaded and parsed by the browser when the JavaScript code tries to access it.</p>
<p>This can be achieved either by putting the JavaScript code after that HTML (or loading the JavaScript after the HTML),
or if the JavaScript is loaded before the HTML, then somehow telling it to wait till the page is loaded.
There are several solutions for the latter, but for simplicity we are going to use the former. We simply place
our JavaScript code after the HTML.</p>
<p>In order to be able to change a DOM object, first we need to fetch the object. There are plenty of methods to do that,
but probably the most simple one is the <code>getElementById</code> method of the <code>document</code> class.
In the next snippet the call <code>document.getElementById('display')</code> fetches the object representing the HTML
element that has the id <b>display</b>.</p>
<p>One of the attributes of this object is called <code>innerHTML</code>.
If we assign a value to it, that will change the content of the appropriate HTML element.</p>
<p>In this example you can see a simple <code>div</code> element (we could have used any element, but divs are sort of neutral
and that's why they are used usually) with an id <b>display</b>.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/set_innerhtml.html">examples/js/set_innerhtml.html</a></strong></p>
<pre><code class="language-html">&lt;div id=&quot;display&quot;&gt;&lt;/div&gt;

&lt;script&gt;
document.getElementById('display').innerHTML = 'Hello World';
&lt;/script&gt;


</code></pre>
<p><a href="examples/js/set_innerhtml.html">view</a></p>
<h2 class="title is-4">Comments</h2>
<p>Putting the JavaScript code after the HTML is loaded does not always work. I ran into this after making a HTML, CSS, JavaScript app using PHP desktop.</p>
<p>For whatever reason, the HTML was not completely loaded and there was a need for a 400 millisecond delay before executing the JavaScript code to fill the DIV tags.</p>
<p>Just keep this in mind should you run into that scenario and your JavaScript can't find the HTML tags after the page is loaded.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>On-load counter with JavaScript and local storage</title>
    <summary type="html"><![CDATA[Simple Vanilla JavaScript example useing localStorage, getItem, setItem, getElementById, addEventListener, innerHTML to create a counter.]]></summary>
    <updated>2015-03-28T09:20:01Z</updated>
    <pubDate>2015-03-28T09:20:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/on-load-counter-with-javascript-and-local-storage" />
    <id>https://code-maven.com/on-load-counter-with-javascript-and-local-storage</id>
    <content type="html"><![CDATA[<p>As part of the big <a href="/counter">Counter Example</a> project,
in this article we'll see how to create a simple load-counter
with plain JavaScript utilizing the Local Storage introduced in HTML5.</p>
<p>In HTML5 <b>localStorage</b> is a term used for a flat key-value database inside the browser (or more specifically on
the hard-disk of the computer, table, or smartphone where the browser runs) that can be accessed using JavaScript.</p>
<p>This is a very simple example showing a counter that will increment by one every time you reload a a page.
As the counter is saved in your own browser and it is associated with the site you visited, this number will be
independent of what other people see, or what you'll see if you visit the same page using a different device
or even a different browser on the same devide.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/counter_on_load.html">examples/js/counter_on_load.html</a></strong></p>
<pre><code class="language-html">&lt;div id=&quot;counter&quot;&gt;&lt;/div&gt;

&lt;script&gt;
var n = localStorage.getItem('on_load_counter');

if (n === null) {
    n = 0;
}

n++;

localStorage.setItem(&quot;on_load_counter&quot;, n);

document.getElementById('counter').innerHTML = n;
&lt;/script&gt;


</code></pre>
<p><a href="examples/js/counter_on_load.html">view</a></p>
<p>Click on the <a href="/try/examples/js/counter_on_load.html" target="_new">Try!</a> link to see how it works in a separate window.</p>
<p>The example contains a single HTML <code>div</code> element that has a unique ID <code>counter</code> and a piece of JavaScript.
The <code>getItem</code> method of the <code>localStorage</code> class will fetch the current value of the given key (in this case 'on_load_counter')
and assign it to <code>n</code>.</p>
<p>The first time we load the page there won't be such key, and thus <code>getItem</code> will return a <code>null</code> value.</p>
<p>Next we check if the retreived value was indeed <code>null</code> and if it was, we initialize our counter to 0.</p>
<p>Then comes the incrementing of the counter <code>n++;</code>.</p>
<p>Then using the <code>setItem</code> method of <code>localStorage</code> we set the value of the 'on_load_counter' key to whatever is in <code>n</code>.</p>
<p>The final step is displaying the new number on the HTML page.  <code>document.getElementById('counter')</code> provides access to HTML
element with the id <code>counter</code> and then we set its content to be the value of n.</p>
<h2 class="title is-4">Reset the counter</h2>
<p>In the next example we are going to add a button to reset th counter, but first we'd like to observe something else.
If you click on the <a href="/try/examples/js/counter_on_load_reset.html" target="_new">Try!</a> link you'll open this second example
which has a different URL, but resides on the same site. You'll see the counter on this page starts from the number where
you left the first page. Actually if you click on the two pages alternately, you'll see that they are actually mapped
to a single counter, to a single storage location.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/counter_on_load_reset.html">examples/js/counter_on_load_reset.html</a></strong></p>
<pre><code class="language-html">&lt;div id=&quot;counter&quot;&gt;&lt;/div&gt;
&lt;button id=&quot;reset&quot;&gt;Reset&lt;/button&gt;

&lt;script&gt;
var n = localStorage.getItem('on_load_counter');

if (n === null) {
    n = 0;
}

n++;

localStorage.setItem(&quot;on_load_counter&quot;, n);

document.getElementById('counter').innerHTML = n;


function reset_counter() {
    localStorage.removeItem('on_load_counter');
}

document.getElementById('reset').addEventListener('click', reset_counter);
&lt;/script&gt;


</code></pre>
<p><a href="examples/js/counter_on_load_reset.html">view</a></p>
<p>In this example we added another HTML element, a <code>button</code> with an ID of <code>reset</code>.
In the JavaScript code we added a function called <code>reset_counter</code> that, if called, will use the <code>removeItem</code> method
of <code>localStorage</code> to remove a key/value pair from the local storage.</p>
<p>In the last line we use <code>document.getElementById('reset')</code> again to identify the HTML button, and then we attach an
event listener using the <code>addEventListener</code> method. This will make JavaScript execute the <code>reset_counter</code> function
every time the given HTML element (the 'reset' button) is 'click'-ed.</p>
<p>If you open this example using the <b>Try!</b> link, you'll see the counter and the button. When you click on the button it will
seem that nothing happened. That's because we have not updated the page after reseting the counter. The only thing that really
happened is that we removed the key-value pair from the local storage.</p>
<p>If you'd like to play with this example, then add some code that will autmatically display the new value of the counter, after clicking
on the reset button.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG Linear Gradient</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-03-02T17:31:01Z</updated>
    <pubDate>2015-03-02T17:31:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-linear-gradient" />
    <id>https://code-maven.com/svg-linear-gradient</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> adding linear gradient to a rectangle in SVG.</p>
<p>Gradient is when in an area the color gradually changes from one color to another color. In this article we'll look
at <b>linear gradient</b> when the color changes along a straight line. We are going to fill a rectangle shape using
the changing color.</p>
<script src="/try/examples/js/svg.min.js"></script>
<p>Normally, as you can see in the <a href="/svg-rectangle">basic rectangle examples</a> we can call the <code>fill</code> method,
pass an <a href="http://en.wikipedia.org/wiki/RGB_color_model">RGB</a> value to it and have it filled by that color.
<code>$shape-&gt;fill('#F0F0F0')</code>. Alternatively we could call the <code>attr</code> method: <code>$shape-&gt;attr({ 'fill' : '#F0F0F0' })</code>.</p>
<p>Instead of a fix color, we can pass a gradient to the <code>fill</code> method, and let SVG fill the shape with that changing color.</p>
<h2 class="title is-4">White to Black top to bottom</h2>
<p>In the first example we create a linear gradient using the <code>gradient</code> method. The first argument is just the string <code>'linear'</code>,
the second argument is a function setting the color values at various points along a linear line going from 0 to 1. We can supply several
colorts in that range, but we should supply at least the two end-points. If we only supply one color, SVG will use that single color
to fill the whole shape. No gradient will be used. Getting back to our first example: we set the color to be '#FFF' (which is just a short-hand for
'#FFFFFF') which is <b>white</b> at the begining of the 0-1 line. We also set the color to be '#000' (which is a short-hand for '#000000')
which <b>black</b> at the end of the 0-1 line. The whole construct is assigned to an arbitrary variable we called <code>gr</code>.</p>
<p>We can then map the 0-1 line onto the corners of the rectangle.  The <code>from</code> method connects the beginning of the 0-1 line to the coordinates (0, 0)
of the rectangle that mark the top left corner. The <code>to</code> method connects the end of the 0-1 line to the coordinates (0, 1) of the rectangle
that marks the bottom left corner.  (Actualy in both the <code>from</code> and <code>to</code> methods the first number sets the horizontal side 0 being left 1 being right;
the second coordinate sets the vertical side 0 being top, 1 being bottom.)</p>
<p>Once we configured our gradient, we can create a rectangle and use the variable <code>gr</code> that holds the gradient as the value of the <code>fill</code> attribute.</p>
<p>The <code>stroke</code> method is used to create a line around the rectangle. This helps us to see the edge of the rectangle.</p>
<div id="rect_20"></div>
<script src="/try/examples/js/svg_rectangle_20.js"></script>
**[examples/js/svg_rectangle_20.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_20.js)**
```js
function rect_20() {
    var draw = SVG('rect_20');
    draw.size(200, 100);
<pre><code>var gr = draw.gradient('linear', function(stop) {
    stop.at(0, '#FFF');
    stop.at(1, '#000');
});
gr.from(0, 0).to(0, 1);
var rect = draw.rect(200, 100).attr({ fill: gr }).stroke({ width: 1 });
</code></pre>
<p>}
rect_20();</p>
<pre><code>

## White to Black corner to corner

In the next example I've changed two things. One is that we use the `fill(gr)` instead of `attr({ 'fill' : gr })`. This change
does not have any impact on the result, I made it only to show that we can use either syntax.

The real change is that the gradient goes now `from(0, 0)` (left, top), `to(1, 1)` (right, bottom). If you look at the
rectangle you'll see that the top left corner is white and the bottom right corner is black. Basically the 0-1 line of the gradiant was mapped to these two corners.

&lt;div id=&quot;rect_21&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;/try/examples/js/svg_rectangle_21.js&quot;&gt;&lt;/script&gt;
**[examples/js/svg_rectangle_21.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_21.js)**
```js
function rect_21() {
    var draw = SVG('rect_21');
    draw.size(200, 100);

    var gr = draw.gradient('linear', function(stop) {
        stop.at(0, '#FFF');
        stop.at(1, '#000');
    });
    gr.from(0, 0).to(1, 1);
    var rect = draw.rect(200, 100).fill(gr).stroke({ width: 1 });
}
rect_21();

</code></pre>
<h2 class="title is-4">3 stop gradient</h2>
<p>In this example we got back to the horizontal lines as we had it in the first example, but instead of 2 stop points we now have 3. The two end-points are both
'black', but at the 0.25 of the 0-1 line, meaning at one quarter from the top of the rectangle, we have a white horizontal line. The color changes from black
to white in the top quarter of the rectangle and then to black again in the lower 3/4 of the rectangle.</p>
<div id="rect_22"></div>
<script src="/try/examples/js/svg_rectangle_22.js"></script>
**[examples/js/svg_rectangle_22.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_22.js)**
```js
function rect_22() {
    var draw = SVG('rect_22');
    draw.size(200, 100);
<pre><code>var gr = draw.gradient('linear', function(stop) {
    stop.at(0, '#000');
    stop.at(0.25, '#FFF');
    stop.at(1, '#000');
});
gr.from(0, 0).to(0, 1);
var rect = draw.rect(200, 100).fill(gr).stroke({ width: 1 });
</code></pre>
<p>}
rect_22();</p>
<pre><code>


## Blue gradient

In the next example we use a much smaller change in the gradient. This change in blue is pleasant to the eye.
Starting with a lighter blue on the left side it becomes dark on the right hand side.

&lt;div id=&quot;rect_27&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;/try/examples/js/svg_rectangle_27.js&quot;&gt;&lt;/script&gt;
**[examples/js/svg_rectangle_27.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_27.js)**
```js
function rect_27() {
    var draw = SVG('rect_27');
    draw.size(200, 100);

    var gr = draw.gradient('linear', function(stop) {
        stop.at(0, '#1021A3');
        stop.at(1, '#A0A8EB');
    });
    gr.from(1, 0).to(0, 0);
    var rect = draw.rect(200, 100).fill(gr).stroke({ width: 1 });
}
rect_27();




</code></pre>
<h2 class="title is-4">4 directions</h2>
<p>In the next 4 example you can see that the gradient can go between any two colors, in these cases the color changes
from '#FF0000' which is red, to '#0000FF' which is blue.</p>
<p>The 4 examples differ in their direction. (The <code>from</code> is always (0, 0) but the <code>to</code> has 4 different values.)
Notable might be the 4th example in which the value of <code>to</code> is the same as the value of <code>from</code> which causes
the whole rectangle to be a single color. Not very useful.</p>
<p><span id="rect_23"></span>
<span id="rect_24"></span>
<span id="rect_25"></span>
<span id="rect_26"></span></p>
<script src="/try/examples/js/svg_rectangle_23.js"></script>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_23.js">examples/js/svg_rectangle_23.js</a></strong></p>
<pre><code class="language-js">function rect_23() {
    var draw = SVG('rect_23');
    draw.size(200, 100);

    var gr = draw.gradient('linear', function(stop) {
        stop.at(0, '#FF0000');
        stop.at(1, '#0000FF');
    });
    gr.from(0, 0).to(0, 1);
    var rect = draw.rect(200, 100).fill(gr).stroke({ width: 1 });
}
rect_23();



</code></pre>
<script src="/try/examples/js/svg_rectangle_24.js"></script>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_24.js">examples/js/svg_rectangle_24.js</a></strong></p>
<pre><code class="language-js">function rect_24() {
    var draw = SVG('rect_24');
    draw.size(200, 100);

    var gr = draw.gradient('linear', function(stop) {
        stop.at(0, '#FF0000');
        stop.at(1, '#0000FF');
    });
    gr.from(0, 0).to(1, 1);
    var rect = draw.rect(200, 100).fill(gr).stroke({ width: 1 });
}
rect_24();



</code></pre>
<script src="/try/examples/js/svg_rectangle_25.js"></script>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_25.js">examples/js/svg_rectangle_25.js</a></strong></p>
<pre><code class="language-js">function rect_25() {
    var draw = SVG('rect_25');
    draw.size(200, 100);

    var gr = draw.gradient('linear', function(stop) {
        stop.at(0, '#FF0000');
        stop.at(1, '#0000FF');
    });
    gr.from(0, 0).to(1, 0);
    var rect = draw.rect(200, 100).fill(gr).stroke({ width: 1 });
}
rect_25();



</code></pre>
<script src="/try/examples/js/svg_rectangle_26.js"></script>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_26.js">examples/js/svg_rectangle_26.js</a></strong></p>
<pre><code class="language-js">function rect_26() {
    var draw = SVG('rect_26');
    draw.size(200, 100);

    var gr = draw.gradient('linear', function(stop) {
        stop.at(0, '#FF0000');
        stop.at(1, '#0000FF');
    });
    gr.from(0, 0).to(0, 0);
    var rect = draw.rect(200, 100).fill(gr).stroke({ width: 1 });
}
rect_26();




</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG Polygon</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-26T22:43:01Z</updated>
    <pubDate>2015-02-26T22:43:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-polygon" />
    <id>https://code-maven.com/svg-polygon</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing a Polygon in SVG.</p>
<script src="/try/examples/js/svg.min.js"></script>
<div id="polygon_1"></div>
<script src="/try/examples/js/svg_polygon_1.js"></script>
**[examples/js/svg_polygon_1.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_polygon_1.js)**
```js
function draw_polygon() {
    var draw = SVG('polygon_1');
    var width = 200;
    var height = 200;
    draw.size(width, height);
    var background = draw.rect(width, height).attr({ fill: '#FFF' }).stroke({ width: 1 });
<pre><code>var poly = draw.polygon([ [20, 10], [50, 20], [130, 100], [70, 140] ]);
poly.attr({ 'fill' : '#456789' });
</code></pre>
<p>}
draw_polygon();</p>
<pre><code>

A polygon is very similar to a [Polyline](/svg-polyline), but it is a closed
shape. The last point in the list of points is connected back to the first point.

In this example we provided 4 points and got some strange shape.

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG Polyline</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-25T18:43:01Z</updated>
    <pubDate>2015-02-25T18:43:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-polyline" />
    <id>https://code-maven.com/svg-polyline</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing a Polyline in SVG.</p>
<script src="/try/examples/js/svg.min.js"></script>
<div id="polyline_1"></div>
<script src="/try/examples/js/svg_polyline.js"></script>
**[examples/js/svg_polyline.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_polyline.js)**
```js
function draw_polyline() {
    var draw = SVG('polyline_1');
    draw.size(200, 200);
    var p = draw.polyline([
		[10,10],
		[190,10],
		[190,190],
		[20,190],
		[20,20],
		[180,20],
		[180,180],
		[30, 180]
	]);
	p.fill('none').attr({
        'stroke'       : '#FF0000',
        'stroke-width' : '3px'
    });
}
<p>draw_polyline();</p>
<pre><code>

Note, typicall a polyline defines an open shape and thus it should not be filled by any color.
If I understand it correctly the SVG.js library automatically uses black fill for every shape,
including polylines. Therefore if we want our polyline to be not filled, we need to manually set
the `fill('none')`.

There are two parameter formats for a polyline. The one that seems so be a lot more useful is
the format you see in the solution. In this case we pass an array of two-element arrays.
Each one of the two-element arrays is a point in the sapce `[x, y]` that will be connected.

In the other format we pass a string in which the `x,y` pairs are separated by a space.
In this case the `x,y` pair should have no spaces around the comma.

So we pass either of the following:

</code></pre>
<p>[ [x1,y1],  [x2,y2], [x3, y3], ... ]
'x1,y1 x2,y2 x3,y3 ...'</p>
<pre><code>
but this would be incorrect:

</code></pre>
<p>x1, y1 ...</p>
<pre><code>

## A polyline of a snail

in which the points are calculated by a function.

&lt;div id=&quot;polyline_snail&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;/try/examples/js/svg_polyline_snail.js&quot;&gt;&lt;/script&gt;
**[examples/js/svg_polyline_snail.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_polyline_snail.js)**
```js
function draw_polyline_snail() {
    var draw = SVG('polyline_snail');
    draw.size(200, 200);
	var s = new Array;
	var step = 180;
	var delta = 10;
	var x = 10;
	var y = 10;
	s.push([x, y]);

	while (Math.abs(step) &gt; 10) {
		x += step;
		s.push([x, y]);
		y += step;
		s.push([x, y]);
		step -= delta;
		step *= -1;
		delta *= -1;
	}

    var p = draw.polyline(s);
	p.fill('none').attr({
        'stroke'       : '#00FF00',
        'stroke-width' : '3px'
    });
}

draw_polyline_snail();



</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG Line</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-22T18:43:01Z</updated>
    <pubDate>2015-02-22T18:43:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-line" />
    <id>https://code-maven.com/svg-line</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing a line in SVG.</p>
<script src="/try/examples/js/svg.min.js"></script>
<div id="line_1"></div>
<script src="/try/examples/js/svg_line.js"></script>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_line.js">examples/js/svg_line.js</a></strong></p>
<pre><code class="language-js">function draw_line() {
    var draw = SVG('line_1');
    draw.size(200, 100);
    draw.line(0, 0, 100, 70).attr({
        'stroke'       : '#FF0000',
        'stroke-width' : '3px'
    });
}

draw_line();

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG Ellipse</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-22T18:33:01Z</updated>
    <pubDate>2015-02-22T18:33:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-ellipse" />
    <id>https://code-maven.com/svg-ellipse</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing an ellipse in SVG.</p>
<script src="/try/examples/js/svg.min.js"></script>
<div id="ellipse_1"></div>
<script src="/try/examples/js/svg_ellipse.js"></script>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_ellipse.js">examples/js/svg_ellipse.js</a></strong></p>
<pre><code class="language-js">function ellipse() {
    var draw = SVG('ellipse_1');
    draw.size(200, 100);
    var ellipse = draw.ellipse(140, 70).attr({
        'fill'         : '#32AD4F',
        'stroke'       : '#723891',
        'stroke-width' : '3px'
    });
    ellipse.dx(5).dy(5);
}
ellipse();



</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Flag of Greenland in SVG</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-19T17:34:01Z</updated>
    <pubDate>2015-02-19T17:34:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-flag-of-greenland" />
    <id>https://code-maven.com/svg-flag-of-greenland</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing the flag of Greenland in SVG.</p>
<script src="/try/examples/js/svg.min.js"></script>
<p>According to the <a href="http://en.wikipedia.org/wiki/Flag_of_Greenland">Wikipedia</a> the flag of
Greenland is from two colors: white and red (PMS 186C). The size is 18:12 parts. The disk is 8 parts
in diameter and its center is 7 parts from one side.</p>
<div id="flag_of_greenland"></div>
<script src="/try/examples/js/svg_flag_of_greenland.js"></script>
**[examples/js/svg_flag_of_greenland.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_flag_of_greenland.js)**
```js
function flag_of_greenland() {
    var draw = SVG('flag_of_greenland');
    var width = 300;
    var height = 200;
    draw.size(width+2, height+2);
    var background = draw.rect(width+2, height+2).attr({ fill: '#FFF' }).stroke({ width: 1 }); //.opacity(0);
<pre><code>var circle1 = draw.circle(8*height/12).cx(1+7*width/18).cy(1+height/2).fill('#FFF');
var circle2 = draw.circle(8*height/12).cx(1+7*width/18).cy(1+height/2).fill('#FFF');
var red = '#c8102e';
draw.rect(width, height/2).fill('#FFF').dx(1).dy(1);
draw.rect(width, height/2).fill(red).dy(height/2).dx(1).dy(1);
draw.rect(width, height).maskWith(circle1).fill(red);
draw.rect(width, height).dy(height/2).maskWith(circle2).fill('#FFF');
</code></pre>
<p>}</p>
<p>flag_of_greenland();</p>
<pre><code>

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Flag of Switzerland in SVG</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-15T14:50:01Z</updated>
    <pubDate>2015-02-15T14:50:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-flag-of-switzerland" />
    <id>https://code-maven.com/svg-flag-of-switzerland</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing the Swiss flag in SVG.</p>
<h3 class="title is-5">Flag of Switzerland</h3>
<script src="/try/examples/js/svg.min.js"></script>
<p>According to the <a href="http://en.wikipedia.org/wiki/Flag_of_Switzerland">Wikipedia</a> entry,
to the <a href="http://commons.wikimedia.org/wiki/File:Flag_of_Switzerland.svg">Wikimedia svg</a>
example and to the
<a href="http://www.bk.admin.ch/themen/02268/02385/index.html?lang=de">CD Bund V7.0</a>
the red colour of the flags is #FF0000, the width of the
middle part of the cross is 1/5 of the full width, the width of the sides is 1/5 of the full width + 1/6 of the middle width.
Which seems to be 0.2 + 0.2 / 6 = 1.4/6 of the full width.</p>
<p>The total width (or hight) of the cross =  2* 1.4/6+ 1/5  = 20 / 30 = 2/3 of the total width.</p>
<p>The both start at (total width - width of cross)/2 = 1/6 width.</p>
<div id="flag_of_switzerland"></div>
<script src="/try/examples/js/svg_flag_of_switzerland.js"></script>
**[examples/js/svg_flag_of_switzerland.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_flag_of_switzerland.js)**
```js
function flag_of_switzerland() {
    var draw = SVG('flag_of_switzerland');
    var width = 150;
    draw.size(width, width);
    var red   = draw.rect(width, width).fill({ color: '#FF0000' });
<pre><code>var horizontal = draw.rect(2*width/3, width/5).dx(width/6).dy(2*width/5);
horizontal.fill({ color: '#FFFFFF' });
var vertical = draw.rect(width/5, 2*width/3).dx(2*width/5).dy(width/6);
vertical.fill({ color: '#FFFFFF' });
</code></pre>
<p>}</p>
<p>flag_of_switzerland();</p>
<pre><code>

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Flag of Hungary in SVG</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-14T18:34:01Z</updated>
    <pubDate>2015-02-14T18:34:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-flag-of-hungary" />
    <id>https://code-maven.com/svg-flag-of-hungary</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing the Hungarian flag in SVG.</p>
<script src="/try/examples/js/svg.min.js"></script>
<p>Accoridng to the <a href="http://en.wikipedia.org/wiki/Flag_of_Hungary">Wikipedia</a> and
the <a href="http://commons.wikimedia.org/wiki/File:Flag_of_Hungary.svg">Wikimedia svg</a>,
the Hungarian flag has a 2:1 ratio and the 3 stripes have the following RGB color values:
The Red is #CD2A3E, the white is, well, it is white #FFFFFF, and the green is #436F4D.</p>
<div id="flag_of_hungary"></div>
<script src="/try/examples/js/svg_flag_of_hungary.js"></script>
**[examples/js/svg_flag_of_hungary.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_flag_of_hungary.js)**
```js
function flag_of_hungary() {
    var draw = SVG('flag_of_hungary');
    var width = 120;
    var height = width/2;
    draw.size(width, height);
<pre><code>var red   = draw.rect(width, height/3).fill({ color: '#CE2939' });
var white = draw.rect(width, height/3).fill({ color: '#FFFFFF' }).dy(height/3);
var green = draw.rect(width, height/3).fill({ color: '#477050' }).dy(2*height/3);
</code></pre>
<p>}
flag_of_hungary();</p>
<pre><code>

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG Circle</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-14T18:33:01Z</updated>
    <pubDate>2015-02-14T18:33:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-circle" />
    <id>https://code-maven.com/svg-circle</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing a circle in SVG.</p>
<script src="/try/examples/js/svg.min.js"></script>
<div id="circle_1"></div>
<script src="/try/examples/js/svg_circle.js"></script>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_circle.js">examples/js/svg_circle.js</a></strong></p>
<pre><code class="language-js">function draw_circle() {
    var draw = SVG('circle_1');
    draw.size(120, 120);
    draw.circle(100).attr({ fill: '#32AD4F' });
}

draw_circle();

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG Square</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-14T18:32:01Z</updated>
    <pubDate>2015-02-14T18:32:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-square" />
    <id>https://code-maven.com/svg-square</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing square in SVG.</p>
<script src="/try/examples/js/svg.min.js"></script>
<p>Actually a square is just a <a href="/svg-rectangular">rectangular</a> where all the 4 sides are the same length,
but the color is much nicer here.</p>
<div id="square_1"></div>
<script src="/try/examples/js/svg_square.js"></script>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_square.js">examples/js/svg_square.js</a></strong></p>
<pre><code class="language-js">function draw_square() {
    var draw = SVG('square_1');
    draw.size(120, 120);
    var square = draw.rect(100, 100);
    square.attr({ fill: '#f06' });
}

draw_square()

</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG Rectangle</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-14T18:31:01Z</updated>
    <pubDate>2015-02-14T18:31:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-rectangle" />
    <id>https://code-maven.com/svg-rectangle</id>
    <content type="html"><![CDATA[<p>This is part of the <a href="/svg">SVG Tutorial and exercises</a> drawing a rectangle in SVG.</p>
<script src="/try/examples/js/svg.min.js"></script>
<p>The solution to the rectangle exercise as listed on <a href="/svg">SVG page</a>:</p>
<div id="blue_rectangle"></div>
<script src="/try/examples/js/svg_rectangle.js"></script>
**[examples/js/svg_rectangle.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle.js)**
```js
function draw_rectangle() {
    var draw = SVG('blue_rectangle');
    draw.size(200, 100);
    var rect = draw.rect(200, 100);
    rect.attr({ fill: '#00f' });
}
<p>draw_rectangle();</p>
<pre><code>


&lt;h2&gt;Drawing Rectangles&lt;/h3&gt;

In the next section we go over various attributes you can set on a rectangle. Many
of these are relevant to every other shape as well.

&lt;h3&gt;Default rectangle&lt;/h3&gt;

In this example we just create an SVG image and then create a rectangle of the same size.

&lt;div id=&quot;rect_1&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;/try/examples/js/svg_rectangle_1.js&quot;&gt;&lt;/script&gt;
**[examples/js/svg_rectangle_1.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_1.js)**
```js
function rect_1() {
    var img = SVG('rect_1');
    img.size(200, 100);             // width, height
    var rect = img.rect(200, 100);  // width, height
}
rect_1();

</code></pre>
<h3 class="title is-5">White rectangle</h3>
<div id="rect_2"></div>
<script src="/try/examples/js/svg_rectangle_2.js"></script>
**[examples/js/svg_rectangle_2.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_2.js)**
```js
function rect_2() {
    var img = SVG('rect_2');
    img.size(200, 100);
    var rect = img.rect(200, 100);
    rect.fill({ color: '#FFF' });
}
rect_2();
<pre><code>

Of course, on a white background it is hard to see the white rectangle...


&lt;h3&gt;Nice rectangle&lt;/h3&gt;

Let's give it some other color:

&lt;div id=&quot;rect_3&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;/try/examples/js/svg_rectangle_3.js&quot;&gt;&lt;/script&gt;
**[examples/js/svg_rectangle_3.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_3.js)**
```js
function rect_3() {
    var img = SVG('rect_3');
    img.size(200, 100);
    var rect = img.rect(200, 100);
    rect.fill({ color: '#F06' });
}
rect_3();

</code></pre>
<h3 class="title is-5">White rectangle with border</h3>
<p>Alternatively, we can have the background in white, but we can add a border. We use <code>stroke</code> for this:</p>
<div id="rect_4"></div>
<script src="/try/examples/js/svg_rectangle_4.js"></script>
**[examples/js/svg_rectangle_4.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_4.js)**
```js
function rect_4() {
    var img = SVG('rect_4');
    img.size(200, 100);
    var rect = img.rect(200, 100);
    rect.fill({ color: '#FFF' }).stroke({ width: 1 });
}
rect_4();
<pre><code>


&lt;h3&gt;Smaller rectangle&lt;/h3&gt;

Up until now the rectangle we drew was the same size as the image itself. Now we are going to see how a smaller rectangle can be
placed on that image. In order to make it clearer we actually use two rectangles. The first one created by `img.rect(200, 100).fill({ color: '#FFF' }).stroke({ width: 1 });`
provides the background with a 1 pixel wide border. That will make it easier to see what happens to the other rectangle we draw.

The second rectangle is smaller (only 100 pixel wide and 50 pixel high) and it has that nice color we had earlier.

As you can see the smaller rectangle is attached to the top-left corner of the image. That's because the point at &lt;b&gt;(x,y)&lt;/b&gt; coordinates &lt;b&gt;(0,0)&lt;/b&gt; in SVG is the
top left corner. 

&lt;div id=&quot;rect_5&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;/try/examples/js/svg_rectangle_5.js&quot;&gt;&lt;/script&gt;
**[examples/js/svg_rectangle_5.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_5.js)**
```js
function rect_5() {
    var img = SVG('rect_5');
    img.size(200, 100);
    img.rect(200, 100).fill({ color: '#FFF' }).stroke({ width: 1 });

    var rect = img.rect(100, 50);
    rect.fill({ color: '#F06' });
}
rect_5();

</code></pre>
<h3 class="title is-5">Move the SVG element on the x and y axes</h3>
<p>Let's put the rectangle in some other place.
There are several ways to indicate the location of an SVG element. The <code>x()</code> and <code>y()</code> methods allow us to set the
coordinates of (the top-left corner of) a rectangle to absolute values on the <b>x,y</b> axes.</p>
<p>In this example we have moved the rectangle 30 pixels to the right on the x axis, and 5 pixels down on the y axis.</p>
<p>We could call <code>x(30)</code> several times, on the same object, only the last call would matter.</p>
<p>If we call <code>x()</code> or <code>y()</code> with a parameter as above, they both return the current object, which means
we can stack the calls one on the other as we do in the examples.</p>
<p>On the other hand, calling <code>x()</code> or <code>y()</code> without any parameter will return the current location of the object
on the <b>x,y</b> axes.</p>
<div id="rect_6"></div>
<script src="/try/examples/js/svg_rectangle_6.js"></script>
**[examples/js/svg_rectangle_6.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_6.js)**
```js
function rect_6() {
    var img = SVG('rect_6');
    img.size(200, 100);
    img.rect(200, 100).fill({ color: '#FFF' }).stroke({ width: 1 });
<pre><code>var rect = img.rect(100, 50);
rect.fill({ color: '#F06' }).x(30).y(5);
</code></pre>
<p>}
rect_6();</p>
<pre><code>

&lt;h3&gt;Move the element relative to its own position&lt;/h3&gt;

The `dx()` and `dy()` methods allow us to move the object relative to its current position.
When the object is created it does not matter if we use `x()` or `dx()` (at least on rectangles)
as the default location of the rectangle is &lt;b&gt;0,0&lt;/b&gt;, but later we'll see how we can change the coordinates
of an existing object. Then it will be important that we can either set the coordinates in absolute terms
using `x()` and `y()`, or in relative terms using `dx()` and `dy()`.

In the example we can see that we call `dy()` multiple times stacked one on the other and the movements
add up.

&lt;div id=&quot;rect_7&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;/try/examples/js/svg_rectangle_7.js&quot;&gt;&lt;/script&gt;
**[examples/js/svg_rectangle_7.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_7.js)**
```js
function rect_7() {
    var img = SVG('rect_7');
    img.size(200, 100);
    img.rect(200, 100).fill({ color: '#FFF' }).stroke({ width: 1 });

    var rect = img.rect(100, 50);
    rect.fill({ color: '#F06' }).dx(30).dy(5).dy(5).dy(5);
}
rect_7();

</code></pre>
<h3 class="title is-5">Positioning by the center of the object</h3>
<p>Sometimes it is easier to position an element by its center. Using <code>cx()</code> and <code>cy</code> is quite similar to
using <code>x()</code> and <code>y()</code>, except that the coordinates we give are that of the center of the rectangle.
For example if we set the center to <b>0, 0</b> then we'll only see one quarter of the rectangle:</p>
<div id="rect_8"></div>
<script src="/try/examples/js/svg_rectangle_8.js"></script>
**[examples/js/svg_rectangle_8.js](https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_rectangle_8.js)**
```js
function rect_8() {
    var img = SVG('rect_8');
    img.size(200, 100);
    img.rect(200, 100).fill({ color: '#FFF' }).stroke({ width: 1 });
<pre><code>var rect = img.rect(100, 50);
rect.fill({ color: '#F06' }).cx(0).cy(0);
</code></pre>
<p>}
rect_8();</p>
<pre><code>



</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG (Scalable Vector Graphics) Tutorial and Exercises</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-14T18:30:01Z</updated>
    <pubDate>2015-02-14T18:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg" />
    <id>https://code-maven.com/svg</id>
    <content type="html"><![CDATA[<p>This SVG - <a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics">Scalable Vector Graphics</a> tutorial uses small tasks as exercises
to help you learn how to build images.</p>
<script src="/try/examples/js/svg.min.js"></script>
<p>In order to get started check out the <a href="/svg-with-javascript">SVG with JavaScript</a> and/or
the <a href="https://perlmaven.com/scalable-vector-graphics-with-perl">SVG in Perl</a> article.</p>
<p>Then you can do the following exercises. I've tried to put them in order of growing complexity.
For each task you'll find a (hopefully) reasonable description of what you should do and you will also see the end-result
I was expecting. In addition you will find links to the pages where my solutions are presented.</p>
<p>Also see a recommended <a href="http://tutorials.jenkov.com/svg/index.html">svg tutorial</a> by Jakob Jenkov.</p>
<p>(This is a first draft of this page, more shapes and more exercises will follow.)</p>
<h2 class="title is-4">Basic shapes</h2>
<h3 class="title is-5">Rectangle</h3>
<p>Draw a blue rectangle of 200px width, 100px height.</p>
<div id="blue_rectangle"></div>
<script src="/try/examples/js/svg_rectangle.js"></script>
<p>My solution and more examples for an <a href="/svg-rectangle">SVG Rectangle</a>.</p>
<h3 class="title is-5">Square</h3>
<p>Draw a square of 100px each side. I am not sure. Whatever this color is:</p>
<div id="square_1"></div>
<script src="/try/examples/js/svg_square.js"></script>
<p>My <a href="/svg-square">SVG Square</a>.</p>
<h3 class="title is-5">Ellipse</h3>
<p>Draw an ellipse.</p>
<div id="ellipse_1"></div>
<script src="/try/examples/js/svg_ellipse.js"></script>
<p>The <a href="/svg-ellipse">SVG Ellipse</a> I managed to create.</p>
<h3 class="title is-5">Circle</h3>
<p>Draw a nice green circle with 100 px diameter.</p>
<div id="circle_1"></div>
<script src="/try/examples/js/svg_circle.js"></script>
<p>The <a href="/svg-circle">SVG Circle</a> I managed to create.</p>
<h3 class="title is-5">Line</h3>
<p>Draw a simple red line.</p>
<div id="line_1"></div>
<script src="/try/examples/js/svg_line.js"></script>
<p>The <a href="/svg-line">SVG Line</a> I managed to create.</p>
<h3 class="title is-5">X</h3>
<p>Draw a huge X. Which are actually just two lines crossing each other.</p>
<div id="draw_x"></div>
<script src="/try/examples/js/svg_x.js"></script>
<p>The <a href="/svg-x">SVG X</a>.</p>
<h3 class="title is-5">Polyline</h3>
<div id="polyline_1"></div>
<script src="/try/examples/js/svg_polyline.js"></script>
<p>The <a href="/svg-polyline">SVG Polyline</a> I managed to create.</p>
<h3 class="title is-5">Polygon</h3>
<div id="polygon_1"></div>
<script src="/try/examples/js/svg_polygon_1.js"></script>
<p>The <a href="/svg-polygon">SVG Polygon</a> I managed to create.</p>
<h2 class="title is-4">Slightly more advanced tasks</h2>
<h3 class="title is-5">Flag of Hungary</h3>
<p>According to <a href="http://en.wikipedia.org/wiki/Flag_of_Hungary">Wikipedia</a> and
the <a href="http://commons.wikimedia.org/wiki/File:Flag_of_Hungary.svg">Wikimedia svg</a>,
the Hungarian flag has a 2:1 ratio and the 3 stripes have the following RGB color values:
The Red is #CD2A3E, the white is, well, it is white #FFFFFF, and the green is #436F4D.</p>
<div id="flag_of_hungary"></div>
<script src="/try/examples/js/svg_flag_of_hungary.js"></script>
<p>My drawing of the <a href="/svg-flag-of-hungary">Hungarian flag</a>.</p>
<h2 class="title is-4">Flag of Switzerland</h2>
<p>According to the <a href="http://en.wikipedia.org/wiki/Flag_of_Switzerland">Wikipedia</a> entry,
to the <a href="http://commons.wikimedia.org/wiki/File:Flag_of_Switzerland.svg">Wikimedia svg</a>
example and to the
<a href="http://www.bk.admin.ch/themen/02268/02385/index.html?lang=de">CD Bund V7.0</a>
the red colour of the flags is #FF0000, the with of the
middle part is 1/5 of the full width, the width of the sides is 1/5 of the full width + 1/6 of the middle width.
Which seems to be 0.2 + 0.2 / 6 = 1.4/6 of the full width.</p>
<div id="flag_of_switzerland"></div>
<script src="/try/examples/js/svg_flag_of_switzerland.js"></script>
<p>My drawing of the <a href="/svg-flag-of-switzerland">Swiss flag</a>.</p>
<h2 class="title is-4">Flag of Greenland</h2>
<p>According to the <a href="http://en.wikipedia.org/wiki/Flag_of_Greenland">Wikipedia</a> the flag of
Greenland is from two colors: white and red (PMS 186C). The size is 18:12 parts. The disk is 8 parts
in diameter and its center is 7 parts from one side.</p>
<div id="flag_of_greenland"></div>
<script src="/try/examples/js/svg_flag_of_greenland.js"></script>
<p>My drawing of the <a href="/svg-flag-of-greenland">flag of Greenland</a>.</p>
<h2 class="title is-4">Other</h2>
<ul>
<li><a href="/svg-linear-gradient">SVG Linear Gradient</a></li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>SVG - Scalable Vector Graphics with JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-13T16:30:01Z</updated>
    <pubDate>2015-02-13T16:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/svg-with-javascript" />
    <id>https://code-maven.com/svg-with-javascript</id>
    <content type="html"><![CDATA[<p>On a computer, every image is made out of pixels in various colors.
If the image is very smooth then we have a lot of pixels. Still just pixels.</p>
<p>If we want to save a picture to a file basically we can have two options.
Either we save the pixels which is called <b>raster image</b>, or we store instructions
how to draw lines in order to generate the pixels. This is called <b>vector image</b>.</p>
<p>The advantage of vector graphics is that we can enlarge the image without loss of quality.</p>
<p><a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics">Scalable Vector Graphics (SVG)</a> is
an XML file containing instructions to draw an image.  <a href="http://svgjs.com/">SVG.JS</a> is
a JavaScript library that makes it easy to create such XML file and even without saving them
to disk, to use them to draw images on a web site.</p>
<p>Just as we saw a <a href="https://perlmaven.com/scalable-vector-graphics-with-perl">examples for SVG images drawn with Perl</a>,
let's see a few simple examples with the JavaScript library.</p>
<script src="/try/examples/js/svg.min.js"></script>
<p>Download the implementation of <a href="http://svgjs.com/">SVG.JS</a> using
<code>wget https://raw.github.com/wout/svg.js/master/dist/svg.min.js</code>
or some other way and let's start drawing.</p>
<h2 class="title is-4">Square</h2>
<p>Create the following two files:</p>
<p>An HTML file that loads the <code>svg.min.js</code> we have just downloaded. This can go anywhere in the HTML file.</p>
<p>Then we add an HTML  element with an id. (<code>square_1</code> in our case). This is where the drawing will be placed.</p>
<p>Finally we load a JavaScript file where we put the instructions. Unless we employ some kind of delayed execution,
this JavaScript file has to come after the other two.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_square.html">examples/js/svg_square.html</a></strong></p>
<pre><code class="language-html">&lt;script src=&quot;svg.min.js&quot;&gt;&lt;/script&gt;

&lt;div id=&quot;square_1&quot;&gt;&lt;/div&gt;

&lt;script src=&quot;svg_square.js&quot;&gt;&lt;/script&gt;

</code></pre>
<p><a href="examples/js/svg_square.html">view</a></p>
<p>The other file is the JavaScript file with the instruction.
The <code>SVG()</code> function gets the <code>id</code> of the HTML element where we want to put our drawing.
This returns an object. On this object we can call various methods that will impact the drawing.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_square.js">examples/js/svg_square.js</a></strong></p>
<pre><code class="language-js">function draw_square() {
    var draw = SVG('square_1');
    draw.size(120, 120);
    var square = draw.rect(100, 100);
    square.attr({ fill: '#f06' });
}

draw_square()

</code></pre>
<p>The result will look like this:</p>
<div id="square_1"></div>
<script src="/try/examples/js/svg_square.js"></script>
<h2 class="title is-4">Circle</h2>
<p>In order to draw a circle it is enough to provide its diameter:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_circle.js">examples/js/svg_circle.js</a></strong></p>
<pre><code class="language-js">function draw_circle() {
    var draw = SVG('circle_1');
    draw.size(120, 120);
    draw.circle(100).attr({ fill: '#32AD4F' });
}

draw_circle();

</code></pre>
<p>And have the appropriate HTML file to load the JavaScript:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_circle.html">examples/js/svg_circle.html</a></strong></p>
<pre><code class="language-html">&lt;div id=&quot;circle_1&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;svg.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;svg_circle.js&quot;&gt;&lt;/script&gt;

</code></pre>
<p><a href="examples/js/svg_circle.html">view</a></p>
<div id="circle_1"></div>
<script src="/try/examples/js/svg_circle.js"></script>
<h2 class="title is-4">Polygon</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_polygon.js">examples/js/svg_polygon.js</a></strong></p>
<pre><code class="language-js">var draw_polygon_1 = SVG('polygon_1');
draw_polygon_1.size(120, 120);
var polygon = draw_polygon_1.polygon('0,0 100,50 50,100');
polygon.fill('#2ABFB5').stroke({ width: 3 })

</code></pre>
<p>And have the appropriate HTML file to load the JavaScript:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/svg_polygon.html">examples/js/svg_polygon.html</a></strong></p>
<pre><code class="language-html">&lt;div id=&quot;polygon_1&quot;&gt;&lt;/div&gt;
&lt;script src=&quot;svg.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;svg_polygon.js&quot;&gt;&lt;/script&gt;

</code></pre>
<p><a href="examples/js/svg_polygon.html">view</a></p>
<div id="polygon_1"></div>
<script src="/try/examples/js/svg_polygon.js"></script>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Functions in JavaScript</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-12T13:30:01Z</updated>
    <pubDate>2015-02-12T13:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/functions-in-javascript" />
    <id>https://code-maven.com/functions-in-javascript</id>
    <content type="html"><![CDATA[<p>Just as in many other programming languages, in JavaScript too we can create functions.</p>
<p>In JavaScript we use the <code>function</code> keyword for this followed by the name of the new function.
Then the list of parameters in parentheses and then a block of expressions in curly braces. This is the body of the
function.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/function.html">examples/js/function.html</a></strong></p>
<pre><code class="language-html">&lt;script&gt;
function show() {
  console.log('Hello World');
}

console.log('before');
show();
console.log('after');
&lt;/script&gt;


</code></pre>
<p><a href="examples/js/function.html">view</a></p>
<p>If you try this example, and <a href="/open-javascript-console">open the JavaScript console</a> to see the output you'll see that the order of the output is</p>
<pre><code>before
Hello World
after
</code></pre>
<p>So as you can see, unlike earlier, the code is not executed in the order it can be found in the file.
Although the function is declared before everything else, it is only executed later, when we call it using
its name <code>show();</code></p>
<h2 class="title is-4">Calling a function more than once</h2>
<p>This was not yet very interesting, but in the next example you'll see we can call the same function multiple times.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/function_calls.html">examples/js/function_calls.html</a></strong></p>
<pre><code class="language-html">&lt;script&gt;
function show() {
  console.log('Hello World');
}

show();
console.log('before');
show();
console.log('after');
show();
&lt;/script&gt;



</code></pre>
<p><a href="examples/js/function_calls.html">view</a></p>
<p>This already shows one of the values of functions. They can help eliminate code repetition. Of course if the content
of the function was bigger then the gain was more obvious. We would still only add one line each time we
call the function, but all the content of the function would be executed.</p>
<pre><code>Hello World
before
Hello World
after
Hello World
</code></pre>
<h2 class="title is-4">Function with parameters</h2>
<p>A much more interesting case is when we also provide parameters to the function.
In the next example, in the function declaration we wrote that we are going to accept a single value
and we want it to be assigned to the <code>name</code> variable. Then, we called the function and passed
a value to it. In every call we passed a different value.</p>
<p>Inside the function the <code>name</code> variable holds the current value.</p>
<p>This show the real power of functions.</p>
<p>We can have one piece of code, that can be tested on it own, separately from the rest of the code,
and then reused multiple times.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/function_parameters.html">examples/js/function_parameters.html</a></strong></p>
<pre><code class="language-html">&lt;script&gt;
function show(name) {
  console.log('Hello ', name);
}

show('Foo');
show('Bar');
show('Zorg');
&lt;/script&gt;



</code></pre>
<p><a href="examples/js/function_parameters.html">view</a></p>
<p>The output of these function</p>
<pre><code>Hello  Foo
Hello  Bar
Hello  Zorg
</code></pre>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Building a web client (a crawler) using Node.js</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-11T21:30:01Z</updated>
    <pubDate>2015-02-11T21:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/building-a-crawler-in-nodejs" />
    <id>https://code-maven.com/building-a-crawler-in-nodejs</id>
    <content type="html"><![CDATA[<p>Building a web server, or a web application, as we have started in the <a href="/getting-started-with-nodejs">first example</a> can be interesting,
but so is building a web crawler. You know, the thing that downloads pages, and does something interesting with them.</p>
<p>Let's start with something simple.</p>
<p>The <a href="http://nodejs.org/api/http.html">http</a> class we have seen earlier provides several methods for this.
We are going to look at the <a href="http://nodejs.org/api/http.html#http_http_get_options_callback">http.get</a> method
that provides a simple even if limited interface.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/crawl_01.js">examples/node/crawl_01.js</a></strong></p>
<pre><code class="language-js">var http = require('http');

if (process.argv.length &lt;= 2) {
    console.log(&quot;Usage: &quot; + __filename + &quot; URL&quot;);
    process.exit(-1);
}

var url = process.argv[2]

http.get(url, function(res) {
    console.log(&quot;Got response: &quot; + res.statusCode);
}).on('error', function(e) {
    console.log(&quot;Got error: &quot; + e.message);
});


</code></pre>
<p>The first part of the code is just checking if the user has supplied a URL
<a href="/argv-raw-command-line-arguments-in-nodejs">on the command line</a>.</p>
<p>Then once we have <code>url</code> we call <code>http.get</code> providing the requested url and a callback.
That callback will be executed with a <a href="http://nodejs.org/api/http.html#http_class_http_serverresponse">response object</a>.</p>
<p>Let's see this script with various parameters.</p>
<p>Actually, let's start without any command line parameter:</p>
<pre><code>$ node crawl_01.js 
Usage: /Users/gabor/work/articles/code-maven/examples/node/crawl_01.js URL
</code></pre>
<p>OK, so it tells us we need to supply a URL</p>
<pre><code>$ node crawl_01.js http://code-maven.com/
Got response: 200
</code></pre>
<p>That looks good.</p>
<p>Let's ask for a page that does not exist:</p>
<pre><code>$ node crawl_01.js http://code-maven.com/x
Got response: 404
</code></pre>
<p>That looks correct, we got a <a href="http://en.wikipedia.org/wiki/HTTP_404">http 404</a> as expected, but then, oh.
It got stuck. No matter how long I waited it would not end the script.
Well, actually after a minute or so, it stopped, but I only noticed this because I went to prepare a tea for myself.
This is not what we want, is it?</p>
<p>At first I thought this is some problem with my server so I tried something else:</p>
<pre><code>$ time node crawl_01.js http://google.com/
Got response: 302
</code></pre>
<p>The <a href="http://en.wikipedia.org/wiki/HTTP_302">http 302</a> seems ok, but after that the script got stuck as well.</p>
<p>So the problem is not in my server.
I was not sure how to solve this so I decided to move on. After all, when we get a successful response, we still would like to get the content of
the request. Being everything asynchronous, the content has not necessarily arrived yet when the callback was executed.
We need to use the <code>response object</code> and add some code to consume the data received.</p>
<h2 class="title is-4">Consuming the data</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/crawl_02.js">examples/node/crawl_02.js</a></strong></p>
<pre><code class="language-js">var http = require('http');

if (process.argv.length &lt;= 2) {
    console.log(&quot;Usage: &quot; + __filename + &quot; URL&quot;);
    process.exit(-1);
}

var url = process.argv[2]

http.get(url, function(res) {
    console.log(&quot;Got response: &quot; + res.statusCode);
    var content = '';
    res.on('data', function(chunk) {
        console.log('chunk ' + chunk.length);
        content += chunk;
    });
    res.on('end', function() {
        console.log('end');
        console.log(content.length);
        console.log(content);
    });
}).on('error', function(e) {
    console.log(&quot;Got error: &quot; + e.message);
});


</code></pre>
<p>Once a connection was established and the server gave some response, Node.js executed the callback function passing
an object representing the response. This can be found in the <code>res</code> variable.</p>
<p>We attached two callbacks to this object.  <code>res.on('data', function(chunk) { ... </code> will be called
every time a chunk of the data sent by the server arrives. If the page was small this might be happen at once,
but if the page is large, it might take some time (even a few seconds?) to get all the data. In the meantime
we can do something else. So this function will be called every time some more data has
arrived. The parameter passed to the function will contain the current chunk of data.</p>
<p>We have created a variable called <code>content</code> and will append the current chunk to this variable.</p>
<p>Of course we assume here that the size of the page fits in the memory, which is quite a reasonable assumption
for an html page.</p>
<p>The second callback is attached to the event when the responses has finished consuming all the data:
<code>res.on('end', function() { ...</code></p>
<p>Without this could not be sure if we have received all the data the server wanted to send.
We just print 'end' to the console and we print the size of the <code>content</code> we have received from the server.</p>
<p>Let's run this script now:</p>
<pre><code>$ node crawl_02.js http://code-maven.com/
Got response: 200
end
20558
</code></pre>
<p>So the front page of the <a href="/">Code Maven</a> site has 20,558 bytes.</p>
<pre><code>$ node crawl_02.js https://perlmaven.com/
Got response: 200
end
18487
</code></pre>
<p>Apparently the front page of the <a href="https://perlmaven.com/">Perl Maven</a> site is smaller.</p>
<p>What about the pages that got stuck?</p>
<pre><code>$ node crawl_02.js http://code-maven.com/x
Got response: 404
end
7641
</code></pre>
<p>And it is not stuck any more!</p>
<pre><code>$ node crawl_02.js http://google.com/
Got response: 302
end
261
</code></pre>
<p>And this was not stuck either.</p>
<p>Apparently, earlier, the script was still expecting us to consume the response and that's the reason
it was waiting till some timeout happened. Though now it is unclear to me why was it not stuck when
we got 200 response.</p>
<h2 class="title is-4">Is it really chunk-by-chunk?</h2>
<p>There are two lines commented out in the script. If we remove the <code>//</code> from the first one,
enable <code>console.log('chunk ' + chunk.length);</code> and run the script again:</p>
<pre><code>$ node crawl_02.js http://code-maven.com/
Got response: 200
chunk 1235
chunk 12672
chunk 1408
chunk 1408
chunk 1408
chunk 1408
chunk 1026
end
20558
</code></pre>
<p>we can see that we get the data in several pieces.</p>
<h2 class="title is-4">The content of 302</h2>
<p>If we remove the second pair of <code>//</code>, enabling <code>console.log(content);</code>
then we'll see the content of the page.</p>
<p>For example:</p>
<pre><code>$ node crawl_02.js http://google.com/
Got response: 302
chunk 261
end
261
&lt;HTML&gt;&lt;HEAD&gt;&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html;charset=utf-8&quot;&gt;
&lt;TITLE&gt;302 Moved&lt;/TITLE&gt;&lt;/HEAD&gt;&lt;BODY&gt;
&lt;H1&gt;302 Moved&lt;/H1&gt;
The document has moved
&lt;A HREF=&quot;http://www.google.co.il/?gfe_rd=cr&amp;amp;ei=abcdVK1234GG8Qftxx1234&quot;&gt;here&lt;/A&gt;.
&lt;/BODY&gt;&lt;/HTML&gt;
</code></pre>
<p>Goole.com is redirecting to the local chapter of Google.</p>
<h2 class="title is-4">Conclusion</h2>
<p>This is a good start for a crawler, but we have a lot more to do, and there are actually a few,
crawlers written in Node.js that provide higher abstraction.</p>
<h2 class="title is-4">Advanced crawlers</h2>
<p>For more advanced crawlers we'll have to look at one of the following projects:
<a href="https://github.com/cgiffard/node-simplecrawler">node-simplecrawler</a>,
<a href="https://github.com/sylvinus/node-crawler">node-crawler</a>, and
<a href="https://github.com/mikeal/spider">spider</a>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>JavaScript input with prompt and confirm</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-10T16:10:01Z</updated>
    <pubDate>2015-02-10T16:10:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/javascript-input-with-prompt-and-confirm" />
    <id>https://code-maven.com/javascript-input-with-prompt-and-confirm</id>
    <content type="html"><![CDATA[<p>Once we know how to <a href="/introduction-to-javascript">show output from JavaScript</a>, let's have a quick look
at two ways to receive input. Probably neither of these is use a lot, but they can be used easily to play
around with the basics.</p>
<h2 class="title is-4">prompt</h2>
<p>The fist one is called <code>prompt</code>.
It will show a pop-up window with the text provided as the first parameter and with a textbox the user can fill in.
When the user presses <code>OK</code>, the value in the text box will be returned by the <code>prompt()</code> function.
Then, in this example we use the <a href="/introduction-to-javascript">document.write</a> method to update the html
with the text.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/prompt.html">examples/js/prompt.html</a></strong></p>
<pre><code class="language-html">&lt;script&gt;

var name = prompt(&quot;Your name:&quot;, &quot;&quot;);
document.write(&quot;Hello &quot;, name);

&lt;/script&gt;

</code></pre>
<p><a href="examples/js/prompt.html">view</a></p>
<p>The textbox will be pre-filled with the content of the second parameter. This can be very useful if we would like to
ask the user to edit some value. We can pre-fill the box with the old value.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/edit.html">examples/js/edit.html</a></strong></p>
<pre><code class="language-html">&lt;script&gt;

var name = prompt(&quot;Please correct your e-mail address:&quot;, &quot;foo@bar.co&quot;);
document.write(&quot;Your e-mail address is &quot;, name);

&lt;/script&gt;

</code></pre>
<p><a href="examples/js/edit.html">view</a></p>
<p>In either case, if the user presses <code>cancel</code> or hits the <code>ESC</code> the <code>prompt()</code> function will return <code>null</code>.</p>
<h2 class="title is-4">confirm</h2>
<p>The other pop-up is not really an input method. It allows the developer to ask a Yes/No question. Calling the <code>confirm()</code>
function will show a pop-up window with the provided texts and with two buttons. If the user presses <code>OK</code> the <code>confirm()</code>
function will return <code>true</code>, if the user presses <code>cancel</code> or hits the <code>ESC</code> key, the function will return <code>false</code>.</p>
<p>Of course in order for this to make more sense you'll have to understand what <code>true</code> and <code>false</code> really mean and what this
<code>if - else</code> construct does. If you have programming background then you probably already understand the code,
and even if you don't have programming background you might figure out.</p>
<p>That code can basically be translated to the following English sentence:</p>
<p><code>If confirm returned true, print &quot;Hello World&quot;, otherwise print &quot;OK, I won't print it.&quot;</code></p>
<p>Or even better:</p>
<p><code>If the user presses OK when we asked &quot;Shall I print Hello World?&quot;, then print &quot;Hello World&quot;, otherwise print &quot;OK, I won't print it.&quot;</code></p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/confirm.html">examples/js/confirm.html</a></strong></p>
<pre><code class="language-html">&lt;script&gt;

if (confirm(&quot;Shall I print Hello World?&quot;)) {
    document.write(&quot;Hello World&quot;);
} else {
    document.write(&quot;OK, I won't print it.&quot;);
}

&lt;/script&gt;

</code></pre>
<p><a href="examples/js/confirm.html">view</a></p>
<h2 class="title is-4">Comments</h2>
<p>How do you change the colors of the prompt box?</p>
<hr />
<p>Write a function that takes a grade and returns grade letter using switch case.
Greater or equal to 9 = Grade Letter is A
Greater or equal to 8 = Grade Letter is B
Greater or equal to 7 = Grade Letter is C
Greater or equal to 6 = Grade Letter is D
Less than 6 = Grade Letter is F
You must take this course again</p>
<p>here is my code but its not displaying resul</p>
<pre><code>&lt;html&gt;
&lt;head&gt;&lt;title&gt;Exercise 1&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var a = prompt(&quot;Please enter youre grade \n&quot;,);

function myGrading() {

switch(true) {
case (value &gt;=9):

document.getElementById(&quot;cs&quot;).innerHTML = &quot;Grade letter is A&quot;;
break;
case (value &gt;=8):

document.getElementById(&quot;cs&quot;).innerHTML = &quot;Grade letter is B&quot;;
break;
case (value &gt;=7):

document.getElementById(&quot;cs&quot;).innerHTML = &quot;Grade letter is C&quot;;
break;
case (value &gt;=6):

document.getElementById(&quot;cs&quot;).innerHTML = &quot;Grade letter is D&quot;;
break;
case (value &lt;6):

document.getElementById(&quot;cs&quot;).innerHTML = &quot;Grade letter is F&quot;;
break;

default:
return 'INVALID SCORE';
}

return gscore;
}

&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;

Result:

&lt;/body&gt;
&lt;/html&gt;.
</code></pre>
<hr />
<p>very helpful, thank u</p>
<hr />
<p>1 2 3 4 5
1 2 3 4
1 2 3
1 2
1</p>
<p>can u plz give me the answer. using js loop method</p>
<hr />
<p>You shoud really figure this out by yourself, it's not that big of a deal. You can achieve this by doing:
var a = [ 1, 2, 3, 4, 5 ];
for (var i = a.length; i &gt; 0; i--) {
var line = &quot;&quot;;
for (var j = 0; j &lt; i; j++) line += a[j] + &quot; &quot;;
console.log(line);
}</p>
<p>Also, it really depends on what you try to achieve with this. So this solution might not be your right solution.</p>
<hr />
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Code Maven category</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-10T12:00:02Z</updated>
    <pubDate>2015-02-10T12:00:02Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/category" />
    <id>https://code-maven.com/category</id>
    <content type="html"><![CDATA[]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Introduction to JavaScript - basic output</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-09T12:30:01Z</updated>
    <pubDate>2015-02-09T12:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/introduction-to-javascript" />
    <id>https://code-maven.com/introduction-to-javascript</id>
    <content type="html"><![CDATA[<p>While learning about Node.js, JQuery, or Angular.js might be fun, I think it is important to have some background, and to know how to
use plain JavaScript. This series of articles will provide an introduction to JavaScript.</p>
<p>Before we get to the syntax, first let's understand where can we run JavaScript.</p>
<p>Traditionally JavaScript was used inside web browsers  such as Mozilla Firefox, Internet Explorer, Chrome, Opera, or Safari. The author
would include some JavaScript code  in the HTML page the user receives when she visits a web site. That JavaScript code would run
in the browser (what we call &quot;client side&quot;, as opposed to running on the web server which is called &quot;server side&quot;).</p>
<p>In recent years people have started to put JavaScript code on the server as well. Probably the most well know environment
to run JavaScript on the server is <a href="http://nodejs.org/">Node.js</a>, but there are others. For example
<a href="https://iojs.org/">io.js</a> which started as a Node.js fork.</p>
<p>We can distinguish 3 major parts of what we usually refer to as &quot;JavaScript&quot;.</p>
<ol>
<li>The language itself. This is fairly standard among the various environments, both in the various browsers and in
the various server-side environments.</li>
<li>The DOM API - how the language can interact with the various parts of a web page while in the browser. While in this respect the various browsers are getting closer
to each other they still differ. Several libraries, most prominently JQuery, is trying to provide a unified API.</li>
<li>The server API (or just API) provided by Node.js or one of the other server-side systems.</li>
</ol>
<p>In this series of articles we'll see all 3 major components.</p>
<p>Let's start with a few simple examples we can run in a browser.
It is probably the easiest to get started this way, as these examples only require you to have
a browser (and if you are reading this, then you probably have one), and a text editor.</p>
<h2 class="title is-4">Editor or IDE</h2>
<p>Any text editor can be used.</p>
<p>On MS Windows you can even use the built-in plain Notepad, but I'd recommend something more powerful.
You can download <a href="http://notepad-plus-plus.org/">Notepad++</a> which is very similar to Notepad, but with tons of extra features,
or get <a href="http://www.aptana.com/">Aptana Studio</a>. The latter has a steeper learning curve, so you might want to start with the
more simple tool.</p>
<h2 class="title is-4">Embed or include</h2>
<p>You can either embed the JavaScript code directly inside the HTML file, or you can put a line in the HTML file that will include
the external JavaScript file. In most cases the latter is recommended, but for our first examples, in order to make the whole thing work
in a single file, we'll embed the JavaScript code inside some HTML.</p>
<p>In order to do that we add the <code>&amp;lt;script&gt;</code> opening and <code>&amp;lt;/script&gt;</code> closing tags. Between the two we write our JavaScript code.</p>
<h2 class="title is-4">Input Output</h2>
<p>The very first thing we need to learn is how to interact with the JavaScript code running in the browse. There are a number of way
JavaScript can display text for the user (output). The most simple one is by using the <code>alert</code> function:</p>
<h2 class="title is-4">alert</h2>
<p>This will show a pop-up in the browser with the text. (You can click on <strong>Try!</strong> that will open the specific script in a separate window.)
The <code>alert()</code> function is actually rarely used, but it is an easy way to show the use of JavaScript.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/alert.html">examples/js/alert.html</a></strong></p>
<pre><code class="language-html">&lt;script language=&quot;javascript&quot;&gt;

alert(&quot;Hello World&quot;);

&lt;/script&gt;


</code></pre>
<p><a href="examples/js/alert.html">view</a></p>
<p>If you'd like to try it yourself, open your editor and create a file with .html extension (for example hello.html) and put the above code in
the file. Then switch to your browser and open the file with the browser. (Most browsers will let you do that using the <strong>File/Open File</strong>
menu option.)</p>
<h2 class="title is-4">document.write</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/document_write.html">examples/js/document_write.html</a></strong></p>
<pre><code class="language-html">First line
&lt;script&gt;

document.write(&quot;&lt;h1&gt;Hello World&lt;/h1&gt;&quot;);

&lt;/script&gt;
Last line



</code></pre>
<p><a href="examples/js/document_write.html">view</a></p>
<p>In this example we have some text (First line), then the JavaScript code, and then some more text (Last line).
The JavaScript code uses the <code>document.write</code> function to change the content of the page. It will embed the html snippet
<code>&amp;lt;h1&gt;Hello World&amp;lt;/h1&gt;</code> after the &quot;First line&quot;, but before the &quot;Last line&quot;.</p>
<p>This function was often used when one wanted to change what's shown. Today, there are some more advanced techniques.</p>
<h2 class="title is-4">console.log</h2>
<p>Finally let's see how developers usually print out debugging information.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/js/console.html">examples/js/console.html</a></strong></p>
<pre><code class="language-html">&lt;script&gt;

console.log(&quot;Hello World&quot;);

&lt;/script&gt;


</code></pre>
<p><a href="examples/js/console.html">view</a></p>
<p>Most of the web browsers provide what is called a &quot;JavaScript console&quot;. It is an additional window which is normally not
visible, where the browser can print out warnings and errors generated by the execution of the JavaScript code. (E.g. if there is
a syntax error in the code.) The developer can also print information to this console using the <code>console.log()</code>
call.</p>
<p>In order to see the console you'll need to open it.</p>
<p>If you happen to use Chrome on OSX you can open the console using: <code>Command-Option-J</code>.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Code Maven search results</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-05T14:00:01Z</updated>
    <pubDate>2015-02-05T14:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/search" />
    <id>https://code-maven.com/search</id>
    <content type="html"><![CDATA[]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>HTTP Client request in Node.js (GET request and data from POST request)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-03T09:30:01Z</updated>
    <pubDate>2015-02-03T09:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/http-client-request-in-nodejs" />
    <id>https://code-maven.com/http-client-request-in-nodejs</id>
    <content type="html"><![CDATA[<p>When building a web application in raw Node.js you might use the <a href="http://nodejs.org/api/http.html">http</a> class as we have
<a href="/getting-started-with-nodejs">started using Node.js</a>. Back then we only used the <code>response</code> object, but if we
are interested what the request was then we should also take a look at the <code>request</code> object we receive in the callback.</p>
<p>In this simple example of an <code>http server in Node.js</code> print out some of the values from the request object which is
an instance of the <a href="http://nodejs.org/api/http.html#http_class_http_clientrequest">http.ClientRequest</a> class.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/http_client_request.js">examples/node/http_client_request.js</a></strong></p>
<pre><code class="language-js">var http = require('http');

var port = 8081;

var s = http.createServer();
s.on('request', function(request, response) {
    response.writeHead(200);
    console.log(request.method);
    console.log(request.headers);
    console.log(request.url);
    response.write('hi');
    response.end();
});

s.listen(port);
console.log('Browse to http://127.0.0.1:' + port);



</code></pre>
<p>I ran the above script using <code>node examples/node/http_client_request.js</code>
it printed <code>Browse to http://127.0.0.1:8081</code> so I browsed there
with my regular browser.</p>
<p>This is what was printed on the console:</p>
<pre><code>GET
{ host: '127.0.0.1:8081',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36',
  'accept-encoding': 'gzip, deflate, sdch',
  'accept-language': 'en-US,en;q=0.8,he;q=0.6,ru;q=0.4' }
/
GET
{ host: '127.0.0.1:8081',
  connection: 'keep-alive',
  accept: '*/*',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36',
  'accept-encoding': 'gzip, deflate, sdch',
  'accept-language': 'en-US,en;q=0.8,he;q=0.6,ru;q=0.4' }
/favicon.ico
</code></pre>
<p>At first it confused me a bit, why do I have two GET request, but then I remembered, and looking more closely
I can also see it. The first request was indeed to <code>/</code>, (as you can above the second GET line), but then
another request was sent by my browser to the <code>/favicon.ico</code>. This is an automatic request my browser
send in the hope that it will be able to put this little image on the tab where I opened the page.</p>
<p>I don't want this extra confusion in my research, so I switched to the <code>curl</code> command that is available on Linux/Unix.</p>
<p>Let's start again:</p>
<p>I ran the server:</p>
<pre><code>$ node examples/node/http_client_request.js 
Browse to http://127.0.0.1:8081
</code></pre>
<p>and opened another shell window where I sent my request:</p>
<pre><code>$ curl http://127.0.0.1:8081/
</code></pre>
<p>Then switched back to the original console to see the response:</p>
<pre><code>GET
{ 'user-agent': 'curl/7.37.1',
  host: '127.0.0.1:8081',
  accept: '*/*' }
/
</code></pre>
<p>From this point I was switching back-and-forth between the two consoles.</p>
<p>The second request included a path on the server and a parameter with a value:</p>
<pre><code>$ curl http://127.0.0.1:8081/some/path?field=value
</code></pre>
<p>The printout on the other console was similar to the previous
printout, except of the last line that shows the <code>url</code>.</p>
<pre><code>GET
{ 'user-agent': 'curl/7.37.1',
  host: '127.0.0.1:8081',
  accept: '*/*' }
/some/path?field=value
</code></pre>
<p>The last attempt was to send in a POST request using curl with some data:</p>
<pre><code>$ curl --data &quot;field=value&quot; http://127.0.0.1:8081/
</code></pre>
<p>the output looked like this:</p>
<pre><code>POST
{ 'user-agent': 'curl/7.37.1',
  host: '127.0.0.1:8081',
  accept: '*/*',
  'content-length': '11',
  'content-type': 'application/x-www-form-urlencoded' }
/
</code></pre>
<p>The first line shows that it was indeed a <code>POST</code> request,
the header had some extra fields, but the data itself was not included.</p>
<p>Of course, the data needs to be read in and processed in another way.</p>
<h2 class="title is-4">Accepting HTTP POST request in Node.js</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/http_client_request_post.js">examples/node/http_client_request_post.js</a></strong></p>
<pre><code class="language-js">var http = require('http');

var port = 8081;

var s = http.createServer();
s.on('request', function(request, response) {
    response.writeHead(200);
    console.log(request.method);
    console.log(request.headers);
    console.log(request.url);

    var data = '';
    request.on('data', function(chunk) {
        data += chunk.toString();
    });
    request.on('end', function() {
        console.log(data);
        response.write('hi');
        response.end();
    });

});

s.listen(port);
console.log('Browse to http://127.0.0.1:' + port);




</code></pre>
<p>This is another area where the non-blocking nature of Node.js is seen.
Instead of just reading the data from the request object we add a callback
method to the <code>data</code> event of the <code>request</code> object. This
will be called every time another piece of data arrives. Of course, if
all the data is only 11 characters as in our case, then this is not very
interesting, but if you are sending a lot of data then it is important
to read that in without blocking the rest of the site.</p>
<p>Now that we have a call-back waiting for data, we should finish our response
only after all that data has arrived. Hence  we also added a callback
for the <code>end</code> event of the <code>request</code> object and in that
callback we print to the console all the <code>data</code> that was sent by the client,
and finish our <code>response</code> by calling its <code>end</code> method.</p>
<p>Let's try this</p>
<pre><code>$ node examples/node/http_client_request_post.js 
Browse to http://127.0.0.1:8081
</code></pre>
<p>The regular GET request:</p>
<pre><code>$ curl http://127.0.0.1:8081/
</code></pre>
<p>worked as earlier:</p>
<pre><code>GET
{ 'user-agent': 'curl/7.37.1',
  host: '127.0.0.1:8081',
  accept: '*/*' }
/
</code></pre>
<p>the GET request with the path and the parameters:</p>
<pre><code>$ curl http://127.0.0.1:8081/some/path?field=value
</code></pre>
<p>worked as well:</p>
<pre><code>GET
{ 'user-agent': 'curl/7.37.1',
  host: '127.0.0.1:8081',
  accept: '*/*' }
/some/path?field=value
</code></pre>
<p>The question how does the <code>POST</code> request behave:</p>
<pre><code>$ curl --data &quot;field=value&quot; http://127.0.0.1:8081/
</code></pre>
<p>and the result on the console is:</p>
<pre><code>POST
{ 'user-agent': 'curl/7.37.1',
  host: '127.0.0.1:8081',
  accept: '*/*',
  'content-length': '11',
  'content-type': 'application/x-www-form-urlencoded' }
/
field=value
</code></pre>
<p>So indeed, this managed to collect the data that was sent by the client.</p>
<h2 class="title is-4">Comments</h2>
<p>Hi Gabor, It is actually a beautiful tuto, I really appreciate. But i would say, it is seem like to be a node http server tuto rather then a node http client.</p>
<hr />
<p>Its a great example to see how the legacy version of node consumed data. Thanks a lot</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>List content of a directory with Node.js</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-02-02T09:47:01Z</updated>
    <pubDate>2015-02-02T09:47:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/list-content-of-directory-with-nodejs" />
    <id>https://code-maven.com/list-content-of-directory-with-nodejs</id>
    <content type="html"><![CDATA[<p>Just as the <code>dir</code> command in MS Windows (or more specifically in DOS), or the <code>ls</code> command on Unix/Linux,
we would like to implement a Node.js script, that give a directory, can list the content of the directory with
some more information about each entry in the directory.</p>
<p>We already know <a href="/system-information-about-a-file-or-directory-in-nodejs">how to get information from the inode of a file or directory</a>,
so if we only need to generated all the entries in a directory and then call <a href="http://nodejs.org/api/fs.html#fs_fs_stat_path_callback">fs.stat</a>
for each entry.</p>
<p>This script will accept (and even require) a path to a directory on the command line,
and then it will list the content of the directory. (Without recursion.)</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/read_dir.js">examples/node/read_dir.js</a></strong></p>
<pre><code class="language-js">var fs = require('fs');


if (process.argv.length &lt;= 2) {
    console.log(&quot;Usage: &quot; + __filename + &quot; path/to/directory&quot;);
    process.exit(-1);
}

var path = process.argv[2];

fs.readdir(path, function(err, items) {
    console.log(items);

    for (var i=0; i&lt;items.length; i++) {
        console.log(items[i]);
    }
});


</code></pre>
<p>If you have read the article about the <a href="/system-information-about-a-file-or-directory-in-nodejs">fetching system information for a single file</a>
then you already know the first part of the script. The interesting new part is this one:</p>
<pre><code class="language-javascript">fs.readdir(path, function(err, items) {
    console.log(items);

    for (var i=0; i&lt;items.length; i++) {
        console.log(items[i]);
    }
});
</code></pre>
<p>Here we use the <a href="http://nodejs.org/api/fs.html#fs_fs_readdir_path_callback">readdir</a> method of the <a href="http://nodejs.org/api/fs.html">fs class</a>,
that gets a path and a callback function as parameters. It will read the content of the directory into memory and when done it will execute the callback with 2 parameters.
The first one is the error object in case there was an error. The second one is a callback that will be called when the the operation has finished.
If there was an error then the first parameter will hold that information. If everything went well, then the second parameter will be an array with
all the items (files, directories, symbolic links, etc.) that were found in the directory.</p>
<p>At that point, inside the callback function we can either just print the whole array - if we just want to enjoy our success or we can iterate over
the list with a <code>for</code> loop and do something with each item. For example we could print each item.</p>
<p>The listing will contain everything, except of <code>.</code> which point to the current directory and <code>..</code> which represents the parent directory.</p>
<p>This is how it looked:</p>
<pre><code>$ node examples/node/read_dir.js ~/work/code-maven.com/examples/

[ 'blocking-read-file.js',
  'node_hello_world.js',
  'node_hello_world_port.js',
  'non-blocking-read-file.js',
  'process_exit.js',
  'raw_command_line_arguments.js',
  'read_dir.js',
  'stats.js' ]
blocking-read-file.js
node_hello_world.js
node_hello_world_port.js
non-blocking-read-file.js
process_exit.js
raw_command_line_arguments.js
read_dir.js
stats.js
</code></pre>
<h2 class="title is-4">Listing the details of each entry</h2>
<p>Now that we know how to get the list of entries in a directory, and that we already know how to
<a href="/system-information-about-a-file-or-directory-in-nodejs">fetch the details about a file</a>
we can combine the two.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/list_dir_direct.js">examples/node/list_dir_direct.js</a></strong></p>
<pre><code class="language-js">var fs = require('fs');

if (process.argv.length &lt;= 2) {
    console.log(&quot;Usage: &quot; + __filename + &quot; path/to/directory&quot;);
    process.exit(-1);
}

var path = process.argv[2];

fs.readdir(path, function(err, items) {
    for (var i=0; i&lt;items.length; i++) {
        var file = path + '/' + items[i];
        console.log(&quot;Start: &quot; + file);

        fs.stat(file, function(err, stats) {
            console.log(file);
            console.log(stats[&quot;size&quot;]);
        });
    }
});



</code></pre>
<p>This code is quite straight forward. And it is also wrong as we'll see soon.</p>
<p>Inside the callback of the <code>readdir</code> method,
we have the <code>for</code> loop. In that for-loop, on every iteration we print out the name
of the current file (after we have attached it to the full path of the directory) mostly
for debugging purposes, and we call the <code>fs.stat</code>. That method in turn accepts a callback function.
In that function we print out the name of the file - this time as part of the result,
and then print out the size of the thing. (We could print out all the other
details as we did in the <a href="/system-information-about-a-file-or-directory-in-nodejs">other article</a>
but the size will be enough for now.</p>
<p>The output:</p>
<pre><code>$ node examples/node/list_dir_direct.js ~/work/code-maven.com/examples/

Start: /home/gabor/work/code-maven.com/examples//blocking-read-file.js
Start: /home/gabor/work/code-maven.com/examples//node_hello_world.js
Start: /home/gabor/work/code-maven.com/examples//node_hello_world_port.js
Start: /home/gabor/work/code-maven.com/examples//non-blocking-read-file.js
Start: /home/gabor/work/code-maven.com/examples//process_exit.js
Start: /home/gabor/work/code-maven.com/examples//raw_command_line_arguments.js
Start: /home/gabor/work/code-maven.com/examples//read_dir.js
Start: /home/gabor/work/code-maven.com/examples//stats.js

/home/gabor/work/code-maven.com/examples//stats.js
97
/home/gabor/work/code-maven.com/examples//stats.js
243
/home/gabor/work/code-maven.com/examples//stats.js
270
/home/gabor/work/code-maven.com/examples//stats.js
151
/home/gabor/work/code-maven.com/examples//stats.js
18
/home/gabor/work/code-maven.com/examples//stats.js
324
/home/gabor/work/code-maven.com/examples//stats.js
27
/home/gabor/work/code-maven.com/examples//stats.js
1382
</code></pre>
<p>The debugging printout printed the names as expected, but then inside the
callback of <code>fs.stat()</code> we keep printing out the same filename.
comparing the results to the output of</p>
<pre><code>$ ls -l ~/work/code-maven.com/examples/
total 64
-rw-r--r--  1 gabor  staff    97 Jan 29 14:26 blocking-read-file.js
-rw-r--r--  1 gabor  staff   243 Jan 27 12:34 node_hello_world.js
-rw-r--r--  1 gabor  staff   270 Jan 27 12:34 node_hello_world_port.js
-rw-r--r--  1 gabor  staff   151 Jan 29 14:26 non-blocking-read-file.js
-rw-r--r--  1 gabor  staff    18 Jan 31 08:24 process_exit.js
-rw-r--r--  1 gabor  staff    27 Jan 29 14:54 raw_command_line_arguments.js
-rw-r--r--  1 gabor  staff   324 Jan 31 15:26 read_dir.js
-rw-r--r--  1 gabor  staff  1382 Jan 31 10:45 stats.js
</code></pre>
<p>The sizes seem to match the filenames, because these were printed in the same order
as we called <code>fs.stat()</code>, but for some reason the content of the <code>file</code>
variable was the same for every callback. This happens because the <code>file</code>
variable is just a simple global variable (from the point of view of the
callback) and by the time the first callback was executed, the <code>file</code> variable was
already assigned the last entry in the directory.</p>
<p>So if we want to combine the name of the file and the result of the <code>fs.stat()</code> call
then we need to rely on the order of calls. But can we rely on that?
In this particular case of calling stat on items in a single directory,
this might work as we can expect the events to be handled one after the other, but
if the operation was more complex, and especially if there can be internal callbacks as well,
then suddenly we cannot rely on the order of callback calls to be the same as the order
of the initial execution was.</p>
<p>So we need to find a way to pass the <code>file</code> parameter to the internal callback.</p>
<h2 class="title is-4">Generate callbacks</h2>
<p>In this solution, instead of adding a hard-coded callback function
we will call a function named <code>generate_callback()</code> that
will generate a callback for us.</p>
<p>So every time we run <code>fs.stat()</code>, before <code>fs.stat()</code> is actually executed,
JavaScript will call the <code>generate_callback()</code> function with the current value of <code>file</code>.
The <code>generate_callback</code> will create a new function and will return that function. This
newly generated function will become the callback of the <code>fs.stat()</code> method.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/list_dir_generate.js">examples/node/list_dir_generate.js</a></strong></p>
<pre><code class="language-js">var fs = require('fs');

if (process.argv.length &lt;= 2) {
    console.log(&quot;Usage: &quot; + __filename + &quot; path/to/directory&quot;);
    process.exit(-1);
}

var path = process.argv[2];

fs.readdir(path, function(err, items) {
    for (var i=0; i&lt;items.length; i++) {
        var file = path + '/' + items[i];

        console.log(&quot;Start: &quot; + file);
        fs.stat(file, generate_callback(file));
    }
});

function generate_callback(file) {
    return function(err, stats) {
            console.log(file);
            console.log(stats[&quot;size&quot;]);
        }
};


</code></pre>
<p>The result:</p>
<pre><code>$ node examples/node/list_dir_generate.js ~/work/code-maven.com/examples/
Start: /Users/gabor/work/code-maven.com/examples//blocking-read-file.js
Start: /Users/gabor/work/code-maven.com/examples//node_hello_world.js
Start: /Users/gabor/work/code-maven.com/examples//node_hello_world_port.js
Start: /Users/gabor/work/code-maven.com/examples//non-blocking-read-file.js
Start: /Users/gabor/work/code-maven.com/examples//process_exit.js
Start: /Users/gabor/work/code-maven.com/examples//raw_command_line_arguments.js
Start: /Users/gabor/work/code-maven.com/examples//read_dir.js
Start: /Users/gabor/work/code-maven.com/examples//stats.js

/Users/gabor/work/code-maven.com/examples//blocking-read-file.js
97
/Users/gabor/work/code-maven.com/examples//node_hello_world.js
243
/Users/gabor/work/code-maven.com/examples//node_hello_world_port.js
270
/Users/gabor/work/code-maven.com/examples//non-blocking-read-file.js
151
/Users/gabor/work/code-maven.com/examples//process_exit.js
18
/Users/gabor/work/code-maven.com/examples//raw_command_line_arguments.js
27
/Users/gabor/work/code-maven.com/examples//read_dir.js
324
/Users/gabor/work/code-maven.com/examples//stats.js
1382
</code></pre>
<p>The variable <code>file</code> that is now seen by the callback function
holds the value of <code>file</code> when the function was generated
which is the name of the file the <code>fs.stat()</code> received as parameter.</p>
<h2 class="title is-4">Nameless function generator</h2>
<p>Finally let's look at a solution in which we have eliminated the
need to have an external function called <code>generate_callback</code>.</p>
<p>The function is still there, it just does not have a name.
Instead of declaring it separately, we have included it in
the expression in <code>fs.stat()</code>. I am not sure if I like this
or if I prefer the lengthier, but probably more readable version
with the <code>generate_callback</code> function.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/list_dir_noname.js">examples/node/list_dir_noname.js</a></strong></p>
<pre><code class="language-js">var fs = require('fs');

if (process.argv.length &lt;= 2) {
    console.log(&quot;Usage: &quot; + __filename + &quot; path/to/directory&quot;);
    process.exit(-1);
}

var path = process.argv[2];

fs.readdir(path, function(err, items) {
    for (var i=0; i&lt;items.length; i++) {
        var file = path + '/' + items[i];

        console.log(&quot;Start: &quot; + file);
        fs.stat(file, function(f) {
            return function(err, stats) {
               console.log(f);
               console.log(stats[&quot;size&quot;]);
            }
        }(file));
    }
});


</code></pre>
<h2 class="title is-4">Comments</h2>
<p>Thanks!</p>
<p>It's worth noting though that for resolving the issue with the filename we could just replace &quot;var&quot; with &quot;let&quot; on line 12:
let file = path + '/' + items[i];</p>
<p>The closure here is just a workaround we had to use before ES2015.</p>
<hr />
<p>This answer doesn't answer how to scan the sub-directories too...</p>
<hr />
<h2 class="title is-4">You would do that recursively using for loop in his fs.readdir block. You would just need to check the &quot;file&quot; type and run fs.readdir again if it's a directory.</h2>
<p>I know, but you can do it too, and update the post and code as well, so that people can get benefit in both ways, it will improve your post as well. :-)</p>
<hr />
<p>You saved my life man! Thanks a lot!</p>
<hr />
<p>Thank you for sharing your coding practice.</p>
<hr />
<p>thanks alot ...@Gabor Szabo</p>
<hr />
<p>I can't tell if my comment actually posted, but what is the date on this article? There's some outdated code like <code>var</code>, so I wonder what else is outdated, as I'm just learning fs.</p>
<hr />
<p>hello, maybe we can use the let with the local scope in for loop?
also thanks a lot for good demonstrating the var global scope</p>
<hr />
<p>I made a node module to automate this task: [mddir][1]</p>
<h1 class="title">Usage</h1>
<p>node mddir &quot;../relative/path/&quot;</p>
<p>To install: npm install mddir -g</p>
<p>To generate markdown for current directory: mddir</p>
<p>To generate for any absolute path: mddir /absolute/path</p>
<p>To generate for a relative path: mddir ~/Documents/whatever.</p>
<p>The md file gets generated in your working directory.</p>
<p>Currently ignores node_modules, and .git folders.</p>
<h1 class="title">Troubleshooting</h1>
<p>If you receive the error 'node\r: No such file or directory', the issue is that your operating system uses different line endings and mddir can't parse them without you explicitly setting the line ending style to Unix. This usually affects Windows, but also some versions of Linux. Setting line endings to Unix style has to be performed within the mddir npm global bin folder.</p>
<h1 class="title">Line endings fix</h1>
<p>Get npm bin folder path with:</p>
<pre><code>npm config get prefix
</code></pre>
<p>Cd into that folder</p>
<p>brew install dos2unix</p>
<p>dos2unix lib/node_modules/mddir/src/mddir.js</p>
<p>This converts line endings to Unix instead of Dos</p>
<p>Then run as normal with: node mddir &quot;../relative/path/&quot;.</p>
<h3 class="title is-5">Example generated markdown file structure 'directoryList.md'</h3>
<p>|-- .bowerrc
|-- .jshintrc
|-- .jshintrc2
|-- Gruntfile.js
|-- README.md
|-- bower.json
|-- karma.conf.js
|-- package.json
|-- app
|-- app.js
|-- db.js
|-- directoryList.md
|-- index.html
|-- mddir.js
|-- routing.js
|-- server.js
|-- _api
|-- api.groups.js
|-- api.posts.js
|-- api.users.js
|-- api.widgets.js
|-- _components
|-- directives
|-- directives.module.js
|-- vendor
|-- directive.draganddrop.js
|-- helpers
|-- helpers.module.js
|-- proprietary
|-- factory.actionDispatcher.js
|-- services
|-- services.cardTemplates.js
|-- services.cards.js
|-- services.groups.js
|-- services.posts.js
|-- services.users.js
|-- services.widgets.js
|-- _mocks
|-- mocks.groups.js
|-- mocks.posts.js
|-- mocks.users.js
|-- mocks.widgets.js</p>
<p><a href="https://www.npmjs.com/package/mddir">https://www.npmjs.com/package/mddir</a></p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How to get system information of a file or directory in Node.js (stat)</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-01-31T11:30:01Z</updated>
    <pubDate>2015-01-31T11:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/system-information-about-a-file-or-directory-in-nodejs" />
    <id>https://code-maven.com/system-information-about-a-file-or-directory-in-nodejs</id>
    <content type="html"><![CDATA[<p>The Unix/Linux <code>ls</code> command can provide all kinds of details about a file or a directory
or symbolic link or some other things that can be on the file-system. Specifically using the <code>-l</code>
flag it can show the type of thing we are listing (file/directory/symbolic link/etc), whether it
is readable, writable, executable etc.</p>
<p>In general, it can fetch information from the <a href="http://en.wikipedia.org/wiki/Inode">inode</a> table,
which is not the Apple version of Node.js.</p>
<p>Before attempting to re-implement the <code>ls</code> unix command, let's see how can we fetch the details
of a single file-system entry using Node.js.</p>
<p>The <a href="http://nodejs.org/api/fs.html">fs</a> library that comes with Node.js provides a non-blocking
method called <a href="http://nodejs.org/api/fs.html#fs_fs_stat_path_callback">stat</a>, that given
a path to something on he file-system, will fetch the information from the <b>inode</b> of that thing
and when done, will execute the callback provided to the method. It will path a
<a href="http://nodejs.org/api/fs.html#fs_class_fs_stats">fs.Stats</a> object to the callback.</p>
<p>There is also a <a href="http://nodejs.org/api/fs.html#fs_fs_statsync_path">synchronous version called statSync</a>
that will, return the <a href="http://nodejs.org/api/fs.html#fs_class_fs_stats">fs.Stats</a> object, once the
data was read from the file-system.</p>
<p>In this script we can see how to use the asynchronous version of this method:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/stats.js">examples/node/stats.js</a></strong></p>
<pre><code class="language-js">var fs = require('fs');

if (process.argv.length &lt;= 2) {
    console.log(&quot;Usage: &quot; + __filename + &quot; path/to&quot;);
    process.exit(-1);
}

var path = process.argv[2];

fs.stat(path, function(err, stats) {
    console.log(path);
    console.log();
    console.log(stats);
    console.log();

    if (stats.isFile()) {
        console.log('    file');
    }
    if (stats.isDirectory()) {
        console.log('    directory');
    }

    console.log('    size: ' + stats[&quot;size&quot;]);
    console.log('    mode: ' + stats[&quot;mode&quot;]);
    console.log('    others eXecute: ' + (stats[&quot;mode&quot;] &amp; 1 ? 'x' : '-'));
    console.log('    others Write:   ' + (stats[&quot;mode&quot;] &amp; 2 ? 'w' : '-'));
    console.log('    others Read:    ' + (stats[&quot;mode&quot;] &amp; 4 ? 'r' : '-'));

    console.log('    group eXecute:  ' + (stats[&quot;mode&quot;] &amp; 10 ? 'x' : '-'));
    console.log('    group Write:    ' + (stats[&quot;mode&quot;] &amp; 20 ? 'w' : '-'));
    console.log('    group Read:     ' + (stats[&quot;mode&quot;] &amp; 40 ? 'r' : '-'));

    console.log('    owner eXecute:  ' + (stats[&quot;mode&quot;] &amp; 100 ? 'x' : '-'));
    console.log('    owner Write:    ' + (stats[&quot;mode&quot;] &amp; 200 ? 'w' : '-'));
    console.log('    owner Read:     ' + (stats[&quot;mode&quot;] &amp; 400 ? 'r' : '-'));


    console.log('    file:           ' + (stats[&quot;mode&quot;] &amp; 0100000 ? 'f' : '-'));
    console.log('    directory:      ' + (stats[&quot;mode&quot;] &amp; 0040000 ? 'd' : '-'));



});



</code></pre>
<p>The expected use of the script is <code>node examples/node/stats.js path/to/file</code>.</p>
<p>For example I ran <code>node examples/node/stats.js examples</code> providing the 'examples'
directory as the parameter and got the following output:</p>
<pre><code>examples

{ dev: 16777220,
  mode: 16877,
  nlink: 11,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 32548075,
  size: 374,
  blocks: 0,
  atime: Sat Jan 31 2015 10:56:30 GMT+0200 (IST),
  mtime: Sat Jan 31 2015 10:52:13 GMT+0200 (IST),
  ctime: Sat Jan 31 2015 10:52:13 GMT+0200 (IST) }

    directory
    size: 374
    mode: 16877
    others eXecute: x
    others Write:   -
    others Read:    r
    group eXecute:  x
    group Write:    w
    group Read:     r
    owner eXecute:  x
    owner Write:    w
    owner Read:     r
    file:           -
    directory:      d
</code></pre>
<p>We can compare that with the output of the appropriate Unix <code>ls</code> command:</p>
<pre><code>$ ls -ld examples
drwxr-xr-x  11 gabor  staff  374 Jan 31 10:52 examples
</code></pre>
<p>Let's take that script apart:</p>
<pre><code class="language-javascript">var fs = require('fs');

if (process.argv.length &lt;= 2) {
    console.log(&quot;Usage: &quot; + __filename + &quot; path/to&quot;);
    process.exit(-1);
}

var path = process.argv[2];
</code></pre>
<p>After loading the <code>fs</code> module, we check the number of <a href="/argv-raw-command-line-arguments-in-nodejs">arguments passed on the command line</a>.
If it is 2 or fewer (and I am not even sure fewer would be possible), that means the user has not give any command line parameters.
(If the user wrote <code>node examples/node/stats.js</code> then this number will be 2.) In that case we print out a usage-message that looks like this:</p>
<pre><code>$ node examples/node/stats.js
Usage: /home/gabor/code-maven/examples/node/stats.js path/to
</code></pre>
<p>The global variable <code>__filename</code> (starting with two underscores) contains the full path to the current JavaScript file.</p>
<p>Then we call <code>process.exit()</code> to <a href="/how-to-exit-a-nodejs-script">leave the Node.js script</a> early.
Before reaching the end of the file.</p>
<p>The last step in this part of the code is to fetch element 3 of the <code>argv</code> which is the value the user has passed on the
command line, and assign it to a variable called <code>path</code>.</p>
<h2 class="title is-4">Calling fs.stat</h2>
<p>Then we call the <a href="http://nodejs.org/api/fs.html#fs_fs_stat_path_callback">stat</a> method, passing
the <code>path</code> variable and the callback. This callback function will receive and error-object - if there was an error,
and a <a href="http://nodejs.org/api/fs.html#fs_class_fs_stats">fs.Stats</a> object.</p>
<pre><code class="language-javascript">fs.stat(path, function(err, stats) {
</code></pre>
<p>The <code>Stats</code> object contains some data retrieved from the inode table (in our case it looked like this:)</p>
<pre><code>{ dev: 16777220,
  mode: 16877,
  nlink: 11,
  uid: 501,
  gid: 20,
  rdev: 0,
  blksize: 4096,
  ino: 32548075,
  size: 374,
  blocks: 0,
  atime: Sat Jan 31 2015 10:56:30 GMT+0200 (IST),
  mtime: Sat Jan 31 2015 10:52:13 GMT+0200 (IST),
  ctime: Sat Jan 31 2015 10:52:13 GMT+0200 (IST) }
</code></pre>
<p>and it provides a few methods for more convenience.</p>
<p>Among the values that we got there <code>dev</code> is the device number. It might be interesting if you have
multiple disks or partitions mounted.</p>
<p><code>mode</code> contains a lot of information, including the type of the thing (file/directory/symbolic link)
and the permissions on that thing.</p>
<p><code>uid</code> is the user-id of the owner of this thing.</p>
<p><code>gid</code> is the group-id of the owner of this thing.</p>
<p><code>size</code> is, the size of the thing in bytes.</p>
<p><code>atime</code>, <code>mtime</code>, and <code>ctime</code> are 3 different timestamps representing the last
access time, the last modify time and the create time of the thing.</p>
<p>Before checking out the value of <code>mode</code>, let's see a few helper functions:</p>
<p><code>isFile()</code> will return <code>True</code> if the thing is a file.</p>
<p><code>isDirectory()</code> will return <code>True</code> it the thing is a directory.</p>
<p>There are a few more such helper functions listed in <a href="http://nodejs.org/api/fs.html#fs_class_fs_stats">documentation of fs.Stat</a>.</p>
<p>The other values of the stat object can be accessed just as regular members of any JavaScript object.
For example it is easy to access the size of the file:</p>
<h2 class="title is-4">Size of a file in Node.js</h2>
<pre><code class="language-javascript">console.log('    size: ' + stats[&quot;size&quot;]);
</code></pre>
<h2 class="title is-4">Mode and file access rights</h2>
<p><a href="http://man7.org/linux/man-pages/man2/stat.2.html">man 2 stat</a> provides information on how to interpret
the values in <code>mode</code> which was 16877 in our case.</p>
<p>We need to use special bitwise masks on that number to check if specific bits are on or off in that number.
For example <code>mode &amp; 1</code> will be 1 if the right-most bit in <code>mode</code> was on. Otherwise this will be 0.</p>
<p><code>mode &amp; 2</code> will be 2 if he second bit from the right was on, and 0 if it was not.</p>
<p><code>mode &amp; 4</code> will be 4 if he third(!) bit from the right was on, and 0 if it was not.</p>
<p>Luckily numbers, except of 0, are considered True in JavaScript. So we could use the
ternary operator <code>?:</code> to returns some interesting character if the expression is different from 0
and return <code>-</code> if the expression was 0.</p>
<p>That's how our output resembles (in the usage of <code>rwx-</code> characters) to the output of <code>ls -ld</code>.</p>
<p>Besides the read-write-execute flags, we can also extract the file-type from the the <code>mode</code>
value, but for those we have already seen a set of more readable convenience methods.</p>
<h2 class="title is-4">Comments</h2>
<p>I read the article several times, but I could not associate the same in my need, I need inside a folder to get the name of the last created file</p>
<hr />
<p>It is much easier to use stat-mode in order to get the user/group/others permissions <a href="https://www.npmjs.com/package/stat-mode">https://www.npmjs.com/package/stat-mode</a></p>
<hr />
<p>Can anyone Answer me?
I have List of files in the folder. i need to read the file from the folder while if i met criteria , i have to come out from the function and update the document.Ultimately i dont need to read all the files when condition met. using Node.js?</p>
<hr />
<p>Group and Owner permissions check looks wrong. Group execute should be stats[&quot;mode&quot;] &amp; 8, write should be stats[&quot;mode&quot;] &amp; 16 and so forth.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>How to exit a Node.js script</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-01-31T08:30:01Z</updated>
    <pubDate>2015-01-31T08:30:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/how-to-exit-a-nodejs-script" />
    <id>https://code-maven.com/how-to-exit-a-nodejs-script</id>
    <content type="html"><![CDATA[<p>Normally a Node.js script stops running when it reaches the end of the script and when there are no more event handlers waiting for events.
What if you want the script to stop earlier?</p>
<p>It's quite easy.</p>
<p>The built-on <a href="http://nodejs.org/api/process.html">process</a> module has a method
called <a href="http://nodejs.org/api/process.html#process_process_exit_code">exit</a>:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/process_exit.js">examples/node/process_exit.js</a></strong></p>
<pre><code class="language-js">process.exit(-1);

</code></pre>
<h2 class="title is-4">Comments</h2>
<p>ctrl+C twice</p>
<p>or type:</p>
<p>.exit</p>
<hr />
<p>nice</p>
<hr />
<p>It was just what I was looking for. Thank you very very much</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>argv - raw command line arguments in Node.js</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-01-29T16:00:01Z</updated>
    <pubDate>2015-01-29T16:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/argv-raw-command-line-arguments-in-nodejs" />
    <id>https://code-maven.com/argv-raw-command-line-arguments-in-nodejs</id>
    <content type="html"><![CDATA[<p>People coming from the JavaScript client-side development world did not have to deal with the command line,
but if you write a server side application, then you have good chances you'll have to reach the Linux/Unix
command line. (And if you are not lucky then you might even need to deal with command line on MS Windows.)</p>
<p>Node.js provides an easy way to access the raw data passed on the command line.</p>
<p>Normally on the command line you could pass all kinds of values:</p>
<p>A list of names: <code>node app.js file1 file2</code></p>
<p>Key-value pairs:  <code>node app.js --port NUMBER --dir PATH</code></p>
<p>Flags, without a value: <code>node app.js --debug --verbose</code></p>
<p>You might also want to be able to provide short names: <code>node app.js -d -v</code></p>
<p>And you would also like to be able to combine all these: <code>node app.js -dv --port NUMBER --dir PATH  file1 file2</code></p>
<p>By default Node.js provide an object called <a href="http://nodejs.org/api/process.html#process_process_argv">process</a>
that has an element called <a href="http://nodejs.org/api/process.html#process_process_argv">argv</a> which is an
array holding the list of everything provided on the command line:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/raw_command_line_arguments.js">examples/node/raw_command_line_arguments.js</a></strong></p>
<pre><code class="language-js">console.log(process.argv);

</code></pre>
<p>Note: you don't even have to load <code>process</code> at it is in your process by default.</p>
<p>Running this command: <code>node examples/node/raw_command_line_arguments.js -dv --port NUMBER --dir PATH  file1 file2</code></p>
<p>will print out this:</p>
<pre><code>[ 'node',
  '/Users/gabor/work/code-maven.com/examples/node/raw_command_line_arguments.js',
  '-dv',
  '--port',
  'NUMBER',
  '--dir',
  'PATH',
  'file1',
  'file2' ]
</code></pre>
<p>Note:</p>
<p>The first element is always <code>node</code> itself.</p>
<p>The second element is always the file being executed.</p>
<p>The rest of the elements are the values supplied on the command line after the name of the file being executed.</p>
<p>Basically this is the list of all the values that were typed in on the command line.</p>
<p>You can loop over the array using <code>for</code> or <code>forEach</code> and extract the values.
This might work well in the most simple cases, but once the parameters become complex, it will
be better to use a higher level library.</p>
<p>I found a <a href="https://www.npmjs.com/package/minimist">minimist</a>,
<a href="https://github.com/harthur/nomnom">nomnom</a>, and
<a href="https://github.com/chevex/yargs">yargs</a>
(the successor of <a href="https://github.com/substack/node-optimist">node-optimist</a>)
just to name a few.</p>
<p>I don't have an opinion them yet, but I guess one I'll need something complex, I'll have to
check them out.</p>
<h2 class="title is-4">A useful snippet for command line scripts</h2>
<p>When you don't need to process lots of command line options, but you still would like to make sure
the user provides a value on the command line you can use the following snippet:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/argv.js">examples/node/argv.js</a></strong></p>
<pre><code class="language-js">if (process.argv.length &lt;= 2) {
    console.log(&quot;Usage: &quot; + __filename + &quot; SOME_PARAM&quot;);
    process.exit(-1);
}

var param = process.argv[2];

console.log('Param: ' + param);



</code></pre>
<p>In this example we check if the number of elements in the <code>process.argv</code> array is less then or
equal to 2. I don't know if it can be ever less than 2, but if it is only 2, then we know the user
has not supplied any parameter on the command line. Then we print out the string &quot;Usage: &quot;,
followed by the name of our file (<code>__filename</code> contains the name of the current file) followed by
some indication of what we expect. Instead of &quot; SOME_PARAM&quot; you might want to add some more descriptive
string there. For example &quot;MACHINE_NAME&quot; if you are expecting the name of a machine, or &quot;URL&quot; if you
are expecting a URL.</p>
<p>Then we <a href="/how-to-exit-a-nodejs-script">exit</a> the code, as without that parameter there is no point in executing the rest of the code.</p>
<p>The rest of the code, can be of course anything you want. In our case we only have
<code>console.log('Param: ' + param);</code> to indicate we reached that point.</p>
<p>This is how the execution works:</p>
<pre><code>$ node argv.js 
Usage: /home/gabor/code-maven/examples/node/argv.js SOME_PARAM
</code></pre>
<pre><code>$ node argv.js hello
Param: hello
</code></pre>
<h2 class="title is-4">Comments</h2>
<p>thanks for awesome and simple entry guide</p>
<hr />
<p>Just used this to troubleshoot a problem in someone else's code. One of the arguments wasn't being passed correctly on the command line. Thanks!</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Reading a file with Node.js - blocking and non-blocking</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-01-29T11:45:01Z</updated>
    <pubDate>2015-01-29T11:45:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/reading-a-file-with-nodejs" />
    <id>https://code-maven.com/reading-a-file-with-nodejs</id>
    <content type="html"><![CDATA[<p>If we want to build a web-server using Node.js, or basically any application, then
one of the important things is to be able to read the content of a file.</p>
<p>Node provides the <a href="http://nodejs.org/api/fs.html">fs</a> library to handle file-system related operations.
For example to read the content of a file.</p>
<h2 class="title is-4">Read file in asynchronously (non-blocking)</h2>
<p>The &quot;normal&quot; way in Node.js is probably to read in the content of a file in a non-blocking, asynchronous way.
That is, to tell Node to read in the file, and then to get a callback when the file-reading has been finished.
That would allow us to hand several requests in parallel.</p>
<p>For this we can use the <a href="http://nodejs.org/api/fs.html#fs_fs_readfile_filename_options_callback">readFile</a>
method of the <code>fs</code> class.</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/non-blocking-read-file.js">examples/node/non-blocking-read-file.js</a></strong></p>
<pre><code class="language-js">var fs = require('fs');

fs.readFile('DATA', 'utf8', function(err, contents) {
    console.log(contents);
});

console.log('after calling readFile');


</code></pre>
<p>First we load the <code>fs</code> class using the <code>require</code> command. Then we call the <code>readFile</code> method
that gets 3 parameters: The name of the file ('DATA' in this case), the encoding of the file ('utf8' in the examples),
and a function. This function is going to be called when the file-reading operation has finished.
The function will get two parameters. The first is the information about any error conditions, the second is the actual
content of the file.</p>
<p>Once this is called Node starts to read the file in the background, but it also keeps executing our program. That is,
it will call the <code>console.log('after calling readFile');</code> and will print that text to the console.
Then, once the file has been read into memory, Node will run the function we provided to the <code>readFile</code> method
and that will print the content of the file.</p>
<h2 class="title is-4">Read file in synchronously (blocking)</h2>
<p>People coming from almost every other programming language and environment will find the synchronous file-reading
operation clearer. I am not sure when will you want to use synchronous operations in Node.js, but I see
that many of the asynchronous functions have a synchronous counterpart, so there might be a use.</p>
<p>For reading a file you can use the <a href="http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_options">readFileSync</a>
method of the <code>fs</code> class:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/blocking-read-file.js">examples/node/blocking-read-file.js</a></strong></p>
<pre><code class="language-js">var fs = require('fs');

var contents = fs.readFileSync('DATA', 'utf8');
console.log(contents);


</code></pre>
<h2 class="title is-4">Comments</h2>
<p>The parameter really shouldn't be called 'DATA', should be 'filePath' or sth else self-explanatory.</p>
<hr />
<p>really, it's brings some misunderstoods. It would be better name like 'test.txt', or './test.txt', for example, But despite, THanks a lot. Awesome tutorial for newbies</p>
<hr />
<p>Thanks, good stuff!</p>
<hr />
<p>Noteworthy to say, since both versions return the complete content of the file at once they only work as long as the result fits into a string. (At least when you specify a text encoding like utf8.) So usually that means everything works fine until your file hits 256 mb and none of these functions work anymore.</p>
<hr />
<p>Thank you! Great quick read, exactly what I needed.</p>
<hr />
<p>I'll give you an example of Synchronous operations being amazingly useful, simple building! NodeJS isn't only run on the server or busy powering platforms like Electron. It's also good for simple scripting. I want to write a simple script that pulls in 2 files and outputs them as one and don't want to leverage huge tools like Webpack, Gulp, or Grunt for something tiny and simple. So Synchronous NodeJS to the rescue!</p>
<hr />
<h2 class="title is-4">That's orthogonal to async vs. sync; it's just as easy to do it async in scripts.</h2>
<p>I guess you've never really experienced &quot;call-back&quot; hells yet. await makes things so much cleaner and easier, not only for yourself, but all current and future devs involved in the project.</p>
<hr />
<p>Nice post, short and sweet. 👍🍓</p>
<hr />
<p>&quot; I am not sure when will you want to use synchronous operations in Node.js&quot; depends what you are building.. if you are building a dev tool for instance then there is often no need to use the async option, just more code you have to write for no reason as there will only ever be 1 person running the code at any one time.</p>
<hr />
<p>Explained in simple words and with simple code. Nice - thanks!</p>
<hr />
<p>readFileSync and readSync are non-blocking read functions. when there is no data to read, they return an empty buffer. try readSync(0, Buffer.alloc(1), 0, 1, -1) to read 1 byte from stdin</p>
<hr />
<p>Can you please explain, how many different files we can process if suppose we have 4 cors CPU?
I know it's a little bit off the topic, but I just wanted to clarify.</p>
<hr />
<p>The use case is this - People coming from almost every other programming language and environment will find the synchronous file-reading operation clearer.</p>
<hr />
<p>what if I wanted to save a token and reuse it with a callback function? could I use read/write for this case scenario?</p>
<hr />
<p>Good info</p>
<hr />
<p>Thank you very much for this post!!!!!!!!!!!!!</p>
<hr />
<p>fs blocking is faster than async blocking in the long run.</p>
<hr />
<p>If we read file in sync and call this API a thousand times can we see program API halting nature due to blocking operation?</p>
<hr />
<p>it depends on where the file is, and what the file is, we can't do anything while reading this file in the sync mode.</p>
<hr />
<p>Thanks Gabor! Thanks God!</p>
<hr />
<p>You could have put out the explanations on when to use sync and when to use async.
Advantages and disadvantages etc..</p>
<hr />
<p>This code is so outdated, I don't know why it keeps coming up at the top of Google searches for Node.</p>
<hr />
<p>What's your alternative? Complaining without anything actionable is pointless. This is the most basic way to read a file in NodeJS.</p>
<hr />
<p>Seems pretty good to me. What would be the better alternative?</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Getting started with Node.js</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-01-28T12:40:01Z</updated>
    <pubDate>2015-01-28T12:40:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/getting-started-with-nodejs" />
    <id>https://code-maven.com/getting-started-with-nodejs</id>
    <content type="html"><![CDATA[<p>Having seen the beginning of a number of tutorials about Node.js, I thought I should also start with the simple &quot;Hello World&quot; example.</p>
<p>Before you can get started, you'll probably need to install <a href="http://nodejs.org/">Node.js</a>, but I don't want to
bog you down with such details. It was straight forward for me on OSX, and I have not tried it on other operating systems yet.</p>
<h2 class="title is-4">Hello World</h2>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/hello_world.js">examples/node/hello_world.js</a></strong></p>
<pre><code class="language-js">var http = require('http');

var s = http.createServer(function(request, response) {
    response.writeHead(200);
    response.write(&quot;Hello World&quot;);
    response.end();
});

s.listen(8080);

console.log(&quot;Listening on http://127.0.0.1:8080/&quot;);

</code></pre>
<p>In the first line of this example we load the <a href="http://nodejs.org/api/http.html">http</a> library that provides all the necessary to tools
to run a simple, non-blocking web server.</p>
<p>Then we create a server object using the <a href="http://nodejs.org/api/http.html#http_http_createserver_requestlistener">createServer</a> method of the <code>http</code> class we have just loaded.
This method receives a single parameter which is a function. Whenever a user will access our web-site this function will be called
receiving two parameters. The first one representing the current <code>request</code> and the second one representing the current <code>response</code>.</p>
<p>In this example we don't care what the user asked for (hence we don't look at the request object), we just give an answer.
First we set the response header which is the <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes">200 OK HTTP status code</a>
meaning &quot;everything is fine&quot;. Then we send back the actual content of our page, and finally we call the <code>end()</code> method
of the response object signaling the end of our response.</p>
<p>We took the server object that was created by the <code>createServer</code> method and assigned it to the <code>s</code> variable.
Then we called the <code>listen</code> method of this object launching the server.</p>
<p>Because Node.JS is non-blocking, this did not block our script, it just told the &quot;event-loop&quot; of Node.js to really start listening on
port 8080. The last line in the example was just a simple output to our console, (the command line where we run this code),
to notify the user where to point the browser.</p>
<p>Once I typed this in I was happy and ran my code:</p>
<p><code>node examples/node/hello_world.js</code></p>
<p>the output?</p>
<pre><code>Listening on http://127.0.0.1:8080/

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:905:11)
    at Server._listen2 (net.js:1043:14)
    at listen (net.js:1065:10)
    at Server.listen (net.js:1139:5)
    at Object.&lt;anonymous&gt; (/Users/gabor/work/articles/code-maven/examples/node/hello_world.js:9:3)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
</code></pre>
<p>It is lovely that it printed the &quot;Listening ....&quot; line on the console, but why did it crash?</p>
<p>It took me a while to figure out that I had another web server running and listening on port 8080 already.</p>
<p>I think it would have been much more useful if the exception included at least a hint about this being the problem.</p>
<p>Anyway, I changed the port number in <code>s.listen(8081);</code> and run the code again:</p>
<p><code>node examples/node/hello_world.js</code></p>
<p>It printed the following on the console and then waited.</p>
<pre><code>Listening on http://127.0.0.1:8080/
</code></pre>
<p>But why does it say it is listening on port 8080 while I told it to listen on 8081?</p>
<p>Oh, of course, the number 8080 appeared in two places of the code, and I have changed only one.</p>
<p>This violates one of the cornerstones of programming called <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY - Do Not Repeat Yourself</a>.
It would be better to keep the port number in some variable, and then use that variable in both places.</p>
<p>The new code is almost the same:</p>
<p><strong><a href="https://github.com/szabgab/perlmaven.com/tree/main/examples/node/hello_world_port.js">examples/node/hello_world_port.js</a></strong></p>
<pre><code class="language-js">var http = require('http');

var port = 8081;

var s = http.createServer(function(request, response) {
    response.writeHead(200);
    response.write(&quot;Hello World&quot;);
    response.end();
});

s.listen(port);

console.log(&quot;Listening on http://127.0.0.1:&quot; + port + &quot;/&quot;);


</code></pre>
<p>We run this:</p>
<p><code>node examples/node/hello_world_port.js</code></p>
<p>If I open a browser now, and point it to <a href="http://127.0.0.1:8081/">http://127.0.0.1:8081/</a> it will show &quot;Hello World&quot;.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Code Maven - for people who code</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-01-28T12:00:03Z</updated>
    <pubDate>2015-01-28T12:00:03Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/" />
    <id>https://code-maven.com/</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Welcome to the Code Maven!</h2>
<p>Helping you improve your programming and DevOps related knowledge to allow you to have
a better job with more satisfaction and higher salary.</p>
<h2 class="title is-4">The main topics in alphabetical order</h2>
<ul>
<li>
<p><a href="/angularjs">Angular JS</a> - some old articles about Angular 1.</p>
</li>
<li>
<p><a href="https://axum.code-maven.com/">Axum</a> a Rust-based web framework</p>
</li>
<li>
<p><a href="/ansible">Ansible</a> - the configuration management system.</p>
</li>
<li>
<p><a href="https://banner-builder.code-maven.com/">Banner Builder</a> (Rust Project)</p>
</li>
<li>
<p><a href="/shell">Bash</a> - the shell language of Unix/Linux.</p>
</li>
<li>
<p><a href="https://c.code-maven.com/">C Maven</a></p>
</li>
<li>
<p><a href="https://cpp.code-maven.com/">C++ Maven</a></p>
</li>
<li>
<p><a href="/net">C# .NET</a> - the language of Microsoft.</p>
</li>
<li>
<p><a href="https://crystal.code-maven.com/">Crystal</a> programming language.</p>
</li>
<li>
<p><a href="https://devops-workshops.code-maven.com/">DevOps Workshops</a> (old)</p>
</li>
<li>
<p><a href="https://events.code-maven.com/">Virtual Rust Events</a></p>
</li>
<li>
<p><a href="https://exercises.code-maven.com/">Exercises</a></p>
</li>
<li>
<p><a href="https://dart.code-maven.com/">Dart</a> programming language.</p>
</li>
<li>
<p><a href="/docker">Docker</a> - the de-facto standard in containers.</p>
</li>
<li>
<p><a href="https://python.code-maven.com/flask">Flask</a>, the Python microframework.</p>
</li>
<li>
<p><a href="https://forem.code-maven.com/">Forem stats</a> (DEV.to)</p>
</li>
<li>
<p><a href="https://front.code-maven.com/">Front-End Maven</a></p>
</li>
<li>
<p><a href="https://git.code-maven.com/">Git</a>, the most popular Open Source version control system.</p>
</li>
<li>
<p><a href="https://github.code-maven.com/">Experimental GitHub pages</a></p>
</li>
<li>
<p><a href="/go">Go - Golang</a>, the programming language created at Google.</p>
</li>
<li>
<p><a href="https://go.code-maven.com/">Go Golang</a></p>
</li>
<li>
<p><a href="https://groovy.code-maven.com/">Groovy</a>, the programming language used for Jenkins pipelines.</p>
</li>
<li>
<p><a href="/handlebars">Handlebars</a> the HTML templating system written in JavaScript.</p>
</li>
<li>
<p><a href="/java">Java</a></p>
</li>
<li>
<p><a href="https://java.code-maven.com/">Java</a>, the programming language.</p>
</li>
<li>
<p><a href="/javascript">JavaScript</a></p>
</li>
<li>
<p><a href="/jenkins">Jenkins</a>, the automation server used for Continuous Integration and Continuous Delivery.</p>
</li>
<li>
<p><a href="/linux">Linux</a></p>
</li>
<li>
<p><a href="https://linux.code-maven.com/">Linux</a>, the operating system.</p>
</li>
<li>
<p><a href="https://mdbook.code-maven.com/">Mdbook</a></p>
</li>
<li>
<p><a href="https://mdbooks.code-maven.com/">Mdbooks</a></p>
</li>
<li>
<p><a href="/nodejs">NodeJS</a></p>
</li>
<li>
<p><a href="https://perlmaven.com/">Perl</a> on the Perl Maven site.</p>
</li>
<li>
<p><a href="https://r.code-maven.com/">R Maven</a>, the R programming language.</p>
</li>
<li>
<p><a href="https://rust.code-maven.com/">Rust</a> on the Rust Maven site.</p>
</li>
<li>
<p><a href="/php">PHP</a></p>
</li>
<li>
<p><a href="https://php.code-maven.com/">PHP</a> programming language.</p>
</li>
<li>
<p><a href="https://python.code-maven.com/">Python Maven</a></p>
</li>
<li>
<p><a href="https://ruby.code-maven.com/">Ruby</a></p>
</li>
<li>
<p><a href="/svg">SVG</a>, Scalable Vector Graphics examples in JavaScript and Python.</p>
</li>
<li>
<p><a href="https://svg.code-maven.com/">SVG - Scalable Vector Graphics</a></p>
</li>
<li>
<p><a href="/programming-bootcamp-for-scientists">Programming Bootcamp for Scientists</a></p>
</li>
<li>
<p><a href="/exercises">Programming Exercises</a> for any language.</p>
</li>
<li>
<p><a href="/rnd">R&amp;D at $company</a> - interviews with engineering leaders</p>
</li>
<li>
<p><a href="/cmos">CMOS</a> - Code-Maven Open Source podcast</p>
</li>
<li>
<p><a href="/live">Live pair programming events</a></p>
</li>
</ul>
<h2 class="title is-4">Books</h2>
<ul>
<li>
<p><a href="/linode/">Linode</a></p>
</li>
<li>
<p><a href="/digital-ocean/">Digital Ocean</a></p>
</li>
<li>
<p><a href="/pair-programming/">Pair programming</a></p>
</li>
<li>
<p><a href="/real-world/">Real World</a></p>
</li>
<li>
<p><a href="/scratch/">Scratch</a></p>
</li>
<li>
<p><a href="/slack/">Slack</a></p>
</li>
<li>
<p><a href="/travis-ci/">Travis CI</a></p>
</li>
<li>
<p><a href="/agile/">Agile</a></p>
</li>
<li>
<p><a href="/ansible/">Ansible</a></p>
</li>
<li>
<p><a href="/aws-lambda/">AWS Lambda</a></p>
</li>
<li>
<p><a href="/google-gcp/">Google GCP</a></p>
</li>
<li>
<p><a href="/space-fight/">Space Fight</a></p>
</li>
<li>
<p><a href="/value/">Value</a></p>
</li>
<li>
<p><a href="/sql/">SQL</a></p>
</li>
<li>
<p><a href="/sqlite/">SQLite</a></p>
</li>
<li>
<p><a href="/typescript/">TypeScript</a></p>
</li>
<li>
<p><a href="/vim/">vim</a></p>
</li>
<li>
<p><a href="/web/">Web</a></p>
</li>
<li>
<p><a href="/windows/">Windows</a></p>
</li>
<li>
<p><a href="/appveyor/">Appveyor</a></p>
</li>
<li>
<p><a href="/circle-ci/">Circle-CI</a></p>
</li>
<li>
<p><a href="/bash/">Bash</a></p>
</li>
<li>
<p><a href="/bsd/">BSD - Better Software Development</a></p>
</li>
<li>
<p><a href="/docker/">Docker</a></p>
</li>
<li>
<p><a href="/ladino/">Ladino</a></p>
</li>
<li>
<p><a href="/raku/">Raku</a></p>
</li>
<li>
<p><a href="/mlops/">MLOps</a></p>
</li>
<li>
<p><a href="/osdc/">OSDC</a></p>
</li>
<li>
<p><a href="/programming/">Programming</a></p>
</li>
<li>
<p><a href="/jenkins/">Jenkins</a></p>
</li>
<li>
<p><a href="/linkedin/">LinkedIn</a></p>
</li>
<li>
<p><a href="/mobile/">Mobile</a></p>
</li>
<li>
<p><a href="/mongodb/">MongoDB</a></p>
</li>
<li>
<p><a href="/octave/">Octave</a></p>
</li>
<li>
<p><a href="/riot/">Riot</a></p>
</li>
<li>
<p><a href="/nodejs/">NodeJS</a></p>
</li>
<li>
<p><a href="/nosql/">NoSQL</a></p>
</li>
<li>
<p><a href="/react/">React</a></p>
</li>
<li>
<p><a href="/elk/">ELK</a></p>
</li>
<li>
<p><a href="/scala/">Scala</a></p>
</li>
<li>
<p><a href="/hamakor/">HaMakor</a> Open Source in Israel</p>
</li>
</ul>
<hr />
<p>Most of the articles were written by <a href="https://szabgab.com/">Gabor Szabo</a> who provides Automation and DevOps
related services. (Setting up CI systems, introducing test automation, moving the company to &quot;the cloud&quot;, etc.)</p>
<h2 class="title is-4">Code-Maven Sites in other languages</h2>
<ul>
<li>
<p><a href="https://hu.code-maven.com/">Code Maven in Hungarian</a></p>
</li>
<li>
<p><a href="https://es.code-maven.com/">Code Maven in Spanish</a></p>
</li>
<li>
<p><a href="https://ru.code-maven.com/">Code Maven in Russian</a></p>
</li>
<li>
<p><a href="https://osdc.code-maven.com/">OSDC - Open Source Development [Course | Club | Community | Company]</a></p>
</li>
<li>
<p><a href="https://python-he.code-maven.com/">Python Maven in Hebrew</a></p>
</li>
<li>
<p><a href="https://rust-he.code-maven.com/">Rust Maven in Hebrew</a></p>
</li>
<li>
<p><a href="https://he.code-maven.com/">Code Maven in Hebrew</a> (integrated)</p>
</li>
<li>
<p><a href="https://code-maven.com/">Code Maven in English</a> (integrated)</p>
</li>
<li>
<p><a href="https://meta.code-maven.com/">Code Maven Meta</a> (integrated)</p>
</li>
<li>
<p><a href="https://geni.code-maven.com/">Geni Rust API</a> (only started)</p>
</li>
</ul>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>About Code Maven</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-01-28T12:00:01Z</updated>
    <pubDate>2015-01-28T12:00:01Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/about" />
    <id>https://code-maven.com/about</id>
    <content type="html"><![CDATA[<h2 class="title is-4">Contact info</h2>
<p>The Code-Maven site is maintained by <a href="http://szabgab.com/">Gabor Szabo</a>.
You can <a href="https://szabgab.com/contact.html">contact him</a>.</p>
<h2 class="title is-4">Paid services</h2>
<p>Gabor helps teams at various points in their journey to faster development process with more stable releases.
Starting from improved use of your Version Control System, via the introduction of Automated Tests. (Unit, Integration, Acceptance, etc.) Through virtualization and containerization, Continuous Integration and Continuous Deployment towards a cloud-based infrastructure.</p>
<p>At whatever point you are in this process Gabor can help you get started or move on.</p>
<h2 class="title is-4">Main Topics on this site</h2>
<p>This site is primarily because Gabor likes to explain things. Hopefully some of the articles will help you too.</p>
<ul>
<li><a href="/ansible">Ansible</a></li>
<li><a href="/flask">Flask</a>, the Python microframework.</li>
<li><a href="/groovy">Groovy</a></li>
<li><a href="/handlebars">Handlebars</a> the HTML templating system written in JavaScript.</li>
<li><a href="/java">Java</a></li>
<li><a href="/javascript">JavaScript</a></li>
<li><a href="/jenkins">Jenkins</a></li>
<li><a href="/linux">Linux</a></li>
<li><a href="/nodejs">NodeJS</a></li>
<li><a href="https://perlmaven.com/">Perl</a></li>
<li><a href="/php">PHP</a></li>
<li><a href="/python">Python</a></li>
<li><a href="/ruby">Ruby</a></li>
<li><a href="/svg">SVG</a></li>
</ul>
<h2 id="translations">Translations</h2>
<p>The <a href="https://ru.code-maven.com/about">Russian translations</a> were made by Savenkova Natalya.
The other pages are created by Gabor and they are not real translations. More like &quot;similar content in some other language&quot;.</p>
<h2 class="title is-4">Source</h2>
<p>The source of all the articles and examples can be found in <a href="https://github.com/szabgab/code-maven.com">this repository</a>.</p>
<p>Patches are welcome!</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

  <entry>
    <title>Zero</title>
    <summary type="html"><![CDATA[]]></summary>
    <updated>2015-01-28T12:00:00Z</updated>
    <pubDate>2015-01-28T12:00:00Z</pubDate>
    <link rel="alternate" type="text/html" href="https://code-maven.com/zero" />
    <id>https://code-maven.com/zero</id>
    <content type="html"><![CDATA[<p>This is the first post, but as with most of the programming languages we start to count from zero...</p>
<p>I should write something very deep here, after all I am starting a new site, and I am planning
to write about everything. Well, almost everything. I'll probably won't write much about the
Perl programming language, as I am writing about
it on the <a href="https://perlmaven.com/">Perl Maven</a> site.</p>
<p>I used to write a lot on the Perl Maven and by today, it
attracts quite a few readers every day, but I wanted to extend the content to cover all kinds
of other languages and technologies. I was wondering if I should just add those articles
to the Perl Maven site, but in then end I think it would be better to have a site that does
not contain any programming language in its name.</p>
<p>Anyway, let's get started.</p>
]]></content>
    <author>
      <name></name>
    </author>
  </entry>

</feed>

