domingo, 7 de abril de 2019

Hidden Figures


Hidden Figures, a film directed by Theodore Melfi and produced by 2oth Century Fox. This is a movie where we can see the life that three black women has in the science and engineering fields. The three afroamerican women are: Katherine Johnson(Teraji P. Henson), Dorothy Vaughan(Octavia Spencer) and Mary Jackson(Janelle Monáe).

These three women are part of a segregated group in America and around the world. The society is divided into black people and white people. These women together with another group of exceptional black women work in NASA but in a different department and building where only colored women can stay to make the calculations needed for different tasks.

In this fil we see many different ways of discriminations, they have to go to specific restrooms, they were on a tiny office, they were not noticed when asking for promotions or permissions, they have to many obstacles to work as engineer, etc. They have a great potential and intellect but because of their color of skin they are considered to take different positions. At the end of the movie they are considered very important because in the case of Katherine Johnson, she helped with the calculations to help to make the first man in the USA orbit to the moon. Dorothy Vaughan was the first supervisor of the IBM services in NASA, and in the case of Mary Jackson she was the first female aerospace engineer in the USA.

I think this movie is fantastic because it shows us the reality that we were living in those years and nowadays. It shows us that despite the adversities we have to confront the reality and make something different, something that reveal why we are important and that we can make even more than other people think

domingo, 31 de marzo de 2019

Ethical Reflection on Ready Player One


After readying ready player one, we can discuss from two quotes. These quotes are the following:

Morrow wrote in his autobiography that he’d left GSS because ... he felt that the OASIS had evolved into something horrible. “It had become a self-imposed prison for humanity,” he wrote. “A pleasant place for the world to hide from its problems while human civilization slowly collapses, primarily due to neglect.” (p. 120)

(Halliday speaking) “I created the OASIS because I never felt at home in the real world. I didn’t know how to connect with people there. I was afraid, for all of my life. Right up until I knew it was ending. That was when I realized, as terrifying and painful as reality can be, it’s also the only place where you can find true happiness. Because reality is real.” (p. 364) (Ernest Cline)

After Reading these quotes written by Ernest Cline, I can say that in a certain way I agree with the author, but not at all. I believe that many people have a place where they can get disconnected from reality and this world and tele transport themselves into another world created by themselves, but you can´t disconnect yourself reality at all, you need to distinguish what is real and what it isn´t, you have to live your real life.

Oasis has a great potential as a scape for people that need to live their life in a different way, but it also is dangerous if people see it as their real world.
Another advantage of Oasis is the fact that I think people could learn cultural and personal values following rules from this world, they would learn it indirectly while they pass time in Oasis.

For me, using Oasis is the same as using IT technology and social networks and I think that Oasis makes it better, because here you can interact closer with people and require more concentration and effort for some activities.
I think that the real world is different in contrast to another idea of real world in books and movies I have read, I believe that in ready player one this idea is unique.

For me is a fact that we will having something familiar to Oasis for the year 2040 or 2050, technology is increasing on an exponential way.

I think that software architecture at this point can start creating a world similar to Oasis, maybe with some research and technology evolution we can have finally that world in our present

viernes, 22 de marzo de 2019

An Introduction to Metaprogramming


This is an article written by Ariel Ortiz, our professor. Where he talks about metaprograms, which are programs that generates other programs or program parts. So, metaprogramming means writing metaprograms. The most common ones include compilers, interpreters, parser generators, assemblers and preprocessors. We use metaprograms to reduce a tedious programming task.
A quine is a special kind of source code generator. It is a program that generates a copy of its own source as its complete output.

Ruby is a dynamic language that allow us to modify different parts of the program easily during runtime without having to generate source code explicitly. Ruby´s core API and frameworks employ this facility to automate common programming tasks. To accomplish the previous statement we have code as the attr_initialize method that takes as input a variable number of attribute name. Each of this attribute name has the same position reserved for it in the dynamically created initialize methos parameter “args” in order to set its initial value.

We use zip and each methods to iterate at the same time over the attributes declared in list “attrs” and the argument list “args”. As a final step we delegate the attr_accessor method to create the read/write access methods for all the declared attributes.

Metaprogramming should sound difficult or complicated, but once you are familiar with the techniques, it becomes easier. With metaprogramming we can automate error-prone or repetitive programming tasks. We can use it to pre-generate data tables, generate boilerplate code automatically that you can abstract into a function, or even to test ingenuity on writing self-replicating code.

domingo, 17 de marzo de 2019

MICROSERVICES


This Entry is about an article written by Martin Fowler and James Lewis. Where he talks about the arising of the architecture, that we call as microservice Architecture. This term is used to refer a way of designing software in small independent services that will work together. This is used mainly in business applications and have some peculiar characteristics.

 A Business application is usually constructed in three main parts: an user interface, a database and a server application. When you have a monolith application, whenever you make a change on any of these parts, you have to deploy all the application including those that you did not make a change. This is an advantage for microservices, why? Because this kind of architecture are independently deployable, you can change a service and then only deploy that service, not all of them.

Here you have some of the main characteristics described into this article.

Componentization via Services- A component is described as a unit of software that is independently replaceable and upgradeable. This allow us to have several components that together work as the complete functionality, these services are components which communicate with a mechanism such as web service request, or remote procedure call.

Organized around Business Capabilities- The system design will be mostly a copy of the organization´s communication structure.

Products not projects- do not look a software as a set of specifications, look it as an on-going relationship between the developer, software and the client.

Smart endpoint and dumb pipes- Endpoints do all the work

Decentralized Governance- Microservices allows you using different programming languages to build different services to make a solution more efficient and well built.

Decentralized Data Management- Data can also be represented in different forms depending on what the service needs. Each service manages its own database.

Infrastructure Automation-Trying to automate everything, from test to deployment.

Design for failure- Applications must be designed to handle error gracefully.

Evolutionary Design-Have great change control so you can make faster and well controlled changes to the software.

sábado, 9 de marzo de 2019

The 4+1 View Model


We have three types of diagrams, Structure diagrams, behavior diagrams and interaction diagrams. In Structure diagrams we have Class Diagrams, object diagrams, deployment diagrams. In Behavior ones we have State machines diagrams, use case diagrams. At interaction diagrams we have Communication diagram, Sequence diagrams, timing diagrams.

UML is important because enables knowledge transfer and visual presentation of ideas. The 4+1 View states that there are 4+1 views important for development of software. The vies are the following:

·        Logical View: Object model, states what components will be made and how they will behave.
·        Development View: Organization of assets during the development. Which belongs to what
·        Physical View: How software and hardware are related. What system looks like when finished.
·        Process View: Concurrency and synchronized aspects.
·        Use-Case Views/Scenarios: How system interacts with the world and systems around it.

Essentially, we need to make a view model because it will help the programmers to start the development with an idea. We need to model the requirements to avoid the ignorance and to make a group of programmers agree on how they will develop a project. This will help us to go from the requirements that we get from users and customers to the construction of architecture and components, we have to transfer the pipeline into a view design to organize things and manage environments or support the work of other programmers, basically to understand how the project will be developed. If programmers actually work as the six blind men example, everyone would make the components as they understand and they would never join the components on a good way, the programmers need to know how other programmers are developing other components that also may help them to develop their part of the project

jueves, 28 de febrero de 2019

Understanding the SOLID Principles



Solid is an acronym that stands for five principles of object-oriented programming and design.

S-Single Responsibility Principle
O-Open/Closed Principle
L-Liskov Substitution Principle
I- Interface Segregation Principle
D-Dependency Inversion Principle

These principles help to avoid dependencies between the classes.
Now talking a little bit more of these principles we understand the following:
Single Responsibility Principle- This principle states that one class should only have one responsibility so the changes in that class do not end up affecting unrelated critical features on the system. This happens from a single action to a set of processes. You can take a view that a single responsibility refers to a group of related business processes. The stamina and tolerance determine how far you go

Open/closed Principle- This principle talks about that classes should be open for extension but closed for modification, this means that adding new behavior instead of changing the base of a class you should create new classes that inherit from this class and add the behavior there. This helps to avoid errors in child classes

Liskov Substitution Principle- You can pass a new class to an existing function that has been written to work with the base class, and the function will perform its work just as if you had passed an instance of the base class. This principle intended to keep alive and well the working relationship between classes and functions. You should forbid modification of a behavior through the mechanism of inherence.

Interface Segregation Principle- This principle tell us to divide and conquer. Instead of writing a big interface, divide the interface members and put them together so the class would not be loaded with responsibilities we won´t use.

Dependency Inversion- This principle basically tell us to write code that refers to abstract classes and interfaces instead to actual classes

sábado, 23 de febrero de 2019

War Games


This is a Movie directed by John Badham, where the main character is a teenager, called David Lightman and starring by Matthew Broaderick. David loves computers a lot, he likes to discover new functionalities with his computer, he takes it as a challenge. He heard that a new game is being released, so he took his technical abilities to be the first one to play that game. He entered to a rare interface where he found some names that sounds like funny videogames, but to play them he discovered that he had to introduce a password. He passed many hours trying to discover the password, until he found it.

David selected a game where he had to launch a massive attack to other nation. He was playing as Russia, but he did not realize that this was actually a simulation of an actual war and the machine also thought that this was a real simulation. David passed many difficulties to discovered that this was just a simulation and the USA was not being attacked by Russia. But there was a problem, the machine was taking actions to prevent the “attack” so this intelligence wanted to attack Russia. David discovered that the only way to stop the machine was teaching it to don´t play the game because nobody would win. David learned this algorithm by making the machine play tic-tac-toe against itself.

This movie was interesting because it shows us that at that time computers and technology was marvelous, people could contact another computer via phone and everyone can access by this way to another system. So, for me it was so fascinated that a teenager knew all this kind of trick and have all the knowledge to take advantage to this technology. This movie learned us that technology knowledge is reachable for anyone.