the end of devOps

The last month I used some of my time to learn and remember some stuff about devOps, linux, git repositories, setting up servers and the use of tools like cron. As I said some of this activities were more to remember knowledge that I mostly had in my networks classes or operative systems; but in the majority this activities were new to me, some of them I never tried them before and I have to say it was fun.

Part 1part 2, and part 3 of my adventure learning some of devOps can be found on those links in another of my blog entries. You’re free to read them, those are short and maybe funny. I will summarize for you what you will found if decide to read the posts:

In part 1 I wrote about how wrong we are people with the concept of devOps, like it’s completely different of what we think, well not that completely but yeah no ones knows exactly what it means or what to do when working on DevOps.

In part 2 I installed a linux distribution with a virtual machine in my laptop along with python and java and some other tools to start working with DevOps, basically was setting up the environment to be able to do something.

In part 3 we started working! This was a difficult task, I had to create cron jobs, and start automating stuff of my repo using my my tiny  and slow window of linux, it was fun though, but I don’t think this is something I would do for living haha.

In general I loved/hated this activities because:

  1. Is something a haven’t done in a while, so doing something different from what I am used to is good, it’s like relax BUT at the same time I got stressed out because of the things I didn’t knew I could do, learning new stuff is always a challenge, but gaining knowledge is the best reward you can ask.
  2. Again I used tools like virtual machines, linux and commands I am not used to, it was very fun watching me trying to use a different OS in a virtual machine (which changed its layout since the last time I used one), but I don’t like to be stressed.

 

Yeah, I recommend this kind of activities very much, as I said in my blog post about unit testing with python, learning new stuff -even if it’s not what you want to do- is an experience you should never let go. Go and learn something new, start a new course, watch documentaries, play a new game, just don’t stay where you are because you are comfortable. Enjoy life and get the most of it in every situation.

Python Unit testing

For this blog entry, we are focusing in unit testing on python. While doing some research it’s kinda similar to JUnit (for unit testing on java) and it’s python (my first programming language) so I hope it be as easy as it sounds.

First I read an article recommended by our professor about small talk and testing on it using a framework to support it. Interesting article, but most useful is the tool Hypthes.is which allow us classmates to make annotations on the document so we could share our thought about the paper.

Screen Shot 2019-04-07 at 13.54.27.png

Also, we could read the paper thanks to Wayback Machine which allows to see all versions of some websites so, while I was on this I use the occasion to look into a website I like to see how it looked years ago. I chose instagram because is my favorite social network and app, I obviously knew that there wasn’t a website since the beginnings but I had the doubt of what they used to show and I found this:

Screen Shot 2019-04-07 at 14.01.59.png

 

It’s nostalgic to see the old version of instagram before Facebook happened. I think Instagram have one of the best app designs (until their last update that I don’t love) but the oldie one is pretty pretty, it would be nice to have a feature like use the old design or something. But well… let’s continue with python.

For this task we had to look into a LinkedIn course about using PyCharm for unit testing on python: Unit Testing and Test Driven Development in Python course. First we defined some test cases

Screen Shot 2019-04-07 at 14.16.27.png

and then we run themScreen Shot 2019-04-07 at 14.08.49.png

At the end all test cases were successful and the tutorial was fun to do. I truly feel I have learned something new and useful because the course was so well explained. I think this kind of activities are the ones we need to do to feel the course is worthing every cent our parents or tutors are spending in our education.

About PyTest: I liked it, I think is very simple but powerful at the same time, like python is very simple to use and implement and I think no one who likes this kind of stuff would have problem understanding it. It has a lot to do with JUnit, but it’s very different at the same time, I just enjoyed it.

I highly recommend to take this course now more than ever. Bye, bye.

 

 

Intro to DevOps part3

Now, in this entry we’ll see Intro to devOps volume 3 (I love Guardians of the Galaxy movies). This is the third part of the blogs about devOps and how to setup a full environment for deployment, automation, etc. using a linux machine. In this part I’ll talk and try to do the setup for GitHub, ssh and keys.

The first step in this part is to have a GitHub account which I already have (yay), you can review it here. Now I should create a repo for testing this, the teacher said we should use some web content, it is the most common thing nowadays I suppose. So, for this I will use a repo that I used to learn and practice Angular.

I lost some time because by looking at my profile, something I don’t use, my first years in GitHub were basically nothing in terms of contributions compared to now and it’s because of my different jobs, it’s great companies use such useful tools like GitHub.

Okay, now I realized that I should’ve went by the Node way when installing web servers because it’s what I usually do haha, so let’s do that “how to install node in ubuntu and after that we can continue.

Next is setting up my two factor authentication on my GitHub account which I have already did before. And for the SSH keys, I have created them before but I need to create one for my linux machine. Usually this is easy, but oh yisus it’s difficult to do it from a virtual machine! and I don’t use the same commands as for my Mac so ugh…

After that I cloned my GitHub repository and made some changes to see it actually works, made some modifications and yeah, everything perfect.

At last using what I learned in the previous post Intro to DevOps part2, I created a cron file to automate the pull of my GitHub everyday at 18:hrs (don’t ask me why).

All this was tedious but it’s like everything at the first time, I learned a lot or at least remembered some thing from previous classes that now I see how useful they are. I liked this practice, I recommend you to do the same!

Intro to DevOps part2

This is the second part of my blog Intro to DevOps, which I wrote two weeks ago. In this part I’m installing a Linux distribution, installing support for development and at last setting up the first test of Cron.

I’m using a MacBook Pro 2016 and I don’t want to deal with all the complicated stuff to install linux right on hardware so I am using a virtual machine from Oracle, VirtualBox. Last time I installed a Virtual Machine and a Linux distribution was in my Networks class two years ago, so let see if I don’t get in trouble.

First, this is newer version of virtual box that the one I used previously so I’m dealing with “where do I click to install the linux distribution”. Oh, I downloaded Ubuntu Desktop, btw.

I thought I was installing the version with no UI, but it does, so it’s new for me too. It’s taking so long… Ok! it’s done, I have Linux Ubuntu in my Mac. Now, the next step is to setup my programming languages, I think I’m just gonna install Java and Python.

Installing java was so hard, I don’t know if I went for an incorrect path or what, I don’t even know if I actually installed it. Python 3 was much easier, just a few commands and that was it. Now GitHub, it should be easy… and it was :D. Next I have to setup web deployment, for this I’ll go for LAMP, it’s something I have done before. For this I’m following the instructions on How to install LAMP Stack on Ubuntu and it was just fine, long, but not hard.

Now, the last thing to do in this blog is to setup the first test use of Cron on the server. Okay, I thought Cron was something completely different of what it actually was. But by doing the short tutorial I realized this was something I have actually done before, also for my network Class.

 

Okay, that was all. Peace!

The secret life of bugs

Although the title sounds interesting, the original reading from which I am writing this post (The Secret Life of Bugs) was really boring, interesting, but also boring. I mean I get it because it involves a lot of research, but I don’t think there was fully necessary to include all the information in just now document.

I like it includes data collected from surveys and (I wasn’t surprised) it’s hard to see or bad that most people is still doing manual testing instead of automated and as usual the major kind of bugs found were Code Bugs and the least are spec bugs, which is pretty reasonable because if specs aren’t well defined from the beginning, then, well, the project just won’t work.

That’s all what my mind can give for this entry, sorry but my head is just tired. Peace!

Intro to DevOps

This is a post about me giving you an introduction to DevOps, but for this I had to learn myself what DevOps mean. First I would like to say what I think of DevOps before I read anything, only pure experience and casual discussions about this with colleagues and friends.

DevOps sounds like development operations, which is operaciones de desarrollo in Spanish (it’s easier for me if I translate first). With this in mind, I would say that a devOps developer would be in charge of creating a flow system for all the tools and stuff the system could need, this is from servers to deployment but nothing to do in the code of the project in particular. I mean, he or she will establish the environment for the -for example- a web developer may be able to work and deploy all changes he or she make. Something like that.

Okay, now the definition I found on the post my professor recommended us (What is DevOps?) says a lot, a lot of DevOps and finding a single definition is so hard that I just kept the one the author gives first:

DevOps is the practice of operations and development engineers participating together in the entire service lifecycle, from design through the development process to production support.

So I am right in one thing, DevOps involves all the process, actually is kinda a process by what I understood, also it talks more about the environment where the project will be developed and not the system itself. Also, there were given other points I think are useful to “fully” understand what this methodology is.

  • Infrastructure Automation – create your systems, OS configs, and app deployments as code.
  • Continuous Delivery – build, test, deploy your apps in a fast and automated manner.
  • Site Reliability Engineering – operate your systems; monitoring and orchestration, sure, but also designing for operability in the first place.

In these points are mentioned parts of the process involved in a DevOps development. The last one Site Reliability Engineering is more complex to me to explain so, I found a better definition for that. According to wikipedia, “Site Reliability Engineering (SRE) is a discipline that incorporates aspects of software engineering and applies them to infrastructure and operations problems. The main goals are to create ultra-scalable and highly reliable software systems”. According to Ben Treynor, founder of Google‘s Site Reliability Team, SRE is “what happens when a software engineer is tasked with what used to be called operations.”

Sure DevOps may be something like I said at the beginning but it also not, I mean, the term is so much more complex than that and, honestly, impossible for me right now to make it clear to you (it is still not 100% clear to me). But this research surely makes it more clear to me than before and now I know this is something I can add to my projects and it is not hard.

So, that’s what I’m keeping in terms of DevOps knowledge, I hope this is useful for you.

Trying JUnit

Now, for the Software Quality and Testing class, we went into JUnit for unit testing in java. To try it out I followed a tutorial, more like a class, that was pretty nice, I’ll give you the link somewhere in the post so you can do it by yourself. The reason I am l¡hiding the link over there is to you to read some of my post. It will be short, I promise.

Okay, I begun with Eclipse, the IDE for developers, more like java developers. I have always liked to use this IDE since I was in my first semesters of college. Okay, Eclipse already have JUnit or you just install the plugin if not.

I tried JUnit before in my Architecture class, so this was more like a refresh of what JUnit is. Some useful concepts and tools are this:

  • JUnit promotes the idea of “first testing then coding”, which emphasizes on setting up the test data for a piece of code that can be tested first and then implemented. This approach is like “test a little, code a little, test a little, code a little.”
  • A Unit Test Case is a part of code, which ensures that another part of code (method) works as expected. To achieve the desired results quickly, a test framework is required. JUnit is a perfect unit test framework for Java programming language.
  • Fixtures is a fixed state of a set of objects used as a baseline for running tests.
  • A test suite bundles a few unit test cases and runs them together. In JUnit, both @RunWith and @Suite annotation are used to run the suite test.
  • Test runner is used for executing the test cases.
  • JUnit classes are important classes, used in writing and testing JUnits.

So, what I learned is that for a good unit test set, you need your code (obviously), the one that will be tested; minimum one class where you will write your tests or how you will test your code, and a main class to run all the tests and return if you win or lose in this race we call code testing.

For example, what I did was a simple class that receives a string and prints it into the console.Screen Shot 2019-02-06 at 00.05.05

Then I have the class where you write your test cases, with simple methods that so what you expect your code to do.

Screen Shot 2019-02-06 at 00.06.09.png

And finally you have your test runner that is where you run your tests (sound duuh) and specify what the outputs will be in case the code passes the tests or fails them.

Screen Shot 2019-02-06 at 00.07.25.png

Before I show you te results of my tests, please try to figure it out by looking at my code, read it very carefully and let’s hope you can see the future.

The result is the following:

Screen Shot 2019-02-06 at 00.10.15.png

This is because in the test class I changed the value of my message to a new one after the code was executed so my test case was expecting a different message that the one was given.

That’s it, hope you liked this post. And, true, the link to the tutorial is in the word Eclipse, in the second appearance of the word in the entry.

Second test

Okay, I have not wrote any blog entry since my first blog post explaining what this blog would be about. The topic is the same, Software quality and testing. Now it has been three or maybe four weeks since the course began and I have to say, I haven’t been so much into it. I mean, I like the course and the topic, but for personal reasons I haven’t giving my best trying to learn.

Don’t misunderstand me, I have not been doing research about the course, BUT I have been having work experience with related to this. True, I didn’t say that about me, I am currently working as a frontend developer and yes, you may think (I used to) that there is no testing or QA in fronted development, but oh my carrot, there is a lot of testing. Actually, when I’m about to finish a component for a web app or something we always joke saying “I finished the task, now I have to wait for Dara to say it is wrong” because it’s true, there’s always something the designer don’t like how it looks or how it feels and we know the importance of user experience, so we always have in mind those little corrections we know we will have to do. So yeah, there is a lot of QA in frontend development.

In rare cases the page is approved without corrections and then it’s like:

giphy-1

Well, keeping with what the class has been for me, I have missed some of them, hope it doesn’t make me miss the semester 😬. Agh, hate that I get distracted by my thoughts so easily. Okay, in the class we have worked about our final project, I don’t know if I discussed it already but you can see what’s it about in my other entries about smart cities (another course) and it begins in here: The beginning.

Now, the class has been focused on work on the project with some discussion about the chapters in the book we use for the class (highly recommended: Introduction to Software Testing-Cambridge University Press (2017)) and we do some quizzes about that using kahoot.it (I love it) -I have been doing just greatly horrible in these- but I have learn stuff like Edison was the first person that talked or used the word bug as we do. (something like that, hope I’m right, in case I am not I would say I’m joking and I do it for making the blog entry more fun 🙂).

Well, also we have been using JUnit for unit testing in java (long time ago without programming in java) and I have to say it works just fine, would be helpful if we would know about this since 2nd semester in our object oriented programming class instead of teaching us about graphics in java (they suck).

Okay, this class has been fun, I like it, I like the attitude, everything is great. Peace, I’ll end here. Love u.

Software de Calidad

This is my introduction to a new category that I’ll include in my posts. It will be related to Software Quality and Testing and the reason I will begin with this is that I am taking this class in my new and last semester of college.

Now that I think of, it is bad/wrong/mysterious/weird/funny that I am taking this class in my last semester when it is supposed to be taken in the 6th (2 years ago (yeah, it is my 10th semester)). The reason of why I think this is bc I believe software testing as really important phase in you project development usually left for the last.

I believe is important to be testing your code from the first line you write (ok, no that much) to the last one, but right now I will no give more arguments because, again, I’m taking this so important class in my last semester and I need to learn more.

Anyways, I have been much time without writing, I have to make myself used to it. Hope my post be good enough for you.